2010-06-22 47 views
3

我有一組由用戶繪製的點。他們將圍繞着一些物體。碰撞檢測自定義草繪形狀,以點列表表示

我需要以某種方式將這組點轉化爲一個形狀,所以我可以找到該區域來檢測碰撞。

一種圖像將澄清:

Set of points represented as shape http://www.imagechicken.com/uploads/1277188630025178800.jpg

到目前爲止,我所擁有的最好想法包括遍歷每一個像素,以確定它是否在形狀的「內部」或「外部」,但這會非常慢,而且我甚至不確定如何確定'inside'/'outside'bit ...

任何提示?我使用.NET(C#和XNA),如果這有助於你的幫助我!

回答

1

那麼我得到它的工作感謝some help on another forum

我使用GraphicsPath類來爲我做所有的辛苦工作。

這是我的方法結束什麼看起來像:

public bool IsColliding(Vector2 point) 
{ 
    GraphicsPath gp = new GraphicsPath(); 

    Vector2 prevPoint = points[0]; 
    for (int i = 1; i < points.Count; i++) 
    { 
     Vector2 currentPoint = points[i]; 

     gp.AddLine(prevPoint.X, prevPoint.Y, currentPoint.X, currentPoint.Y); 

     prevPoint = currentPoint; 
    } 
    gp.CloseFigure(); //closing line segment 

    return gp.IsVisible(point.X, point.Y); 
} 

感謝您的建議你們倆

1

您可以將您的形狀想象爲多個形狀的並集,每個形狀都是簡單的閉合多邊形。
檢查每個對象是否位於任何多邊形內部,如下所示:
所有點由線連接 - 每條線都有一個定義它的公式。
對於每個對象 - 爲通過此對象的線條建立方程式。
現在 - 對於每個對象方程式,您需要檢查多少行(點之間的那些行)與此對象方程相交 - 但只計算處於兩點之間的憤怒中的交點(而不是在行的其餘部分在兩個點之外)並且只有物體一側的交點(選擇一側 - 無關緊要)。
如果計數是偶數 - 物體在形狀之外 - 否則它在裏面。

1

只是我會說的任何事情的前兆,我沒有在這個領域的經驗,這只是我將如何去解決這個問題。

很多遊戲使用的策略被稱爲Hit Boxes。檢測一個點是否在一個正方形內比任何其他圖形要容易得多。但是這並不能給你一個確切的碰撞,它可能就在你想要的對象之外。

我以前見過碰撞'氣泡'。 Here是我爲您找到的一個鏈接。這解釋了在控制檯遊戲Super Smash Brothers中使用Collision Bubbles。

給定一個點,距離公式和半徑,可以很容易地實現碰撞氣泡。爲了讓它向前邁進了一步,我做了一點研究,我看到了一個漂亮的小算法(比前兩個建議更先進),「用於凸對象的Gilbert-Johnson-Keerthi碰撞檢測算法。 「 Here是ya的鏈接。所提供的實現是用D編寫的。如果你在C#中工作,那麼翻譯起來應該不會太困難(我也會強烈建議摘要化該算法)。

希望這給你一些方向。