红线是 UIView 以锚点为中心旋转。我想要实现的是,当我将手指绕着那个绿色圆圈拖动到红色圆圈上时,那条红线会随着手指移动。但是我不能在不知道角度的情况下做到这一点。我怎么算?
问问题
396 次
2 回答
1
使用 3 点的反正切。(中心,点,触摸开始的位置/或您定义为角度 0 的固定位置,当前触摸点)
double AngleBetweenThreePoints(CGPoint point1,CGPoint point2, CGPoint point3)
{
CGPoint p1 = CGPointMake(point2.x - point1.x, -1*point2.y - point1.y *-1);
CGPoint p2 = CGPointMake(point3.x -point1.x, -1*point3.y -point1.y*-1);
double angle = atan2(p2.x*p1.y-p1.x*p2.x,p1.y*p2.y);
return angle /(2* M_PI);
}
于 2013-05-03T14:12:26.210 回答
1
您可以使用勾股定理来计算半径。在这种情况下,您知道圆的中心在 x:152, y:0。您的触摸位置将在 x1, y1,这为您提供了足够的信息来计算腿。在代码中:
CGPoint center = CGPointMake(152.0f, 0.0f);
CGPoint touchPoint = [gestureRecognizer locationInView:yourView];
float xLeg = fabs(center.x - touchPoint.x);
float yLeg = fabs(touchPoint.y);
angle = atan(xLeg / yLeg);
//float radius = sqrt(pow(xLeg, 2) + pow(yLeg, 2));
希望能帮助到你!
注:已编辑以反映措辞的变化。原始问题要求半径。
于 2013-05-03T14:08:56.700 回答