• ベストアンサー

傾いた四角形内の範囲の条件式

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

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.5

No.1,2です。 外積を習っているかを全く考えていませんでした。 最初の外積の値は (x2-x1)*(y5-y1)-(y2-y1)*(x5-x1) となります。 残りも同じような式になります。 No.4の回答と考え方は同じなのですが、割り算がないため鉛直部分を考慮しなくてもよいので、一般的にはこの方法を使います。 先に触れましたように、凸図形の場合に一般的に使える方法です。(全ての内角が180度以下) 凹部(180度以上の内角)がある場合には凸図形に分解すれば同じ論理でできます。三角形に分解すると確実に凸図形に分解できます。 以上ご参考に

relief001
質問者

お礼

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

その他の回答 (4)

  • exec_szk
  • ベストアンサー率33% (2/6)
回答No.4

質問された方の年齢を存じ上げないのですが、高校生以上の方ですよね? 中学あたりで直線を式で表す問題を解いたと思います。 例えば、図の一番上の一辺を式で表すと、 y-y4=(y4-y1)/(x4-x1)*(x-x4) です。 移行してy=の式にし、xにx5を代入します。 そして得られたyは直線上のx座標がx5だったときのyの値となります。 この値がy5より小さければ、Eは直線より下ってことですよね。 これを四つの辺に対して調べればOKです。 この方法の弱点は辺が鉛直のとき傾きが無限大(小)となってしまい、計算できなくなることです。 上手く場合わけして回避してください。 私、実はVBを使ったことがないので、もっと簡単な方法があるかもしれません。 分かりにくい説明で申し訳ありませんでした。

relief001
質問者

お礼

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

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.3

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

relief001
質問者

お礼

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

  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

No.1の訂正です ベクトルDAと、ベクトルAEの外積 では無くて ベクトルDAと、ベクトルDEの外積 ですね

  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

ベクトルABと、ベクトルAEの外積 ベクトルBCと、ベクトルBEの外積 ベクトルCDと、ベクトルCEの外積 ベクトルDAと、ベクトルAEの外積 を計算し、全て同じ符号になれば内側にあることが分かります 要するに辺のベクトルの方向に対して同じ方向(この場合は必ず左側)にEがあります。 ただし、二次元ですので、三次元に拡張して(Z=0)とおいて、計算するとX=0, Y=0となりZだけが値を持ちます。 それで判断します。 凸図形の場合には同じ性質があります。

関連するQ&A

専門家に質問してみよう