将2D坐标转换为2.5D的算法

时间:2010-09-30 04:14:27

标签: algorithm

我有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的算法。

1 个答案:

答案 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);

如果你不介意缩放。

其他等距视图可以从上面的源代码中找到。