Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java相交对象_Java - Fatal编程技术网

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中实现。