プロが教える店舗&オフィスのセキュリティ対策術

図のように4点ABCDで結ばれた傾いている長方形に、点Eが枠の中にあるのかを判断するには、
どういった条件式を書けば良いのでしょうか?

よろしくお願いします。

「傾いた四角形内の範囲の条件式」の質問画像

A 回答 (5件)

No.1,2です。


外積を習っているかを全く考えていませんでした。
最初の外積の値は
(x2-x1)*(y5-y1)-(y2-y1)*(x5-x1)
となります。
残りも同じような式になります。
No.4の回答と考え方は同じなのですが、割り算がないため鉛直部分を考慮しなくてもよいので、一般的にはこの方法を使います。

先に触れましたように、凸図形の場合に一般的に使える方法です。(全ての内角が180度以下)
凹部(180度以上の内角)がある場合には凸図形に分解すれば同じ論理でできます。三角形に分解すると確実に凸図形に分解できます。

以上ご参考に
    • good
    • 0
この回答へのお礼

ありがとうございます。
ベクトルの知識はあまり無いのですが、式を書いて頂けたので、条件式は書くことができました。

お礼日時:2012/12/10 09:14

質問された方の年齢を存じ上げないのですが、高校生以上の方ですよね?



中学あたりで直線を式で表す問題を解いたと思います。

例えば、図の一番上の一辺を式で表すと、

y-y4=(y4-y1)/(x4-x1)*(x-x4)

です。

移行してy=の式にし、xにx5を代入します。

そして得られたyは直線上のx座標がx5だったときのyの値となります。

この値がy5より小さければ、Eは直線より下ってことですよね。

これを四つの辺に対して調べればOKです。

この方法の弱点は辺が鉛直のとき傾きが無限大(小)となってしまい、計算できなくなることです。

上手く場合わけして回避してください。

私、実はVBを使ったことがないので、もっと簡単な方法があるかもしれません。

分かりにくい説明で申し訳ありませんでした。
    • good
    • 1
この回答へのお礼

ありがとうございます。
計算が出来なくなってしまうのは少し困るので、
このような方法があるということを頭に入れておきます。

お礼日時:2012/12/10 09:10

方法1


点ABCDEをすべて、点Eが原点になるように平行移動させる。∠AEB+∠BEC+∠CED+∠DEAを計算します。その値が2πまたは-2πに近ければ内部、0に近ければ外部。近いというのは計算誤差が発生するため。
角度は内積を使用して求める。
方法2
点ABCDEをすべて、点Eが原点になるように平行移動させる。線分AB、BC、CD、DAがX軸の正の部分と交差する数を求める。偶数なら外部、奇数なら内部。
    • good
    • 1
この回答へのお礼

ありがとうございます。
参考にさせて頂きます。

お礼日時:2012/12/10 09:08

No.1の訂正です


ベクトルDAと、ベクトルAEの外積
では無くて
ベクトルDAと、ベクトルDEの外積
ですね
    • good
    • 0

ベクトルABと、ベクトルAEの外積


ベクトルBCと、ベクトルBEの外積
ベクトルCDと、ベクトルCEの外積
ベクトルDAと、ベクトルAEの外積
を計算し、全て同じ符号になれば内側にあることが分かります

要するに辺のベクトルの方向に対して同じ方向(この場合は必ず左側)にEがあります。

ただし、二次元ですので、三次元に拡張して(Z=0)とおいて、計算するとX=0, Y=0となりZだけが値を持ちます。
それで判断します。

凸図形の場合には同じ性質があります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています