首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用线性坐标对AI进行校验

用线性坐标对AI进行校验
EN

Stack Overflow用户
提问于 2012-11-24 15:25:13
回答 2查看 314关注 0票数 1

我正在研究一些人工智能,我希望我的人工智能不会碰到给定的坐标,因为这些是墙/边界的参考。

首先,每次我的人工智能撞到墙时,它都会引用这个位置(x,y)。当它三次撞到同一面墙时,它使用线性检查点来“想象”有一堵墙穿过这些坐标。

我现在想阻止我的人工智能再次进入那堵墙。

为了检测我的坐标是否成直线,我使用:

代码语言:javascript
运行
复制
private boolean collinear(double x1, double y1, double x2, double y2, double x3, double y3) {
    return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}

这是返回真是给定的点是线性的,彼此。

所以我的问题是:

  1. 我如何确定我的机器人是否正从目前的轨迹接近墙壁?
  2. 与Java‘想象’不同,这里有一条从1到3的直线,但是要“想象”一条直线穿过这些线性坐标,直到无穷远(或接近)。

我觉得这需要一些令人费解的三角学吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-24 15:56:02

对于#2,你可以检查你想要的墙/线上任何一点和一个点之间的斜率是否与直线上两个点之间的斜率相同。

代码语言:javascript
运行
复制
private boolean onWall(double x, double y, double wallX1, double wallY1, double wallX2, double wallY2) {
    return (wallY1 - y) / (wallX1 - x) == (wallY2 - wallY1) / (wallX2 / wallX1);
}

所以,计算出的斜率是一个点,所以如果它们是相同的,它们都在同一条线上。

票数 0
EN

Stack Overflow用户

发布于 2012-11-24 16:28:05

有趣的问题。好吧,我想到了两个孩子:

  • 所以您可以做的是,一旦检测到每一行,将其斜率m和line c存储为每一行y= mx +c。所以一旦你把你的协调变成了一个新的协调。把你的新(x1,y1)放在上面的方程中,看看是否是y1 == m*x1 + c。作为O(n),整个操作在计算上是昂贵的,其中n是为每一个新的协调运动检测到的行数。

您可以根据集群而不是每一行进行聚类点和行匹配检查,从而减少上述问题。例如,存储所有行通过群集的内容,并仅在当前位于相应集群中时检查这些行。这应该是一个理想的解决方案。

  • 另一个解决方案是在当前点周围有一个半径为r的假想圆。获得圆后,查找所有行通过当前集群的内容(如上文所述)。对于每一个新的运动,检查墙壁或不只是这些线。一旦你离开你的集群,再次画一个新的圆圈。

我认为这个问题更适合于programmers.stackexchange.com,而不是这里:)

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

https://stackoverflow.com/questions/13542592

复制
相关文章

相似问题

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