2012-02-23 66 views
3

我有問題要問你們...如何確定三角形是否包含特定點?

現在讓我們說我有一個虛擬的網格,我有下面

Junction Points On Virtual Grid

現在讓這些虛擬網格,顯示結點說我畫一個三角形到這個虛擬的網格,顯示如下

Triangle with Points

現在我不知道如果任一虛擬網格的一點是由三角形包含 ... 如何使用C#.Net實現此目的?

注意:我也知道三角形的點,問題是2D平面..

我最誠摯的問候......

+1

問題:這是否總是一個三角形包含一個直角? – flq 2012-02-23 09:15:08

+0

不,不是......如果我的回答是肯定,你會有什麼建議? – 2012-02-23 09:21:24

+0

不太確定;)但是三角形本身的簡單三角將允許您以相當快的速度計算某些行。 – flq 2012-02-23 09:36:54

回答

3

定義你的三角形GraphicsPath和使用GraphicsPath.IsVisible(Point)方法來確定這條路合作毋庸置疑。

+0

其中使用類似floodfill的算法,因此對於簡單幾何來說效率相當低。 – 2012-02-23 09:18:37

+0

這似乎很簡單..我也會嘗試。謝謝... – 2012-02-23 09:30:58

+0

+1簡單 – flq 2012-02-23 09:37:46

7

我發現了一個通用的方法找到,如果一個點是一個三角形內here

希望這有助於

+0

我會盯上它的。 – 2012-02-23 09:30:25

+0

原來,這與我在下面提出的解決方案是相同的,但解釋要好得多 - +1 – 2012-02-23 09:32:33

3
  • 說你的三角形由點A,B和C
  • 說你想測試點P爲是三角形

身爲三角形內內可以解決爲以相同的所有矢量AB,BC和CA的一側(左側或右側)。所以,你

  • 創建三維向量AB,BC,CA與Z = 0(這必須每個三角形做一次)
  • 創建三維矢量AP,BP,CP與Z = 0(這已被每個點P一次)
  • 計算P = ABxAP,q = BCxBP和r = CAxCP(這必須每點P一次)

你的點是在三角形內,如果P,q和r在z座標上有相同的符號

+0

謝謝,我會給它一個鏡頭。 – 2012-02-23 09:29:27

相關問題