首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何告诉爪哇更接近350 -> 355 -> 360 -> 05度而不是一直往前走?

我如何告诉爪哇更接近350 -> 355 -> 360 -> 05度而不是一直往前走?
EN

Stack Overflow用户
提问于 2014-11-29 18:56:26
回答 3查看 105关注 0票数 2

我正在创建一个赛车游戏,其中我遇到了一些问题,而创造人工智能。我需要做的是让人工智能从一个X,Y位置到一个“检查点”与另一个X,Y位置。AI驾驶轨道将通过在地图周围放置不同的隐形检查点来创建。

我可以通过计算从我到它的X,Y的差值,得到到检查点的方向,然后使用tan(Deg) = Y/X,给出我必须从我现在的位置去的方向。

代码语言:javascript
复制
distanceToMoveX = checkpoint1X - this.getX();
distanceToMoveY = checkpoint1Y - this.getY();
newDirection = ((double)distanceToMoveY / distanceToMoveX) * 100;

所以,现在我有一个方向,我必须从我现在的位置,我也有一个方向,我正在移动。我现在要做的是让我的人工智能意识到,如果我目前的方向是350,并且我想去10,那么我的人工智能就更接近右转,现在我只能让它一直向右或向左转。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-29 19:16:40

这就是选择方向所需的内容(这是一个硬编码值的示例):

代码语言:javascript
复制
private int correctedDirectionCalculation(int calculation){
   return calculation >= 0 ? calculation : calculation + 360;
}

public void chooseDirection() {
    int targetDirection = 5;
    int currentDirection = 360;

    int goingRightDistance = correctedDirectionCalculation(targetDirection - currentDirection);
    int goingLeftDistance = correctedDirectionCalculation(currentDirection - targetDirection);

    System.out.println(goingLeftDistance < goingRightDistance ? "Go Left!" : "Go Right!");
}

至于渲染时Y轴上的倒置值,我猜您只需要将Y值反转来修复它(乘以-1)。

票数 0
EN

Stack Overflow用户

发布于 2014-11-29 19:09:44

我想,在某个地方,你可以计算出实际角度和下一个角度之间的差异,比如turn = newDirection - actualDirection

10 - 350 = -340告诉你AI需要转向-340°。

然而,(10 - 350 + 360) % 360 = 20告诉你的人工智能,它需要转向+20°。增加360是为了确保你的角度是正数,所以模块将像预期的那样工作(因为-340 % 360 = -340)。

你真正想要的是,永远不要超过180度。因此,在减少0到360之前再添加180,然后删除它们,这将使您的结果在-180,180同时停留模块360°(因此相同的角度):

turn = (newDirection - actualDirection + 540) % 360 - 180

如果你不想一次完成这个回合,那么你就可以在这个回合中分手,比如一次5度,就像你似乎已经在做的那样。

票数 1
EN

Stack Overflow用户

发布于 2014-11-29 19:03:23

你可以使用(0;360)范围以外的学位,所以你可以。从360到365,它就像预期的那样工作。如果你以后想,比方说,比较两个角度,只需说角度% 360

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27205801

复制
相关文章

相似问题

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