我计算两个 CGPoints 之间的角度:
//calculate radian and degree
CGPoint diff = ccpSub(center, location);//return ccp(v1.x - v2.x, v1.y - v2.y);
float rads = atan2f( diff.y, diff.x);
float degs = -CC_RADIANS_TO_DEGREES(rads);
NSLog(@"Rad %.2f Degs %.2f",rads,degs);
现在在另一个函数中,我有一个预先知道的 CGPoint 和上述函数的度数,我想计算满足度数的最近点。
我在想也许下面的代码会帮助我,但在下面的代码起点和旋转点是已知的,在我的情况下我只知道起点。
-(void) rotateAroundPoint:(CGPoint)rotationPoint angle:(CGFloat)angle {
CGFloat x = cos(CC_DEGREES_TO_RADIANS(-angle)) * (self.position.x-rotationPoint.x) - sin(CC_DEGREES_TO_RADIANS(-angle)) * (self.position.y-rotationPoint.y) + rotationPoint.x;
CGFloat y = sin(CC_DEGREES_TO_RADIANS(-angle)) * (self.position.x-rotationPoint.x) + cos(CC_DEGREES_TO_RADIANS(-angle)) * (self.position.y-rotationPoint.y) + rotationPoint.y;
假设我有一个点 800,600 并且我的度数是 70,我如何计算与那个点和那个度数最近的点?
编辑:::
通常在我的游戏中,精灵是用一个按钮移动的,因此当按下按钮时,所有的旋转、移动、速度等都会被处理[sprite moveToPreGivenPostion:CGPoint]
但是现在添加了一个指南针,当用户在指南针上选择一个角度时,我需要在指南针的度数方向上移动精灵,因为[sprite moveToPreGivenPostion:CGPoint]
已经处理了旋转和其他事情,我只想确定我应该发送什么 CGPoint 来moveToPreGivenPostion
运行。