Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 计算的角度卡在范围内+;/pi/2_Objective C_Kobold2d_Angle_Radians - Fatal编程技术网

Objective c 计算的角度卡在范围内+;/pi/2

Objective c 计算的角度卡在范围内+;/pi/2,objective-c,kobold2d,angle,radians,Objective C,Kobold2d,Angle,Radians,我正在尝试为我正在制作的iPhone游戏制作虚拟操纵杆控件,为此我得到了玩家触摸的角度和操纵杆中心之间的角度,但当我得到角度时,它只上升到1.57弧度,然后变为负数,只下降到-1.57,然后又增加到1.57。一旦角度从正变为负,这会导致操纵杆跳到另一侧 这是我计算角度的方法: -(double) angleOnCircle: (CGPoint) point1: (CGPoint) centerOfCircle { int point1X = point1.x; int point

我正在尝试为我正在制作的iPhone游戏制作虚拟操纵杆控件,为此我得到了玩家触摸的角度和操纵杆中心之间的角度,但当我得到角度时,它只上升到1.57弧度,然后变为负数,只下降到-1.57,然后又增加到1.57。一旦角度从正变为负,这会导致操纵杆跳到另一侧

这是我计算角度的方法:

-(double) angleOnCircle: (CGPoint) point1: (CGPoint) centerOfCircle
{
    int point1X = point1.x;
    int point1Y = point1.y;
    int centerX = centerOfCircle.x;
    int centerY = centerOfCircle.y;
    double triangleHeight = point1Y - centerY;
    double triangleBase = point1X - centerX;
    double angle = atan(triangleHeight/triangleBase);
    return angle;
}
这是我更新斗杆位置的地方:

     moveStickAngle = [self angleOnCircle: touchPos : moveStickStartPoint];
    if([self distanceBetweenTwoPoints:touchPos :moveStickStartPoint] < MOVE_STICK_RESTRICTION_RADIUS)
    {
        moveStickCenter = touchPos;
    }
    else
    {
        double newX = MOVE_STICK_START_X + (cos(moveStickAngle) * MOVE_STICK_RESTRICTION_RADIUS);
        double newY = MOVE_STICK_START_Y + (sin(moveStickAngle) * MOVE_STICK_RESTRICTION_RADIUS);
        moveStickCenter = ccp(newX, newY);
    }
moveStickAngle=[自角度圆:触摸位置:moveStickStartPoint];
if([两点之间的自距离:touchPos:moveStickStartPoint]
谢谢你的帮助

使用atan2():

atan2(y,x)正好用于此目的,并返回一个介于-pi和pi之间的值


请注意,atan(y/x)无法工作,因为它为(x,y)和(-x,-y)返回相同的值

如果你需要更多信息,请告诉我否则请注意,您可以通过单击复选标记“接受”答案。这标志着问题已经解决,并给你和答案的作者带来了一些声誉。
double angle = atan2(triangleHeight, triangleBase);