Ios 如何用一个角度和另一个CG点确定最近的CG点
我计算两个点之间的角度:Ios 如何用一个角度和另一个CG点确定最近的CG点,ios,objective-c,cocos2d-iphone,angle,Ios,Objective C,Cocos2d Iphone,Angle,我计算两个点之间的角度: //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);
//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;
假设我有一个点800600,我有一个度70,我如何用该点和该度计算最近的点?
编辑:::
通常在我的游戏中,精灵是通过按钮移动的,因此当按下按钮时,所有旋转、移动、速度等都会被处理[sprite movetopregivenposition:CGPoint]
但是现在添加了一个指南针,当用户在指南针上选择一个角度时,我需要在指南针的度数方向上移动精灵,因为
[sprite movetopregivenposition:CGPoint]
已经处理了旋转和其他事情,我只想确定我应该将哪个CGPoint发送到movetopregivenposition
函数 正如@trumpetlicks所说,你找不到像那样最近的点,但我想我理解你想要什么,而且函数-(void)rotateAroundPoint:(CGPoint)rotationPoint angle:(CGFloat)angle
你试图使用的函数完全可以实现你想要的
您只需选择浮动半径即可
你知道你的当前点,假设你的半径是1,基本上你可以计算你的上一个点而不需要度,假设0
degrees在你的点的左边,假设你的点是200200,半径为0度,那么你的上一个点自动变成199200。
现在您有了一个参考点,现在计算要移动精灵的点:
//choose a feasable radius
float radius = 0.5;
//position_ is your preknown position as you said
//find a the point to roate
//position_.x-radius is always 0 degrees of your current point
CGFloat x = cos(rads) * ((position_.x-radius)-position_.x) - sin(rads) * ((position_.y)-position_.y) + position_.x;
CGFloat y = sin(rads) * ((position_.x-radius)-position_.x) + cos(rads) * ((position_.y)-position_.y) + position_.y;
//get the new point
CGPoint newLocation = ccp(x, y);
我不明白。“最近点”是什么?为什么您在第一部分中介绍的计算不够好?与您指定的参数给定的点最近的点要么位于原始点的正上方,要么在角度方向上(在实空间中,甚至在浮点空间中)距离无限小(且无法测量)@H2CO3我已经编辑了问题的更多细节,以及我为什么要这么做。在阅读了您的编辑后,我仍然不明白您的问题如何适用于您的问题?他们怎么选择角度,你怎么画指南针?你没有定义移动速度,可以根据当前位置加上指南针定义方向上的速度来定义你的第二个点吗?@trumpetlicks是的,技术上你是对的,我的意思是,如果400400是一个CG点,那么最近的135角点应该是401401401401。我希望这对你来说足够清楚?