首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java (Android)中2行的碰撞检测

问java (Android)中2行的碰撞检测
EN

Stack Overflow用户
提问于 2011-05-12 20:13:44
回答 3查看 1.2K关注 0票数 3

很简单的问题。如何使用Java绘制的线条实现碰撞检测?只有台词。没有矩形、圆圈或图像、位图..只有台词。

顺便说一下,这些线不是直的。它们是由数百条非常小的线组成的,这些线代表玩家的移动(他们移动时的gps坐标),所以当玩家移动时,它们会在整个地方蜿蜒。所有线路都已连接。一条线的终点就是下一条线的起点,依此类推。在这方面,它是一条不间断的线。没有空隙。

我尝试将直线起始点的x,y值存储在一个数组中,然后遍历该数组,以确定该点以前是否被访问过。如果玩家再次访问完全相同的坐标,这是可以的,但如果他处于这些记录点之间的某个位置,该怎么办?

这是问题的背景,如果它有帮助的话。但主要问题是我在这里的关注点。如何在Java中实现直线的碰撞检测?

EN

回答 3

Stack Overflow用户

发布于 2011-05-12 20:20:17

据我所知,你正在以适当的方式做这件事。我建议可能通过坐标位置对行进行散列,这样可以减少行检查。如果估计较大的直线(由较小的线的平均值构成)并用于检查,您还可以减少检查的次数。

票数 0
EN

Stack Overflow用户

发布于 2011-05-12 20:37:47

如果我没理解错的话,你的问题不是严格意义上的线相交(在网上很容易找到),而是如何处理成百上千的线相交?

也许你应该为你的数据考虑一个空间结构来限制计算。以“四叉树”为例。

您将只在所有坐标的子集上测试交叉点。

票数 0
EN

Stack Overflow用户

发布于 2011-05-12 21:51:05

你所说的一条线,你可以称之为List<Line2D> --直线段的列表。如果你有List<Line2D> a和List<Line2D> b,那么你想要比较a中的每一条线和b中的每一条线。我假设你可以看到如何找到两条直线段的交叉点-或者Line2D甚至会do this for you。例如:

代码语言:javascript
复制
for(Line2D line1 : a) {
   for(Line2D line2 : b) {
      if(a.intersectsLine(b)) {
         return true;
      }
   }
}
return false;

这段代码不会很快,但可能已经足够快了。如果它太慢,那么你将不得不考虑优化-这可以通过许多方法来完成,四叉树或在一维中排序是两个显而易见的简单步骤。

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

https://stackoverflow.com/questions/5977791

复制
相关文章

相似问题

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