首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旋转超过360度

旋转超过360度
EN

Stack Overflow用户
提问于 2012-09-13 03:43:48
回答 1查看 1.5K关注 0票数 1

我有一个多边形,我想要将它旋转360度以上,但仍然跟踪整个圆周。

我将手指的角度定义为可变角度,我知道我正在旋转的暴徒的角度,但每次旋转后,角度都会重新设置,因为触摸点和暴徒之间的角度从360变为0,反之亦然。

我怎么才能避免这个问题呢?

当前代码:

代码语言:javascript
复制
double rotation = angle - lastAngle;
selectedMob.rotate((float) (rotation));

其中角度是接触点和暴徒之间的角度,lastAngle是在此之前的角度。

方法rotate只是将旋转添加到当前角度,如下所示:

代码语言:javascript
复制
public void rotate(float angle) {
    this.angle += angle;
}

角度定义为

代码语言:javascript
复制
                double rads = Math.atan2(dy, dx);
                double angle = Math.toDegrees(rads);

然后我调整角度,使它从0开始向上,但我确保它从0到360

调试:

代码语言:javascript
复制
09-13 00:03:53.708: V/GameActivity(23389): updating frame
09-13 00:03:53.708: V/GameActivity(23389): checked for all mobs
09-13 00:03:53.825: V/GameActivity(23389): Angle of finger is 360.0
09-13 00:03:53.825: V/GameActivity(23389): Angle of mob is 344.94818
09-13 00:03:53.825: V/GameActivity(23389): Last angle is 359.56921278299137
09-13 00:03:53.825: V/GameActivity(23389): Rotation will be 0.43078721700862843
09-13 00:03:53.825: V/GameActivity(23389): ****************
09-13 00:03:53.825: V/GameActivity(23389): updating frame
09-13 00:03:53.825: V/GameActivity(23389): checked for all mobs
09-13 00:03:54.137: V/GameActivity(23389): Angle of finger is 0.4275725068334077
09-13 00:03:54.137: V/GameActivity(23389): Angle of mob is 345.37897
09-13 00:03:54.137: V/GameActivity(23389): Last angle is 360.0
09-13 00:03:54.137: V/GameActivity(23389): Rotation will be -359.5724274931666
09-13 00:03:54.137: V/GameActivity(23389): ****************
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-13 05:04:11

您可以将当前角度修改为与lastAngle相同的范围

代码语言:javascript
复制
while(Math.Abs(angle - lastAngle) > 180)
    angle += (angle > lastAngle ? -360 : 360);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12395191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档