我有一個函式可以將一些 3D 坐標(x,y,z)轉換為螢屏中的一個位置(寬度,h八),具有等距透視(真正的等距,而不是 dimetric )。
Coords_3D_To_2D (x, y, z) {
return {
w: ((x-y) * (Math.sqrt(3)/2)),
h: (((-x-y) / 2) -z)
}
}
因此,為了更好地說明,這里我們有代表 2D 螢屏的藍線和代表 3D 等距空間的黑線:

上述功能作業正常。如果我像這樣呼叫它,例如:Coords_3D_To_2D(15, -10, 5)它回傳{ w: 21.65, h: -7.5 },這將是投影在 2D 螢屏上的點(在這種情況下,它會在螢屏外,但這沒關系)。
所以投影 2D -> 3D 似乎正在作業。但我想要的是有一個反轉它的函式;它應該接收 2D 螢屏 (w, h) 的一些坐標,以及 z-index 的一些給定值,并回傳相應的 3D 等距點。
它應該是這樣的(在這里,我為 z-index 分配了一個值 5):
Coords_2D_To_3D (w, h, z = 5) {
return {
x: ?,
y: ?,
z: 5
}
}
uj5u.com熱心網友回復:
有 2 個變數的 2 個方程。可解。
function Coords_3D_To_2D(x, y, z) {
return {
w: ((x - y) * (Math.sqrt(3) / 2)),
h: (((-x - y) / 2) - z)
}
}
console.log(Coords_3D_To_2D(15, -10, 5))
function Coords_2D_and_Z_To_3D(w, h, z) {
var y = -(h z w / Math.sqrt(3))
var x = 2 * w / Math.sqrt(3) y
return {x, y, z}
}
console.log(Coords_2D_and_Z_To_3D(21.650635094610966, -7.5, 5))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/504168.html
標籤:javascript 数学 投影 等距
上一篇:修改“四舍五入到最近間隔”功能,使其適用于1小時以上的間隔
下一篇:使用ExecuteScalar在客戶端(C#Winform)的SQLServer中從try/catch中捕獲錯誤
