【问题标题】:How to get best directions towards a given target如何获得朝向给定目标的最佳方向
【发布时间】:2022-11-02 05:28:15
【问题描述】:

我想为八个基本方向中的每一个赋予一个值,以便它指向目标的接近程度。目前我在方向向量和目标向量之间使用dot 乘积,我认为这是这样做的方法,但它不会产生正确的结果。

在屏幕截图中,您可以看到每个方向的点积值,但它们似乎不太正确,因为东方向应该是最好的。

Vector2 pos;//player position 60, 43
Vector2 target = new Vector2(78, 46);
public  Vector2[] dirs = new Vector2[] { new Vector2(0, 1), new Vector2(1, 1),
    new Vector2(1, 0), new Vector2(1, -1), new Vector2(0, -1),
    new Vector2(-1, -1), new Vector2(-1, 0), new Vector2(-1, 1) };// eight cardinal directions

for (int i = 0; i < rays.length; i++) {
    Vector2 ray = pos.cpy().add(dirs[i]);
    nearest[i] = ray.dot(target);
}

//dot product function
public float dot (Vector2 v) {
    return x * v.x + y * v.y;
}

我做错了吗,或者这实际上根本不是计算这个的正确方法?

【问题讨论】:

    标签: java vector libgdx


    【解决方案1】:

    您的问题可以在不使用三角函数或矢量产品的情况下解决。 你所需要的只是一个从当前点到欲望点的向量。

    比较 X 和 Y 坐标的符号。使用这种技术,您可以找出四个象限中的每一个。在您的示例中,两者都是正面的,并且您位于右上象限。

    由于您需要查看八个区域而不是四个区域,因此请比较 X 和 Y 的绝对值。根据哪个更大,您位于象限的下部或上部。在您的示例中,X 值大于 Y 值,并且您位于下象限,(对我而言)最终以 0 到 45 度角结束。但这取决于您如何放置角度测量值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多