我有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时,所有的点和角度都是相等的。所以它适用于圆形,但不适用于椭圆形。
所以,我想确切地知道我哪里出错了。
答案 0 :(得分:1)
是的,现在我明白了你的意思
E
E=atan2(...)
角度
M
角度x=x0+rx*cos(M), y=...
为了获得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)
[注释]