|
みなさん
こんにちは。
>
>コードにしてみたんですけど、
>正直、合ってるのか間違ってるのかわからないので、
>検証をお願いします。
>
> 'まずは、rectAに対し、上が含まれる可能性があるか。
> 'rectBの上がrectAの上よりも下であり、かつ、rectAの下よりも上であること
> If rectB(3) <= rectA(3) And rectB(3) >= rectA(4) Then
> f = True
> End If
>
> '次に、rectAに対し、下が含まれる可能性があるか。
> 'rectBの下がrectAの下よりも上であり、かつ、rectAの上よりも下であること
> If rectB(4) <= rectA(4) And rectB(4) >= rectA(3) Then
> f = True
> End If
この比較ですとBの四角形の中にAの四角形が内包されるケースがひっかかりません
以下の様にしてみたらどうでしょうか?
’Bの上がAの下よりも下にあるかBの下がAの上よりも上にあれば重ならない
If rectB(3) < rectA(4) Or rectB(4) > rectA(3) Then
f = False
Else
f = True
End if
> 'フラグに引っかかってたら、横についての検査。
> If f = True Then
> 'まずは、rectAに対し、左が含まれる可能性があるか。
> 'rectBの左がrectAの左よりも右であり、かつ、rectAの右よりも左であること。
> If rectB(2) >= rectA(2) And rectB(2) <= rectA(1) Then
> MsgBox ("交差しています")
> End If
>
> '次に、rectAに対し、右が含まれる可能性があるか。
> 'rectBの右がrectAの右よりも左であり、かつ、rectAの左よりも右であること。
> If rectB(1) <= rectA(1) And rectB(1) >= rectA(2) Then
> MsgBox ("交差しています")
> End If
> End If
>
>End Sub
比較については上の記述したのと同様です。
それとこの記述の場合、Bの左右共にAの左右内にある場合、2度メッセージが出る事になりますので、1回目のメッセージ出力後に Exit Sub の記述をした方がよいと思われます。
|
|