gpt4 book ai didi

java - Java 三角函数

转载 作者:行者123 更新时间:2023-12-02 01:31:00 32 4
gpt4 key购买 nike

我正在尝试在 Android 上使用 Java 和 LibGDX 做一些基本的三角函数。我花了很长时间在谷歌上搜索“如何找到直角三角形的角度”。我还是不太明白:(

我想给 Actor 子类一个随机的方向。那么角度是多少 - 我应该将 xSpeed 和 ySpeed 设置为多少,以便以正确的角度移动。

我开始编写一个应用程序来帮助我了解它是如何工作的。

有两个对象 - 原点和触摸点。用户按下屏幕,触摸点移动到用户触摸的位置。方法激发找出适当的值。我知道两点之间的 XDistance 和 YDistance。这意味着我知道相对长度和相邻长度。所以我需要做的就是 tan-1(相反/相邻),对吗?

我只是不明白如何处理我的程序输出的数字。

一些代码:

在主类的创建事件中:

stage.addListener(new ClickListener() {
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer) {
touchPoint.setX(x);
touchPoint.setY(y);
touchPoint.checkDistance(); // saves x and y distances from origin in private fields
atan2D = getAtan2(touchPoint.getYDistance(), touchPoint.getXDistance());
tanhD = getTanh(touchPoint.getYDistance(), touchPoint.getXDistance());
xDistanceLbl.setText("X Distance: " + touchPoint.getXDistance());
yDistanceLbl.setText("Y Distance: " + touchPoint.getYDistance());
atan2Lbl.setText("Atan2: " + atan2D);
tanhLbl.setText("Tanh: " + tanhD);
angleLbl.setText("Angle: No idea");
}
})

...

private double getAtan2(float adjacent, float opposite) {
return Math.atan2(adjacent, opposite);
}

private double getTanh(float adjacent, float opposite) {
return Math.tanh((adjacent / opposite));
}

这两个函数给出 (atan2: -pi 到 pi) 和 (tanh: -1.0 到 1.0) 之间的数字

如何将这些值转换为角度,然后我可以向后工作并再次获得相反和相邻的角度?这样做应该允许我以随机方向创建和对象,我可以在 2D 游戏中使用它。

最佳答案

atan2 为您提供以弧度表示的方向。从原点 (0,0)touchPoint 的方向。如果您需要从某个对象到touchPoint的方向,则减去对象坐标。也许您还想以度为单位查看方向(这仅适用于人眼)

dx = x - o.x
dy = y - o.y
dir = atan2(dy, dx)
dir_in_degrees = 180 * dir / Pi

如果你有方向并且想要检索坐标差,你需要存储距离

distance = sqrt(dx*dx + dy*dy)
later
dx = distance * cos(dir)
dy = distance * sin(dir)

但请注意,经常存储 dxdy 更好,因为某些计算可能无需三角函数即可执行

<小时/>

刚刚注意到 - 使用 tanh 是完全错误的,这是双曲正切函数,它与几何无关。

您可以使用arctan,但它只能给出半范围内的角度(与atan2相比)

关于java - Java 三角函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56072554/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com