我很努力將鼠標/屏幕座標轉換爲等軸測圖塊索引。我嘗試了一下我可以在這裏或互聯網上找到的每一個配方,但是它們都不起作用,或者我缺少一些東西。 http://i.imgur.com/HnKpYmG.png 這是一張圖片,原點位於左上角,一個圖塊的尺寸爲128x64px。屏幕座標到等距座標
我將不勝感激任何幫助,謝謝。
我很努力將鼠標/屏幕座標轉換爲等軸測圖塊索引。我嘗試了一下我可以在這裏或互聯網上找到的每一個配方,但是它們都不起作用,或者我缺少一些東西。 http://i.imgur.com/HnKpYmG.png 這是一張圖片,原點位於左上角,一個圖塊的尺寸爲128x64px。屏幕座標到等距座標
我將不勝感激任何幫助,謝謝。
基本上,你需要應用一個旋轉矩陣和其他一些位。下面是寫在AWK一些示例代碼,這應該是很容易移植到任何其他語言:
END {
PI = 3.1415;
x = 878.0;
y = 158.0;
# Translate one origin to the other
x1 = x - 128*5;
# Stretch the height so that it's the same as the width in the isometric
# This makes the rotation easier
# Invert the sign because y is upwards in math but downwards in graphics
y1 = y * -2;
# Apply a counter-clockwise rotation of 45 degrees
xr = cos(PI/4)*x1 - sin(PI/4)*y1;
yr = sin(PI/4)*x1 + cos(PI/4)*y1;
# The side of each isometric tile (which is now a square after the stretch)
diag = 64 * sqrt(2);
# Calculate which tile the coordinate belongs to
x2 = int(xr/diag);
# Don't forget to invert the sign again
y2 = int(yr * -1/diag);
# See the final result
print x2, y2;
}
我用幾個不同的座標系進行了測試,結果似乎是正確的。
我嘗試了acfrancis的解決方案,發現該函數在負指數方面有其侷限性。以防萬一別人解決這個問題: 問題的原因:像-0.1 ....這樣的負值將被轉換爲0而不是-1。 它是數組的經典「只有一個零」問題。
爲了解決它:鑄造前X2,Y2值INT: 檢查,如果XR /診斷< 0,如果爲真,結果=結果 - 1 (分別爲Y2:YR * -1 /診斷< 0然後結果=結果-1) 然後你像以前一樣將結果值轉換爲int。
希望它有幫助。
此外: 由128 * 5的原點翻譯似乎具體到某種情況下,所以我想這應該被刪除,以推廣的功能。
工作完美無缺謝謝你。 – Hnus
太棒了,如果你對此感到滿意,不要忘記接受答案。 – acfrancis
挑剔的評論。 PI的第四個小數位在實踐中無關緊要,但您應該正確:3.14159 ...到3.1416。 –