椭圆旋转不居中

时间:2018-05-28 11:54:17

标签: c++ angle ellipse

我正在尝试绘制一个不以原点为中心的旋转椭圆(在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是&#34; bloc&#34;的列表。它将被相同面积的椭圆取代。

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

这是一个例子:我试图在顶部椭圆(E1)上设置一个点,该点位于E1的质心和第二个椭圆(E2)上的任何点之间绘制的直线上。在这个例子中,E2上的点位于~220-230度的角度。我能够抓住这个角度,角度似乎没问题。

case 1

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

case 2

在重新形状的量角器上看到这个角度有点难,但确实显示出~225度。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

所以,我已经问过上面的问题,以便通过检查E2上的任何点与E1上的投影之间的距离来找到2个椭圆之间可能的重叠:如果E1的质心和投影点之间的距离在E1上,大于E1的质心与E2上的点之间的距离,我将假设重叠。我认为这个解决方案从未尝试过(或者我没有足够的搜索)并且应该可以正常工作。但在工作之前,我需要让这些角度正确。

通过检查焦点,我找到了一种避免使用角度和投影点的方法:

  • 焦点A和B之间到轴周围任意点的距离之和是恒定的(让我们称之为E1的DE1)。
  • 然后检查我的焦点和E2上的任何一点之间的距离。如果该距离小于DE1,我将假设连接。

到目前为止似乎工作正常:)

我会把它放在有需要的人身上。

弗洛