确定一个圆上两点之间相对于中心的angular度

我有一个环(宽度25px)作为UIView 。 当用户select环上的任何位置时,我想要计算在圆上一个固定点上select的点之间的angular度,考虑到圆心。 我find几个例子,但没有考虑到中心。

什么是最佳的方式来做到这一点?

您必须自己处理代码(我是Java开发人员),但是获取圆上两点之间angular度的最简单的方法是测量几何形状。 由圆周上的任意两点形成的三angular形和圆的中心必然是等腰三angular形 。

回想一下,等腰三angular形(至less)具有相同长度的两条边 – 径向线段与您的两点。 平分angular度产生一个径向分段,该分段垂直于并且平分连接两个点的直线。 这形成了一对直angular三angular形,半径为斜边,两点之间的距离为“相反”的一半。

将二分因子移到分母上并确认半径是两倍,只需计算两点之间的距离(圆周上),再除以直径即可。 你得到的价值是半angular的正弦(你渴望整个angular度)。 采取反正弦,你会有一半的angular度:

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

d表示两点之间的距离,用D表示圆的直径。 由于给出了直径,并且两点之间的距离计算起来很简单 ,所以到这一点应该很容易,然后您只需要将计算的值加倍以获得两点之间的整个angular度。

这可能会帮助你,我在我的一个项目中使用了相同的东西。

  -(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; } 

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

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

所以你可以计算任何圆周点的angular度即theta:

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

cos(θ)=(X – center.x)/ radius ………. eqn-1

同样

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

sin(θ)=(Y – center.y)/ radius ………. eqn-2

用等式2除以eqn-1得到

tan(θ)=(Y – center.y)/(X – center.x)—————–最终方程