重複の可能性:
2 つの線が交差しているかどうかを調べます
2 つの行が関数に渡された場合、それらが交差しているかどうかをどのように推測できますか? 各線は 2 つのオブジェクトの形をしているCPoint
ので、合計で 4 つのポイントがあります。以下は私が思いついたものです。各線の傾きと Y 切片を計算し、それらから交点を計算します。次に、交点がセグメント上にあるかどうかを確認します。はいの場合は false を返します。いいえ、つまり交差しない場合は、true を返します。しかし、それは多くの問題を示しています。これを行うためのより簡単で効率的な方法はありますか?
注 :勾配と Y 切片に使用するデータ型がよくわかりませんでした。
bool CShortestPathFinderDoc::edgeTest(CPoint P,CPoint P2,CPoint E,CPoint E2)
{
bool status=true;
double m1,m2; //slopes
double b1,b2; //y-intercepts
double y,x; //intersection point
m1=((double)P.y-P2.y)/((double)P.x-P2.x);
m2=((double)E.y - E2.y)/( (double)E.x - E2.x);
if(m1 == m2) //if lines are colinear
return true;
b1=P.y-(m1*P.x) // Get the..
b2=E->y - (m2*E.x); // Y-intercepts.
x=(b2-b1)/(m1-m2);
y=m1*x + b1; //x,y is the intersection point!!!
if((x<P2.x && x>P.x)) //if intersection point lies on line!!!!!
{
if(P2.y > P.y)
if(y<P2.y && y>P.y)
status=false;
if(P2.y < P.y)
if(y<P.y && y>P2.y)
status=false;
}
return status;
}