• ベストアンサー

範囲内にあるかどうか

点A,B,C,Dを結んだ矩形に点Fが、その矩形の 範囲内にあるかどうかを判定する方法(プログラムや計算方法) はどのようにして求めればよいでしょうか。

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

  • ベストアンサー
  • Willyt
  • ベストアンサー率25% (2858/11131)
回答No.2

矩形の平行な2辺を表わす直線の方程式をそれぞれ aX+bY+c1=0、 aX+bY+c2=0 dX+eY+f1=0、 dX+eY+f1=0 とし、 F点の座標を(X0 Y0)とします。 F点が矩形内にある必要十分条件は (aX0+bY0+c1)(aX0+bY0+c2)<0 且つ (dX0+eY0+f1)(dX0+eY0+f1)<0 となります。矩形線上を許すなら上記の不等号は<=になります。

miru0606
質問者

補足

早速ありがとうございます。 教えて頂きました内容が解っておりません。 aXは点Aのx座標と考えるのでしょうか? そうすると、 教えて頂きました式の中の c1、c2、f1、eYはどのように考えるのでしょうか? 何も知らなくてすみません。 たとえば、 4つの座標A(5,3),B(13,4),C(14,11),D(3,8) の点を右回りで結び矩形を作り、 点F(10,7)がこの矩形にあるかどうかという判定が できないかと考えております。

その他の回答 (4)

回答No.5

ANo.3 です。 ごめんなさい。 回答日時:08/11/06 14:56 のやり方じゃ、駄目だった。 あれじゃ、線分CDとの判定を忘れている。 点F(X1,Y2)で、軸に平行な関数をそれぞれ以下のように作成 Y=X1 X=Y1 各線分AB,BC,CD,DAの直線方程式との交点を求め 大小関係を比較するのが簡単なのではないかと。

miru0606
質問者

お礼

ありがとうございます。 おかげさまでわかりました。

  • Willyt
  • ベストアンサー率25% (2858/11131)
回答No.4

>aXは点Aのx座標と考えるのでしょうか? 四つつの式はそれぞれ矩形を構成する辺の直線式です。これは頂角の座標を与えられれば、それぞれの係数 a,b,c,d,e,f は簡単に計算でますね。これは2点を与えて3つの係数を算出する Procedure を作っておけば簡単です。それぞれの平行線は a b、d eが共通ですからそのように示してあります。c と f の値は変りますから添字をつけてあります。 >c1、c2、f1、eYはどのように考えるのでしょうか? 上記でお分かりですよね?

miru0606
質問者

お礼

ありがとうございます。 おかげさまでわかりました。

回答No.3

単なるプログラムならやりかたは、いくらでもある。 じゃ、こんなのはどうだろう。 1. 線分ABが、Y軸と平衡になるように矩形ABCDを回転。 FLAG1 = A.X<F.X かつ F.X<C.X なら TRUE でなければ、FALSE 2. F.X を Y 軸方向にのばし、線分 BC と交差する点をP1とし P1の座標 を計算 FLAG2 = P1.Y < F.Y なら TRUE でなければ FALSE 3. F.X を Y軸方向にのばし、線分DA と交差する点をP2とし P2の座標を計算 FLAG3 = P2.Y > F.Y なら TRUE でなければ FALSE 範囲内にあるか = FLAG1 かつ( FLAG2 かつ FLAG3) となる。 これなら基本的な1次方程式で解ける。 高速化するなら、各FLAGを判定した時点で、あきらなかな範囲外なら他の計算は省く。 ちなみにコンピュータのディスプレイの座標系は、一般的に Xは、左端が0。→方向に増加 Yは、上端が0。↓ 方向に増加となるので注意。

回答No.1
miru0606
質問者

補足

ありがとうございます。 ところが、よく解っておりません。 たとえば、 4つの座標A(5,3),B(13,4),C(14,11),D(3,8) の点を右回りで結び矩形を作り、 点F(10,7)がこの矩形にあるかどうかという判定が できないかと考えております。

関連するQ&A