计算弯曲/扭曲的3D抛物面平面上的2D XY点

时间:2015-04-17 13:48:24

标签: javascript 3d three.js

我正在创建一个自定义3D抛物面网格,通过对每个顶点应用以下算法来扭曲2D平面:

function transformVertex(v) {
  var lat = toRad(v.y - height/2),
      lon = toRad(v.x - width/2)/cos(lat);
  lat = lat*cos(lon/1.5);
  v.x = radius * cos(lat) * cos(lon);
  v.y = radius * cos(lat) * sin(lon);
  v.z = radius * sin(lat);
}

我的问题是,我该如何扭转这个过程?我需要在抛物面上取一个3D点并将其转换为相对于该平面PRE扭曲的2D坐标。

1 个答案:

答案 0 :(得分:1)

计算过程中变量有一些变化,所以让我们对变量进行版本控制并确定它们的函数关系:

1- lat_0 = f(v_0.y)
2- lon_0 = f(v_0.x, lat_0)
3- lat_1 = f(lat_0, lon_0)

4- v_1.x = f(lat_1, lon_0)
5- v_1.y = f(lat_1, lon_0)
6- v_1.z = f(lat_1)

现在从6回到1,

lat_1 = asin(v_1.z / radius)
lon_0 = asin(v_1.y / radius / cos(lat_1)) OR lon_0 = acos(v_1.x / radius / cos(lat_1))

此时,lon_0依赖于v_0.x和lat_0,而lat_0依赖于v_0.y,这会锁定整个事物。它看起来不可逆转。