2012-04-07 99 views
-1

我想找到一個公式來確定一條線是否與一個多邊形相交。我試過了,但下面的代碼無法正常工作。多邊形線碰撞檢測

bool Check_Collision(float x1,float y1, float x2, float y2) 
{ 
     int j=MyPolyVector.size()-1; 
     for (int i=0;i<MyPolyVector.size();i++) 
     { 
       float x3=MyPolyVector[i].X; 
       float x4=MyPolyVector[j].X; 
       float y3=MyPolyVector[i].Y; 
       float y4=MyPolyVector[j].Y; 

       float denom= ((y4-y3)*(x2-x1))-((x4-x3)*(y2-y1)); 
       float ua = (((x4-x3)*(y1-y3))-((y4-y3)*(x1-x3)))/denom; 
       float ub = (((x2-x1)*(y1-y3))-((y2-y1)*(x1-x3)))/denom; 
       j=i; 

       if(ua >= 0.0f && ua <= 1.0f && ub >= 0.0f && ub <= 1.0f) return true; 
     } 
     return false; 
} 

回答

2

我覺得這個鏈接可能對你很有意思,得到的訣竅: Point in Polygon Problem

還有一個鏈接的資源,對於C-代碼: Point in Polygon - C Code

這問題主要是在OpenGL上下文中處理的,解決這個問題的主要思想是計算多邊形和任何直線的交點,這些直線是通過你的點來檢查的。

你必須檢查多少個幾何圖形,一個點是否在多邊形內?

PS:我剛剛發現這個職位對這個問題:-) Stackoverflow - Point in Polygon

+0

Thx對於響應,但它們是不同的東西。 – 2012-04-07 12:21:20

0

我可以建議你在this book看看,也搜索交線2D和範圍的計算之前檢查。

此外,您的代碼需要通過零點檢查進行劃分,並進一步考慮相互線的尺寸和公差。

+0

我正在查看這本書。你能否通過零檢查來解釋這一劃分。 – 2012-04-07 14:16:36

+0

既然你會用它來劃分,你應該檢查denom是否爲零。 – 2012-04-07 17:54:03

0

它看起來像你有錯誤的方程線交叉點。我認爲列出的正確方程式爲here

也就是說,解決此問題的一個好方法是查看該線是否與多邊形上的任何線段相交。因此,爲了測試這一點,計算線與多邊形邊線的每條線的交點,並且如果此點在多邊形的線段內,則存在交點(查看該點是否在由多邊形定義的邊界內)段的端點)。 (也許這就是你想要做的事情,但是因爲你沒有給出解釋,所以有點難以分辨。)