- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
例如我当前的角度位置是170,我点击物体将它旋转到-170度,这里的问题是在178、179、180之后,下一个数字是-180、-179、-178和等等……
即使在数值上很难达到 170 度,也与 -170 度相去甚远,但从视觉上看,它们看起来很近,一个物体正在旋转最长的距离以达到该数字,例如:
if(currentAngle < targetAngle)
{
currentAngle += 1;
}
if(currentAngle > targetAngle)
{
currentAngle -= 1;
}
这样我可以达到目标角度,但是如何在 180 和 -180 之间越过这个障碍,也许有一个公式?
更新:
onclick() {
double angle = Math.atan2(dy, dx);
targetAngle = (int)Math.toDegrees(angle); //180 to //-179
}
onFrame() {
//here happens the animation
if(currentAngle < targetAngle)
{
currentAngle +=1;
}
if(currentAngle > targetAngle)
{
currentAngle -= 1;
}
}
现在,如果我当前处于 -179 度,我点击了 160 度,它应该向左旋转以尽可能快地达到该角度,但在我的情况下它是向右旋转(更长),那是因为它被限制在 -180 到 179 之间,因此如何突破限制并从 179 到 -180、-181、-182...如果你明白我的意思
1) 我的点击处理程序:
onClick() {
double angle = Math.atan2(dy, dx);
angle = (int)Math.toDegrees(angle);
Log.d("test", "angler:" + angle);
if(angle < 0)
angle += 360;
}
所以在这里我使用 angle += 360 将度数转换为正值,然后:
2) 我的 onFrame 处理程序:
onFrame() {
if(currentAngle != angle)
{
if(angle < currentAngle)
{
currentAngle -= 5;
}
else
{
currentAngle += 5;
}
int diff = Math.abs(angle - currentAngle);
if(diff <= 5)
{
currentAngle = angle; // if its near we put it exact to that angle
}
invalidate(); //update the view
}
}
这就是我的全部
最佳答案
请注意,我假设您的角度在 0 到 359 之间,而不是负值。
这里有两个不同的问题。
currentAngle
和一个targetAngle
,如何确定旋转方向以在最短帧数内完成旋转? 问题 1 主要在@ellitron 的回答中得到解决,但您必须稍微分开各个部分以确定移动currentAngle
的方向。问题 2 需要一个 360 度模组,它在每次更新 currentAngle
和 this answer 后处理负数。给了我们一个很好的技巧。
if (currentAngle - targetAngle == 0) return;
if (Math.abs(currentAngle - targetAngle) < 180) {
// Rotate current directly towards target.
if (currentAngle < targetAngle) currentAngle++;
else currentAngle--;
} else {
// Rotate the other direction towards target.
if (currentAngle < targetAngle) currentAngle--;
else currentAngle++;
}
currentAngle = ((currentAngle % 360) + 360) % 360;
为了将来引用,下面介绍了如何在渲染环境之外测试此代码。我们可以简单地传入两个命令行参数,并根据输出确定我们是否以正确的方式旋转。
public class Angle {
public static void main(String[] args) {
int currentAngle = Integer.parseInt(args[0]);
int targetAngle = Integer.parseInt(args[1]);
while (currentAngle - targetAngle != 0) {
if (Math.abs(currentAngle - targetAngle) < 180) {
// Rotate current directly towards target.
if (currentAngle < targetAngle) currentAngle++;
else currentAngle--;
} else {
// Rotate the other direction towards target.
if (currentAngle < targetAngle) currentAngle--;
else currentAngle++;
}
currentAngle = ((currentAngle % 360) + 360) % 360;
System.out.printf("CurrentAngle = %d, targetAngle = %d\n",
currentAngle, targetAngle);
}
}
}
关于java - 如何找到从0到180和-180到0的最近角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28909231/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!