0

我正在用 OpenGL 编写一个应用程序(尽管我认为这个问题与此无关)。我有一些需要旋转的二维点集数据。它后来被投影到 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;
}

如果我注释掉上面'//rotate'下的代码,应用程序的输出就是第一张图片。并将其添加回第二张图像。实际上没有其他事情发生(afaik)。

使用的数据类型都是双精度的,所以我认为这不是精度问题。有谁知道为什么旋转会导致如上图所示的倾斜?

编辑 filipe 下面的评论是正确的。这可能与轮换无关,而且我没有为该问题提供足够的信息;

我在图片中显示的几何图形代表建筑物。它们是从 lon/lat 地图坐标生成的。在我用来进行转换的点数据中,我忘记使用实际投影到笛卡尔坐标空间,只是映射了 x->lon、y->lat,我认为这就是我看到失真的原因。我将要求删除这个问题,因为我认为它对其他人没有用处。

4

1 回答 1

1

更新: 由于您的评论,该错误不太可能出现在所提供的代码中。

最后一个提示:std 变换公式仅在坐标系统是笛卡尔坐标系时才有效,在 ios 上,您有时会反转 y Achsis。

于 2013-01-15T18:09:05.157 回答