使用 tan 求三角形的角度
finding the angle of a triangle using tan
好吧,我在我的一个游戏中为僵尸制作了 AI,但是当我尝试旋转僵尸以便他面对玩家时,一切都变得一团糟。他们以错误的方式旋转,当我靠近时旋转,即使角度不应该改变。
这是我的一些代码:ps 忽略 z,这个游戏是 3d,但我只在轴上旋转,所以我可以把它编码成 xy。
//get camera/player yx
float PlayerYPosition = Player.getPosition().y;
float PlayerXPosition = Player.getPosition().z;
//get zombie yx
float ZombieYPosition = Zombie.getPosition().y;
float ZombieXPosition = Zombie.getPosition().z;
//get side lengths
float sideY = (CameraYPosition - ZombieYPosition);
float sideX = (CameraXPosition - ZombieXPosition);
//get angle
float angle = (float)Math.atan2(sideX,sideY);
//move decimal place out so ex: 0.90f is 90.0f
float ans = angle * 100;
//set rotation of zombie
super.setRotY(ans);
Math.atan2
returns its value in radians,不是学位。要转换为度数,请乘以 180/pi 或 360/(2 pi):
float ans = angle * 180 / Math.PI;
Java 甚至有一个内置函数,Math.toDegrees
:(感谢@yshavit)
float ans = Math.toDegrees(angle);
此外,@yshavit 在评论中说:您应该在整个代码中使用弧度。但这可能工作量太大,或者您可能依赖与学位一起工作的第 3 方库。
好吧,我在我的一个游戏中为僵尸制作了 AI,但是当我尝试旋转僵尸以便他面对玩家时,一切都变得一团糟。他们以错误的方式旋转,当我靠近时旋转,即使角度不应该改变。 这是我的一些代码:ps 忽略 z,这个游戏是 3d,但我只在轴上旋转,所以我可以把它编码成 xy。
//get camera/player yx
float PlayerYPosition = Player.getPosition().y;
float PlayerXPosition = Player.getPosition().z;
//get zombie yx
float ZombieYPosition = Zombie.getPosition().y;
float ZombieXPosition = Zombie.getPosition().z;
//get side lengths
float sideY = (CameraYPosition - ZombieYPosition);
float sideX = (CameraXPosition - ZombieXPosition);
//get angle
float angle = (float)Math.atan2(sideX,sideY);
//move decimal place out so ex: 0.90f is 90.0f
float ans = angle * 100;
//set rotation of zombie
super.setRotY(ans);
Math.atan2
returns its value in radians,不是学位。要转换为度数,请乘以 180/pi 或 360/(2 pi):
float ans = angle * 180 / Math.PI;
Java 甚至有一个内置函数,Math.toDegrees
:(感谢@yshavit)
float ans = Math.toDegrees(angle);
此外,@yshavit 在评论中说:您应该在整个代码中使用弧度。但这可能工作量太大,或者您可能依赖与学位一起工作的第 3 方库。