java相交2dobject

时间:2017-03-16 19:00:39

标签: java

所以我做了以下游戏:

玩家自由移动并射击从墙壁反弹的子弹。我正在尝试实现自动瞄准。我试图使用围绕播放器的线来实现这一点。

现在我遇到的问题是计算线与墙相交的位置。我不确定如何做到这一点。

我不能使用getBounds(),因为这些行不是2DRectangles。如果有人知道如何计算线与墙相交的位置,并返回该位置,那将非常有帮助。

2 个答案:

答案 0 :(得分:0)

你只需要在这里做数学。

假设您的专线以(startX, startY)开头并以(endX, endY)结束。然后使用基本的成绩 - 学校几何,线上的任何点(x,y)都满足等式

(y-startY) / (x-startX) = (endY - startY) / (endX - startX)

当然,

(endY - startY) / (endX - startX)

只是线的斜率,所以设置

slope = (endY - startY) / (endX - startX)

然后你有

(y-startY) / (x-startX) = slope

如果您知道起点(行的startXstartY)和角度,这可能会更方便,因为您可以slope = Math.tan(angle)

对于与水平墙相交的示例,墙边缘上的所有点都具有相同的y坐标,称之为wallY。因此,如果x是交集的x坐标,那么

(wallY-startY) / (x-startX) = slope

你可以重新安排到

x = startX + (wallY-startY) / slope

所以交点是(x, wallY)x与上一个等式相同。

如果墙是有限的(即它有起点和终点x点),那么检查线是否实际上与墙相交只是x >= wallStartX && x <= wallEndX,假设wallStartX是左端墙和wallEndX右端。

如果墙是垂直的,那么数学基本相同,除了你知道墙上的x坐标(比如x = wallX),你想找到y坐标。因此,只需在第一个(或第四个)等式中用wallX代替x,然后求解y

如果墙不是水平的或垂直的,那么数学会稍微复杂一些,但并不多。 (留给读者练习。)

答案 1 :(得分:0)

您可以使用经过良好测试的JTS库来执行此类操作。