Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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 collis 2d检测算法,方位定义方向,摄像机为点,立方体分为4个立方体..opengl_Java_Collision Detection_Azimuth - Fatal编程技术网

Java collis 2d检测算法,方位定义方向,摄像机为点,立方体分为4个立方体..opengl

Java collis 2d检测算法,方位定义方向,摄像机为点,立方体分为4个立方体..opengl,java,collision-detection,azimuth,Java,Collision Detection,Azimuth,我在用opengl做3d迷宫,像2d一样的碰撞 Map的定义类似于2dim数组 ---------x axis |0 0 0 |0 1 0 |0 0 0 | |z axis 那1是个立方体 我把那个立方体分成4个立方体 . _ _ |_|_| |_|_| 圆点是我的相机点和x,z坐标,现在我去我的立方体。posX,Z是这样计算的,但它并不重要,但你们知道它是如何工作的,在这里 posZ -= (float) ((Math.cos(azimut * Math.PI / 180) * Ma

我在用opengl做3d迷宫,像2d一样的碰撞

Map的定义类似于2dim数组

 ---------x axis
|0 0 0
|0 1 0
|0 0 0
|
|z axis
那1是个立方体

我把那个立方体分成4个立方体

 .
 _ _
|_|_|
|_|_|
圆点是我的相机点和x,z坐标,现在我去我的立方体。posX,Z是这样计算的,但它并不重要,但你们知道它是如何工作的,在这里

posZ -= (float) ((Math.cos(azimut * Math.PI / 180) * Math.cos(zenit * Math.PI / 180))) / 50;
posX += (float) ((Math.sin(azimut * Math.PI / 180) * Math.cos(zenit * Math.PI / 180))) / 50;
在display()方法中,它是每毫秒计算一次的。。 我将其转换为int,这样我就有了数组的正确坐标,并将其保存到newX,Z

newposZ = (int) posZ;
newposX = (int) posX;

if (maze[newposZ][newposX] == 1) {
我通过方位角检查我从哪里来。。像这样(这是上面图片中的点位置,如果正对墙,左上角的立方体方位角是180,但我想检查90到270之间的距离。)

if(posX-newposX<0.5&&posZ-newposZ<0.5&&(方位角>90&&azimut<270){
posZ=newposZ;
}
是的,我把posZ换成了1.1,换成了casted newposZ,也就是说1,所以一切都好,摄像机撞到墙上,但方位角检查是个坏主意,因为在下一步中,我检查同一个迷你立方体,但从左像这样

if (posX - newposX < 0.5 && posZ - newposZ < 0.5 && (azimut > 0 && azimut > 180) {
    posX = newposX;
}
if(posX-newposX<0.5&&posZ-newposZ<0.5&&(方位角>0&&azimut>180){
posX=newposX;
}
这是不好的,因为在某个角度(角度90到180,因为两者都是一样的…)它同时将posX和posZ设置为newposX,newposZ…,其中一个变量是固定的,但如果你知道我的意思,另一个不应该是固定的


如果我只从-45度到45度检查,效果还可以,但我想从-90度到-90度,有人能帮上忙吗?

更简单的方法:如果你的起始位置正常,并且你的新位置在你的立方体内部,你就发生了碰撞。你遇到立方体边界的角度只对反射/反弹很重要,这会变得复杂。但是如果我在我不知道我从哪里来,所以如果我来了,让我们假设从dot do到左1,posX和Z都变为1,它将我移动到角[1,1],但它应该只修正一个变量,我应该在点上,比如[1,1.1]或其他。。
if (posX - newposX < 0.5 && posZ - newposZ < 0.5 && (azimut > 0 && azimut > 180) {
    posX = newposX;
}