确定一个圆上两点之间相对于中心的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)—————–最终方程
- UIModalPresentationFormSheet的四舍五入
- 只有底angular四舍五入
- 父节点旋转期间,SceneKit子节点位置未更改
- 需要使图像底部到angular落:反应本机
- 围绕其中心旋转UIView保持其大小
- 苹果应用程序拒绝,因为Auth0 signUpLink在Cordova InAppBrowser中未打开,而是在系统浏览器(Safari)中打开,
- iPhone的iOS是有可能创build一个测距仪与2激光指针和iPhone?
- Angular 2应用程序库与cordovaIOS的href
- 如何获得UITableViewCell的圆angular边缘的方式,允许用户select单元格背景颜色? (但不使用GROUPED模式)