椭圆角计算和点计算的问题

时间:2014-10-16 13:29:20

标签: ios math core-graphics ellipse

我有UIView有界限(w,h),我正在尝试计算角度并指向椭圆,该椭圆位于视点的中点,即中心为(w * 0.5,h) * 0.5)。我不断更改视图和椭圆的大小,因此以下值来自控制台以获取值的实例。

对于这个例子,(w,h)=(150.000000,300.799988),半径是(rx,ry)=(52.500000,105.279999)

现在,我尝试使用以下代码在此椭圆上找到点P1(x,y)(30.784275,93.637390)的角度:

CGFloat angle = atan2((y - (h * 0.5)), (x - (w * 0.5)));
if (angle < 0)
{
   angle += 2 * M_PI;
}

我得到的角度值是4.050611

由于我没有得到我想要的输出,我只是尝试使用以下代码从上方角度找到椭圆上的点:

framePoint.x = (w * 0.5) + (rx * cosf(angle));
framePoint.y = (h * 0.5) + (ry * sinf(angle));

令人惊讶的是,我得到了一点意见(42.737656,67.344543)。

我只是继续前进,再进行一次相同的迭代。我从上面计算角度,得到角度为4.341885,从这个最新角度得到新点(55.990501,52.263786)。

我知道我的计算公式有问题,但我无法指出它。

此外,如果上面的椭圆是圆形,即当rx = ry时,所有的点和角度都是相等的。所以它适用于圆形,但不适用于椭圆形。

所以,我想确切地知道我哪里出错了。

1 个答案:

答案 0 :(得分:1)

是的,现在我明白了你的意思

  • 您通过E
  • 从椭圆获得E=atan2(...)角度
  • 并在需要M角度x=x0+rx*cos(M), y=...
  • 的等式中使用它
  • M是平均圆角
  • 和E是椭圆角
  • enter image description here
  • 这类似于开普勒方程式。
  • 幸运的是,你不需要匹配主要焦点周围的速度,所以:

为了获得M角度

  • 您必须缩放一个轴以将椭圆转换为圆
  • 并计算角度
  • 所以如果你的轴对齐椭圆是(x0,y0,rx,ry)
  • 并且椭圆上的输入点为(x1,y1)
  • 然后如果我没弄错的话应该是这样的:
  • M=atan2((y1-y0)*rx/ry,x1-x0)M=atan2(y1-y0,(x1-x0)*ry/rx)
  • x=x0+rx*cos(M)
  • y=y0+ry*sin(M)

[注释]

  • 两个点的X坐标应该相同(图像是用油漆手绘的)
  • 您缩放哪个轴以及
  • 哪个轴无关紧要