确定圆上两点之间相对于中心的角度

时间:2013-05-09 11:07:07

标签: iphone ios math trigonometry

我的响铃(宽度为25像素)UIView。当用户选择环上的任何位置时,我想计算考虑圆心的圆上固定点上所选点之间的角度。 我找到了一些例子,但他们没有考虑到中心。

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:1)

您必须自己处理代码(我是Java开发人员),但获取圆上两点之间的角度(以其中心为单位)的最简单方法是调用情境的几何形状。由圆周上的任意两点和圆的中心形成的三角形必然为isosceles

一个等腰三角形,回想起来,(至少)有两条相同长度的边 - 你的两点的径向段。将角度平分导致径向段,该径向段垂直于连接两点的线并将其平分。这形成一对直角三角形,半径为斜边,两点之间的距离为“相对”侧的一半。

将因子2移动到分母并识别半径的两倍,只需计算两点之间的距离(在圆周上),并将其除以直径。你得到的值是半角的正弦(你想要整个角度)。拿弧形,你将有一半的角度:

θ/ 2 = sin -1 (d / D)

d作为两点之间的距离,D作为圆的直径。既然给出了直径,并且两点之间的距离是simple to calculate,那么到达这一点应该很容易,然后你只需要将计算出的值加倍,得到两点之间的整个角度。

答案 1 :(得分:0)

这可能对你有所帮助,我在其中一个项目中使用了同样的东西。

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     beginPoint = [[[event allTouches] anyObject] locationInView:self];
     currentAngle = 0.0f;
     centerPoint = self.center;
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
   endPoint = [[[event allTouches] anyObject] locationInView:self];

   float fromAngle = atan2(beginPoint.y - self.center.y, beginPoint.x - self.center.x);
   float toAngle = atan2(endPoint.y - self.center.y, endPoint.x - self.center.x);
   float newAngle = [self wrapd:currentAngle + (toAngle - fromAngle) min:0 max:2 * 3.14];

   currentAngle = newAngle;

   CGAffineTransform cgaRotate = CGAffineTransformMakeRotation(newAngle);
   [self setTransform:cgaRotate]; 
}


-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
   endPoint = [[[event allTouches] anyObject] locationInView:self];

   float fromAngle = atan2(beginPoint.y - self.center.y, beginPoint.x - self.center.x);
   float toAngle = atan2(endPoint.y - self.center.y, endPoint.x - self.center.x);
   float newAngle = [self wrapd:currentAngle + (toAngle - fromAngle) min:0 max:2 * 3.14];

   currentAngle = newAngle;
}

- (double) wrapd:(double)_val min:(double)_min max:(double)_max {
     if(_val < _min) return _max - (_min - _val);
     if(_val > _max) return _val - _max; /*_min - (_max - _val)*/;
     return _val;
}

答案 2 :(得分:0)

我们知道       ((center.x + radius * cos(theta)),(center.y + radius * sin(theta)))〜(X,Y)

其中(X,Y)属于任何圆周点

因此您可以计算角度,即任何圆周点的theta为:

X = center.x + radius * cos(theta)

cos(theta)=(X - center.x)/ radius .......... eqn-1

同样

Y = center.y + radius * sin(theta)

sin(theta)=(Y - center.y)/ radius .......... eqn-2

通过将eqn-2除以eqn-1,我们有

tan(theta)=(Y - center.y)/(X - center.x)-----------------最终方程式