首页 > 解决方案 > 椭圆旋转不居中

问题描述

我正在尝试绘制一个不以原点为中心的旋转椭圆(在 C++ 中)。

到目前为止,我的代码“有效”:

        for (double i = 0; i <= 360; i = i + 1) {

            theta = i*pi / 180;

            x = (polygonList[compt]->a_coeff / 2)  * sin(theta) + polygonList[compt]->centroid->datapointx;
            y = (polygonList[compt]->b_coeff / 2)  * cos(theta) + polygonList[compt]->centroid->datapointy;

            xTmp = (x - polygonList[compt]->centroid->datapointx)* cos(angle1) - (y - polygonList[compt]->centroid->datapointy)*sin(angle1) + polygonList[compt]->centroid->datapointx;
            yTmp = (x - polygonList[compt]->centroid->datapointx)* sin(angle1) + (y - polygonList[compt]->centroid->datapointy)*cos(angle1) + polygonList[compt]->centroid->datapointy;
      }

PolygonList 是“块”的列表,它将被相同区域的椭圆替换。

我的问题是角度不是很精确,好像我必须放置一个适合我椭圆形状的量角器,量角器显然会被挤压,角度也会如此(清楚吗?)

这是一个示例:我试图在顶部椭圆 (E1) 上设置一个点,该点位于 E1 的质心与第二个椭圆 (E2) 上的任何点之间绘制的线上。在此示例中,点E2 上的角度约为 220-230 度。我能够捕捉到这个角度,这个角度看起来还可以。

情况1

问题是,如果我尝试通过使用 ~225 度的这个角度将这个点投影到 E1 上,我最终会出现在顶部的第二个红色圆圈上。看起来我的角度现在是 ~265 度,但实际上,如果我将量角器的形状调整为适合我的椭圆,我会得到正确的角度 (~225),cf img 2)

案例2

很难看到那个重新塑造的量角器上的角度,但它确实显示了 ~225 度。

我的结论是,椭圆的绘制就像我必须画一个圆然后我会压缩它,这会改变角度之间的距离。

有人可以告诉我如何解决这个问题吗?

PS:要绘制这些椭圆,我只需使用一个 for 循环,它会在每个角度(从 0 到 360)绘制一个点。我们在第一张图片上清楚地看到,无论我们是在 0 度还是在 90 度,点之间的距离都是不同的。

标签: c++angleellipse

解决方案


您的参数化正是如此,圆是椭圆的情况,两个轴都相等。听起来您需要使用椭圆的理性表示而不是标准:https ://en.m.wikipedia.org/wiki/Ellipse


推荐阅读