2011-11-07 85 views
2

我有這樣構建的等邊三角形網格:索引在正三角形網格給出簡單的2D笛卡爾座標

enter image description here

。現在,因爲二維座標原點是在非常左下角的紅點圖像,我需要找到這個三角形網格的索引。 X和三角形的Y索引:

鑑於輸入:興趣點(浮點),三角形邊的長度和高度

需要輸出的X和Y座標。 (樣本索引圖像所示)

獲得Y(行)三角座標很簡單,因爲它是(GivenY/TRIANGLE_HEIGHT)只是整數部分,但我不能讓周圍的計算沒有做對多業務所需的X座標。

+0

@Mattias回答的作品,我只是嘗試它。你應該關閉這個問題。 –

回答

0

更多三角形 如果您從0,0的左下角繪製一條直線到1,0的右上角,則兩個三角形的陰影部分現在由四個直角三角形組成。從右上角掉下一條直線,最後一個直角三角形和一個由三個直角三角形組成的三角形高度是您原來的三角形高度,寬度是1.5 *三角形長度,斜邊我離開去練習班上。 那麼無論是在左邊還是右邊的三角形都是你的點攔截那條線的地方。 您可以根據三角形長度預先確定大部分。 另一個選擇是計算平行四邊形,計算它的中心,將它移動到原點,順時針旋轉30度,向後移動,預變換,您有一個寬度爲上述斜邊的菱形,中間的哪一邊是哪個三角形,鑽石的高度是三角形的長度,你仍然需要工作,或者平行圖像1.0和2.0會重疊。

+0

嗨,託尼!我可以理解你在說什麼(但是「點攔截線」的部分......),但是在我試圖用這個完成的事情中沒有任何意義。我正在尋找一個函數,將參數X和Y作爲原點位於圖像最左上角的簡單笛卡爾座標,並將它們作爲索引返回到三角座標中,如圖中所示。 – Shuun

+0

這是幾何學的原理,不可否認的是,英文有點跛腳。 –

2

下面是一個更明確的答案,對於有問題(或懶惰)的人來找出幾何。

第一尺度的座標,以方便的基礎

vec2 pos=(input-origin)/vec2(edge/2,median); 

斯普利特在整數和小數部分的座標

int x=pos.x, y=pos.y; float u=pos.x-x, v=pos.y-y; 

試驗對角線(X,不同的奇偶性的Y)或反對角線邊緣(相同奇偶校驗的x,y)

if(x%2^y%2) { if(v+u<1) x--; } else { if(v-u>0) x--; } 

就是這樣(x,y)現在是您的臉部索引。

找到每個面的頂點索引需要多一點參與。

你有四個的情況下,這是每個面CCW頂點索引列表:

face vertices 
xy xy xy xy 
00 -> 00 10 01 
10 -> 11 01 10 
01 -> 01 12 02 
11 -> 12 01 11 

它更容易看到這個模式,如果你不加1到Y頂點索引,因此,最終的表:

00 -> 00 10 01 
10 -> 11 01 10 
01 -> 00 11 01 
11 -> 11 00 10 

每列分別是:!X,X,X,X^Y,X,X。或者,您可以簡單地使用查找表。

它適用於任意臉部索引,您只需要添加(x/2,y)並在(x%2,y%2)上進行查找。

最後,三角形的頂點指數:

x/2 + x%2, y + x%2; x/2 + !(x%2), y + (x%2^y%2); x/2 + (x%2), y + !(x%2) 

頂點在你原來的笛卡爾空間座標:

origin+vec2(2*x+y%2),y)*vec2(edge/2,median) 
相關問題