如何解决这个轮换问题?

Ano*_*ser 1 iphone math cocoa-touch rotation

对于你们中的一些人来说,这对你来说非常简单.

但是:当我旋转一个视图时,让我们说从0度开始并向前旋转0.1,1,10,100,150,160,170,179,179,999,并继续向同一方向旋转,这就好了,说出来响亮而清晰:砰!BAAAAAAAAANNNNNGGGG !!!! -179,9999,-170,-150,-50,0,50,100,170,179,99,再次:BBBBAAAANNNGGG !!! -179,999,-170,-100,依此类推......肯定你知道我的意思;-)

想象一下,你在一条路上开车,突然你的英里 - 米 - 这样跳得很负.你会惊慌失措,对吗?

你知道吗?这对我的算法来说非常糟糕.我知道如何解决这个问题,除了检查if-else-blocks,如果我的值突然交换掉了.有些东西告诉我,我必须看一些数学函数,如窦波和其他东西.但是我的数学知识很难达到最高程度.

我该如何解决这个问题?我尝试计算角度之间的距离,即我有两个视图,其中一个位于另一个,两个都旋转.我想计算两个视图的整体轮换.一旦价值突然从-179,99999转换到179,99999,这个小但疯狂的东西会破坏我的计算.如果你知道我的意思,我也不知道180是否存在或者如果在fabsf(179,999999999999999999999)的某处交换东西.

例如:-170度减去50度是什么?好吧,我认为-220度.但是当我旋转-170 - 50时,我最终得到这个值:40度.

我怎么能得到我期望的,-220而不是40,没有任何不安全的交换 - 如果 - 其他逻辑?有时我的自制交换器可以正常工作,但有时它不会因为数学方面的困难.

编辑:我从视图图层的transform.rotation.z属性计算角度.

Lou*_*arg 5

视图不是数据的规范表示,查询会告诉您系统的可视状态,仅此而已.如果您关心角度的特定表示,那么您不应该从变换中读取它,您应该根据需要将其存储在模型或控制器中,并根据它设置视图的状态.

@interface MyViewController: UIViewController {
  CGFloat rotation;
}

@property (nonatomic) CGFloat rotation;

@end

@implementation MyViewController
@synthesize rotation;

- (void)setRotation:(CGFloat)rotation_ {
  rotation = rotation_;
  // Do whatever math you want and set the transform of the view based on that;
}
@end
Run Code Online (Sandbox Code Playgroud)