我有2D格式的矢量街道地图数据,如下所示:
polyline0: dataX = {x00,x01,..,x0n} dataY = {y00,y01,..,y0n}
polyline1: dataX = {x10,x11,..,x1n} dataY = {y10,y11,..,y1n}
polyline2: dataX = {x20,x21,..,x2n} dataY = {y20,y21,..,y2n}
...
PolyLineM中: dataX = {xm0,xm1,..,xmn} dataY = {ym0,ym1,..,ymn}
我可以在屏幕上绘制polyline0,polyline1,..,polylinem作为自上而下的视图(2D)。
现在我想在屏幕上绘制polyline0,polyline1,..,polylinem作为2.5D视图(透视投影或等角投影)
我正在寻找将2D坐标转换为2.5D的算法。我试图在互联网上搜索这个算法,但找不到。
我正在寻找的只是一个简单的公式,允许我将上述2D数据转换为2.5D数据,如下所示:
以polyline0为例: for(i = 0; i< n; i ++) { 2.5D中的dataX [i] = convert2Dto2.5D(2D中的dataX [i]); dataD [i] in 2.5D = convert2Dto2.5D(dataY [i] in 2D); }
我正在寻求您的帮助,非常感谢您抽出时间帮助我将2D坐标转换为2.5D的算法。
答案 0 :(得分:1)
对于评论者,此处描述了2.5D。
isometric projection看起来很简单。随着你的限制,数学变得更简单。
线上点的z坐标始终为0,因此该维基百科页面上矩阵的乘积仅为
newx = 1 / sqrt(2) * oldx;
newy = 1 / sqrt(6) * (oldx + 2 * oldy);
或
newx = oldx;
newy = 1 / sqrt(3) * (oldx + 2 * oldy);
如果你不介意缩放。
其他等距视图可以从上面的源代码中找到。