python在两个3D点之间查找向量方向

python在两个3D点之间查找向量方向,python,Python,我试图计算一个3D向量的方向,从x,y,z点开始,到a,b,c点结束,用于我的宇宙飞船游戏中的导航,但我一直找不到任何有用的东西。到目前为止,我已经尝试使用两个圆,一个用于计算x和y,另一个用于计算z,只有当两个向量的距离非常相似时,代码才起作用 以下是我正在使用的: def setcourse(self, destination): x1, y1, z1 = self.coords x2, y2, z2 = destination dx = x2 - x1 d

我试图计算一个3D向量的方向,从x,y,z点开始,到a,b,c点结束,用于我的宇宙飞船游戏中的导航,但我一直找不到任何有用的东西。到目前为止,我已经尝试使用两个圆,一个用于计算x和y,另一个用于计算z,只有当两个向量的距离非常相似时,代码才起作用

以下是我正在使用的:

def setcourse(self, destination):
    x1, y1, z1 = self.coords
    x2, y2, z2 = destination

    dx = x2 - x1
    dy = y2 - y1
    dz = z2 - z1

    self.heading = math.atan2(dy, dx)
    self.heading2 = math.atan2(dz, dy)

    self.distance = int(math.sqrt((dx) ** 2 + (dy) ** 2))
    self.distance2 = int(math.sqrt((dy) ** 2 + (dz) ** 2))

def move(self):
    if self.distance > 0 and self.distance2 > 0:
        if self.atwarp == True:
            x, y, z = self.coords
            x += math.cos(self.heading) * self.speed
            y += math.sin(self.heading) * self.speed
            z += math.sin(self.heading2) * self.speed

            self.coords = (x, y, z)
            print(str(self.coords))
            self.distance -= self.speed
            self.distance2 -= self.speed

    elif self.distance <= 0 and self.distance2 <= 0 and self.atwarp == True:
        self.atwarp = False
        self.speed = 0
        print("Reached Destination")

    else:
        self.atwarp = False
我不确定其中有多少是数学错误,有多少是编程错误,但z的结果太离谱了,我不确定如何着手修复它。无论我做什么,如果z的输入与其他输入稍有不同,z总是关闭的

下面是从0、0、0开始的示例。我试图使输出与输入相似,如果不是相同的话

输入:100200,-200

以弧度表示的矢量1航向:1.1071487177940904 矢量2标题:2.356194490192345

矢量1距离:223 矢量2距离:282

输出:99.7286317964909199.45726359298181815157.68481220460077 x和y都很好,但z是关闭的

输入:-235634,-21

矢量1航向(弧度):1.9257588105240444 矢量2标题:1.6039072496758664

矢量1距离:676 矢量2距离:634

输出:-220.3499891866359594.4761410396925633.6524941214135
z关闭。

运动方向是您计算的三个dx,dy,dz。这个向量不是纯的: 它包含距离和方向。如果你只想知道方向,你必须正常化 这:

距离为sqrtdx^2+dy^2+dz^2

对于规格化方向,将每个dx、dy和dz除以该数字

如果你想朝那个方向移动,新的位置就是旧的位置加上 方向向量乘以要行驶的距离:

newpos=oldpos+dist*dirvector

我不确定你所说的输入是什么意思:100200,-200如果这是方向, 你的方向向量是300长,实际的方向向量是 100/300、200/300和-200/300 so 0.333、0.667和-0.667

如果要沿该方向移动500,则新位置为
0+166.67、0+333.33和0-333.33

运动方向是您计算的三个dx、dy、dz。这个向量不是纯的: 它包含距离和方向。如果你只想知道方向,你必须正常化 这:

距离为sqrtdx^2+dy^2+dz^2

对于规格化方向,将每个dx、dy和dz除以该数字

如果你想朝那个方向移动,新的位置就是旧的位置加上 方向向量乘以要行驶的距离:

newpos=oldpos+dist*dirvector

我不确定你所说的输入是什么意思:100200,-200如果这是方向, 你的方向向量是300长,实际的方向向量是 100/300、200/300和-200/300 so 0.333、0.667和-0.667

如果要沿该方向移动500,则新位置为
0+166.67、0+333.33和0-333.33

请给出一个输入和期望输出的示例。请给出一个输入和期望输出的示例。是的,输入是方向,抱歉,我认为这是清楚的。谢谢你的帮助。是的,输入是方向,对不起,我认为它是清楚的。谢谢你的帮助。