dポイントプレゼントキャンペーン実施中!

座標上のある点が、ある3つの座標点で結んだ三角形の領域内にあるか調べる方法。

座標上に3つの点(x1,y1)(x2,y2)(x3,y3)で結ばれた三角形があります。
ある点(px,py)が、この三角形の内側の領域に存在するかどうかを知りたいのですが、
数学のなんという分野で、どういう求め方をするのかがわかりません。
どなたかお力添えいただければ幸いです。
関係ないかもしれませんが、左上を0,0とし、右下はn1,n2の、
Windowsペイントのようなマイナスを考慮しない座標になっています。
線上を内側とするか、外側とするかはどちらでもかまいません。
どなたかお詳しい方、お暇なときにでもご回答よろしくお願いします。

A 回答 (3件)

点(x2,y2)を視点にして点(x3,y3)の方向を見たとき、点(xp,yp)が右側にあるか、左側にあるか


点(x3,y3)を視点にして点(x1,y1)の方向を見たとき、点(xp,yp)が右側にあるか、左側にあるか
点(x1,y1)を視点にして点(x2,y2)の方向を見たとき、点(xp,yp)が右側にあるか、左側にあるか
この3つの位置する方向がすべて同じなら、点(xp,yp)は3点で結ばれた三角形の内側にあります。

式で表すと、
z1=(x3-x2)(yp-y2)-(y3-y2)(xp-x2)
z2=(x1-x3)(yp-y3)-(y1-y3)(xp-x3)
z3=(x2-x1)(yp-y1)-(y2-y1)(xp-x1)
を計算して(外積の応用)、
z1>0,z2>0,z3>0 または z1<0,z2<0,z3<0 なら三角形の内側
z1=0,z2>0,z3>0 または z1=0,z2<0,z3<0 なら線分(x2,y2)-(x3,y3)上
z1>0,z2=0,z3>0 または z1<0,z2=0,z3<0 なら線分(x3,y3)-(x1,y1)上
z1>0,z2>0,z3=0 または z1<0,z2<0,z3=0 なら線分(x1,y1)-(x2,y2)上
z2=0,z3=0 なら点(x1,y1)上
z1=0,z3=0 なら点(x2,y2)上
z1=0,z2=0 なら点(x3,y3)上
上記以外は三角形の外側
    • good
    • 1
この回答へのお礼

確かに点の左右の位置関係を見たところおっしゃる通りの現象になっていました。
式もありがとうございます。
いくつかサンプルを用意してみて代入してみたら全てうまく行きました。

結果は得られましたが、正直お二方の回答内容は理解できていませんので、
これから勉強したいと思います。
もっと学生時代勉強しとけばよかった・・・。
本当にどうもありがとうございました。

お礼日時:2010/08/28 00:06

数式にこだわらなければ、精度は落ちますが方眼紙にプロットしては。


結果のみでもよければ測量ソフトで計算し、報告しますので、座標を教えて下さい。
    • good
    • 0
この回答へのお礼

お気遣いありがとうございます。
写真の座標にカーソルを当てた時、
それが何かを説明するWebプログラムを作っていますので、
お気持ちだけいただいときます。

お礼日時:2010/08/28 00:08

高校数学の「不等式の表す領域」(たぶん2年生で履修)の知識で調べられます。


A(x1,y1),B(x2,y2),C(x3,y3),P(px,py)とします。
まず直線BCの式を求めます。
求められたものがax+by+c=0だとします。
ここに点Aと点Pの座標をそれぞれ代入します。
つまりax1+by1+cとapx+bpx+cになりますが
この符号が同じだったら
直線BCから見てAとPが同じ側にあることになります。
(ax1+by1+c)×(apx+bpx+c)>0
としても良いです。
「>」を「≧」とすれば線上の点も含めることとなります。

同じことを直線CAと直線ABでも行い
すべてについて「同じ側」となれば
三角形の内部にあることになります。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
おっしゃる通り数IIの教科書に書いてありました。
前後で必要な知識もまるっきり忘れてるので全然思い出せないですが、
じっくり読んで理解してみようと思います。

お礼日時:2010/08/27 23:56

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