我正在用OpenGL编写一个应用程序(尽管我认为这个问题与此无关)。我有一些2d点集数据,我需要旋转。后来它被投影到3d中。
我使用这个公式进行轮换:
x' = x cos f - y sin f
y' = y cos f + x sin f
在哪里'f‘是角度。当我旋转点集时,结果是倾斜的。影响的严重程度因角度而异。
很难描述,所以我有照片;红色的东西是一些简单的几何学。2d点集是你在它们周围看到的白色多边形的顶点。第一张图片显示不失真的点集,第二张图片显示旋转后的点集。不仅仅是旋转时发生的倾斜,有时似乎也会发生位移。
代码本身是微不足道的:
double cosTheta = cos(2.4);
double sinTheta = sin(2.4);
CalcSimplePolyCentroid(listHullVx,xlate);
for(size_t j=0; j < listHullVx.size(); j++) {
// translate
listHullVx[j] = listHullVx[j] - xlate;
// rotate
double xPrev = listHullVx[j].x;
double yPrev = listHullVx[j].y;
listHullVx[j].x = ((xPrev*cosTheta) - (yPrev*sinTheta));
listHullVx[j].y = ((yPrev*cosTheta) + (xPrev*sinTheta));
// translate
listHullVx[j] = listHullVx[j] + xlate;
}
如果我注释掉上面‘/旋转’下面的代码,应用程序的输出就是第一个映像。然后再把它加回第二个图像。实际上没有其他事情发生(afaik)。
所使用的数据类型都是双倍的,所以我不认为这是一个精度问题。有人知道为什么旋转会导致像上面的图片所显示的那样的倾斜吗?
编辑菲利普的评论如下是正确的。这可能与轮换无关,我也没有提供足够的信息来解决这个问题;
我在图片中显示的几何图形代表了建筑物。它们是从龙/拉特地图坐标生成的。在我用来进行转换的点数据中,我忘记了用一个实际的投影到笛卡尔坐标空间,只是映射了x->lon,y->lat,我认为这就是我看到扭曲的原因。我请求删除这个问题,因为我不认为它对其他人有用。
发布于 2013-01-15 18:09:05
更新:由于您的注释,使错误不太可能出现在所提供的代码中。
最后一个提示: std变换公式只有在同体系统是笛卡尔的情况下才是有效的,在ios上有时会出现倒y Achsis。
https://stackoverflow.com/questions/14343884
复制相似问题