2013-01-23 100 views
0

可能重複:
Find out if 2 lines intersect如何檢查兩條線的交點?

如果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; 
} 

回答

0

Wolfram擁有您所需的一切,特別是Line-Line Distance,即線條之間的距離。如果線是零(+ -epsilon),那麼它們相交。

0

Line segment intersection是你在找什麼。也許你可以根據你的需要調整掃描線算法。

在上面的代碼片段中,爲了找出兩條2D線是否平行,您只需要從輸入點定義的矢量計算標量乘積。