![Orbiting Objects](https://istack.dev59.com/J3Qe0.webp)
我已经尝试用Objective-C创建了一个函数,但是如果没有一个静态数字,它不能正常工作。例如(它围绕中心旋转,但不是从真实起始点或物体距离旋转)。
-(void) rotateGear: (UIImageView*) view heading:(int)heading
{
// int distanceX = 160 - view.frame.origin.x;
// int distanceY = 240 - view.frame.origin.y;
float x = 160 - view.image.size.width / 2 + (50 * cos(heading * (M_PI / 180)));
float y = 240 - view.image.size.height / 2 + (50 * sin(heading * (M_PI / 180)));
view.frame = CGRectMake(x, y, view.image.size.width, view.image.size.height);
}
我的"魔幻数字"160和240是我绘制图像的画布中心。50是一个静态数字(也是问题所在),它使函数部分正确地工作--没有保持对象的起始位置或正确的距离。不幸的是,我不知道在这里放什么。
"heading"是一个参数,传递从0到359度的角度。它由计时器计算,并在该类之外增量。
基本上,我想能够在我的画布上放置任何图像,并根据图像的起始点旋转围绕我的圆心。这意味着,如果我在点(10,10)处放置一个图像,那么到圆心的距离将保持不变,以(10,10)为起点。对象将围绕中心旋转360度,并达到其原始起始点。
预期结果是将例如(10,10)传递给该方法,基于零度返回(
15,25
)(不是真实值)在5度。我知道这很简单(这个问题描述完全过剩了),但我试图找出我在哪里出错了。我不关心您使用的语言示例(如果有的话)。我将能够解释您的意思。
失败更新
我已经更进一步了,但我仍然无法得到正确的计算结果。我的新代码如下:
"heading"设置为1度。
-(void) rotateGear: (UIImageView*) view heading:(int)heading
{
float y1 = view.frame.origin.y + (view.frame.size.height/2); // 152
float x1 = view.frame.origin.x + (view.frame.size.width/2); // 140.5
float radius = sqrtf(powf(160 - x1 ,2.0f) + powf(240 - y1, 2.0f)); // 90.13
// I know that I need to calculate 90.13 pixels from my center, at 1 degree.
float x = 160 + radius * (cos(heading * (M_PI / 180.0f))); // 250.12
float y = 240 + radius * (sin(heading * (M_PI / 180.0f))); // 241.57
// The numbers are very skewed.
view.frame = CGRectMake(x, y, view.image.size.width, view.image.size.height);
}
我得到的结果与应该是的点相距甚远。问题出在x和y的赋值上。我错在哪里了?
bounds
以使(0,0)位于旋转中心:view.bounds = CGRectMake(-width/2, -height/2, width, height)
。 - bshirley