非常简单的问题。 如何使用Java绘制的线条实现碰撞检测?只是线条。没有矩形,圆形或图像,位图......只是线条。
顺便说一句,这些线不直。它们由数百条非常小的线条构成,这些线条代表玩家的移动(当他们移动时他们的gps坐标),因此当玩家移动时,它们会在整个地方蜿蜒。所有线都连接在一起。一行的终点是下一行的起点,依此类推。在这方面,这是一条不间断的路线。没有差距。
我尝试将行的起始点的x,y值存储在一个数组中,然后遍历此数组以确定之前是否已访问该点。如果玩家再次访问精确的坐标,这很好,但如果他在这些记录点之间的某个位置怎么办?
如果问题有帮助,这就是问题的背景。但主要问题是我的重点。 你如何在Java中实现线的碰撞检测?
答案 0 :(得分:0)
据我所知,你正在以正确的方式做到这一点。我建议可能通过坐标位置对线进行散列,以便减少线检查。如果估计更大的直线(由平均较小的线组成)并用于检查,您还可以减少检查的数量。
答案 1 :(得分:0)
如果我理解正确,你的问题不是严格的线路交叉(可以在网上轻松找到)但是如何处理数百个?
也许您应该考虑数据的空间结构来限制计算。例如,看一下“ quadtree ”。
您只能在所有坐标的子集上测试交叉点。
答案 2 :(得分:0)
您称之为一行,您可以调用List<Line2D>
- 直线段列表。如果您有List<Line2D> a
和List<Line2D> b
,那么您希望将a中的每一行与b中的每一行进行比较。我假设你可以看到如何找到两个直线段的交叉点 - 或者Line2D甚至会do this for you。例如:
for(Line2D line1 : a) {
for(Line2D line2 : b) {
if(a.intersectsLine(b)) {
return true;
}
}
}
return false;
现在这段代码不会很快,但可能足够快。如果它太慢,那么你将不得不考虑优化 - 这可以通过多种方式完成,四边形或一维排序是两个明显的简单步骤。