java相交对象
因此,我制作了以下游戏: 玩家可以自由移动,射击从墙上弹下来的子弹。我正在尝试实现自动瞄准。我试着用环绕播放器的线条来实现这一点 现在我遇到的问题是计算线与墙相交的位置。我不知道该怎么做java相交对象,java,Java,因此,我制作了以下游戏: 玩家可以自由移动,射击从墙上弹下来的子弹。我正在尝试实现自动瞄准。我试着用环绕播放器的线条来实现这一点 现在我遇到的问题是计算线与墙相交的位置。我不知道该怎么做 我不能使用getBounds(),因为这些线不是二维矩形。如果有人知道我如何计算线与墙相交的位置,并返回该位置,那将非常有用。您只需要在这里进行计算 假设您的行从(startX,startY)开始,在(endX,endY)结束。然后使用小学基础几何,直线上的任何点(x,y)都满足方程 (y-startY) /
我不能使用getBounds(),因为这些线不是二维矩形。如果有人知道我如何计算线与墙相交的位置,并返回该位置,那将非常有用。您只需要在这里进行计算 假设您的行从
(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
如果您知道起点(startX
和startY
直线)和角度,这可能会更方便,因为您可以只做slope=Math.tan(角度)
对于与水平墙相交的示例,墙边缘上的所有点都具有相同的y坐标,称之为wallY
。因此,如果x
是交叉点的x坐标,则
(wallY-startY) / (x-startX) = slope
你可以重新安排到
x = startX + (wallY-startY) / slope
因此,交点是(x,wallY)
,与x
,如上一个等式所示
如果墙是有限的(即有起点和终点x点),然后,检查直线是否与墙相交的方法很简单,
x>=wallStartX&&x您可以使用经过良好测试的库来执行这些操作。这里没有什么神奇之处:您只需要做一些基本的几何图形就可以算出它。@James\u D没有方法可以计算直线与二维矩形之间的交点吗?此外,有360条线来自坦克,迷宫中有许多墙。我不认为计算几何体是一种选择。我只是为不同的应用程序处理了相同的问题。我想我错过了几何课的这一部分,但你将使用线段的参数形式。谷歌“Java段射线交叉点”提供一些有用的信息threads@Jdman1699迷宫是在我的应用程序中随机生成的。每次都会随机生成许多线条和许多垂直和水平的墙。有时这些线会同时与两个水平墙相交(一个在下面,一个在上面)。您的方法仍然适用吗?当然,对于上面的墙,wallY
将是墙底边的y坐标,对于下面的墙,wallY
将是墙顶边的y坐标。对于垂直墙,重复相同的想法,但您知道wallX
,需要找到y
。显然,你可以对一个循环中的每一条线进行计算,或者你需要做的任何事情。那么我该如何计算垂直墙的方程呢。我还是有点累confused@Huz对于垂直墙,您知道x
(称之为wallX
,墙的x坐标),并且希望找到交点的y
坐标。在第一个方程中用wallX
替换x
,然后求解y
@Huz,这看起来很有趣,所以我玩了类似的东西。结果以电子邮件的形式发布。(一点也不完整,但您可以用箭头键移动圆圈,然后按Enter键以随机角度开火。“坦克”可以穿过墙壁,只是没有实现该部分……)您要询问的部分(与“墙”相交的线)在HorizontalWall.java和VerticalWall.java中实现。