Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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_Math - Fatal编程技术网

Java 我怎样才能使炮弹绕着飞船旋转?

Java 我怎样才能使炮弹绕着飞船旋转?,java,math,Java,Math,很抱歉这个标题不好,但我想不出别的了 让我解释一下:我有两艘飞船。碰撞世界中的船和真实世界中的船 现在,真实世界中的船舶正在旋转,但是我无法在碰撞世界中旋转船舶(或移动船舶),这意味着碰撞对象必须在碰撞世界中围绕船舶旋转 当炮弹靠近飞船时,我得到炮弹到飞船的距离(对于x、y和z),然后将其与作为碰撞点(大约2000+)的三坐标数组进行比较-如果三坐标数组的结果为“1”,则它们发生碰撞。换句话说,碰撞船不会移动,但在碰撞代码中,炮弹的位置与到真实世界船和真实世界炮弹的距离相同 现在问题来了:如果飞

很抱歉这个标题不好,但我想不出别的了

让我解释一下:我有两艘飞船。碰撞世界中的船和真实世界中的船

现在,真实世界中的船舶正在旋转,但是我无法在碰撞世界中旋转船舶(或移动船舶),这意味着碰撞对象必须在碰撞世界中围绕船舶旋转

当炮弹靠近飞船时,我得到炮弹到飞船的距离(对于x、y和z),然后将其与作为碰撞点(大约2000+)的三坐标数组进行比较-如果三坐标数组的结果为“1”,则它们发生碰撞。换句话说,碰撞船不会移动,但在碰撞代码中,炮弹的位置与到真实世界船和真实世界炮弹的距离相同

现在问题来了:如果飞船旋转,我需要绕着飞船旋转炮弹,因为飞船不能旋转。 我该怎么做?什么样的数学公式? 注意:我有-飞船的旋转,x,y,z坐标,以及炮弹的x,y,z坐标

如果有人能给我一个答案,谢谢

编辑:让我们更清楚地了解这一点。 在现实世界中,1号船可以向2号船发射炮弹。如果我指的是“这艘船”,我指的是第二艘船。 当炮弹接近飞船时,我想让它检查碰撞情况。为此,(物理世界)我检查
数组[CannonBall.distance(ship).x][CannonBall.distance(ship.y][CannonBall.distance(ship.z)]
是否返回一个“1”,如果返回,它就会发生碰撞。
但是,由于我无法在没有大量处理的情况下更改阵列,因此我无法更改船的旋转。因此,我必须围绕炮弹旋转炮弹,使之与炮弹的真实旋转相比较,与船相比。

< P>如果我让你猜对了,那么你就有一艘船(例如在屏幕中间),围绕着它旋转一个炮弹,以便瞄准另一艘可移动的船。所有这些都是在3D(?)。假设这就是你的意思,这里有一个答案;):

让我们先在二维空间中这样做。你首先需要的是一个计算圆的公式。由于函数的每个x值只能有一个y值,因此实际上需要两个y值。最聪明的做法可能是将你的佳能球从静止的飞船所面对的方向划分为公共的360°,然后用公式计算x和y坐标。一种方法可以使用圆的公式(+/-r²=x²+y²,r是半径),但我认为使用cos和sin的方法更容易。因此: 您可能需要输入一个角度。如果这个角度是90°,那么你的炮弹就在船的右边。180°在你的船下面,270°在左边,0°/360°在上面。然后,我会把这个输入加上90度,这样你就可以从船的左边开始(这对cos和sin的工作很重要!)。我们现在知道的是炮弹的角度和圆的半径。假设你知道船中间的坐标,你可以想象自己在一个坐标系中,你的船就是原点。现在你需要计算x。这可以通过以下方式实现: x=-cos^-1(角度)*半径。结果将是你的x坐标,你必须从船坐标的中间减去。然后,在已知x和角度的情况下,可以计算y=x/tan-1(角度)。如果原始角度大于90°,则必须将y坐标乘以-1。 这方面的方法是:

public void calculateCordinates(int degrees, int r){
    degrees = degrees+90;
    while(degrees>=360){degrees=degrees-360;}//ensures that degree < 360°
    double x;
    double y;
    x = Math.acos(Math.toRadians((double)degrees))*r;
    y = x/Math.atan(Math.toRadians((double)degrees));
}

我希望这是你所要求的,我希望它能帮助你

船舶是否总是绕同一轴线旋转,或者它是否可以向任何方向倾斜/俯仰/偏航?重新编写问题,以便更容易理解。
 public void calculateCordinates(int degrees, int degrees3D, int r){
    degrees = degrees+90;
    while(degrees>=360){degrees=degrees-360;}
    double x;
    double y;
    double z;
    x = Math.acos(Math.toRadians((double)degrees))*r;
    y = x/Math.atan(Math.toRadians((double)degrees));
    z = x/Math.atan(Math.toRadians((double)degrees3D));
}