python在两个3D点之间查找向量方向
我试图计算一个3D向量的方向,从x,y,z点开始,到a,b,c点结束,用于我的宇宙飞船游戏中的导航,但我一直找不到任何有用的东西。到目前为止,我已经尝试使用两个圆,一个用于计算x和y,另一个用于计算z,只有当两个向量的距离非常相似时,代码才起作用 以下是我正在使用的: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
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请给出一个输入和期望输出的示例。请给出一个输入和期望输出的示例。是的,输入是方向,抱歉,我认为这是清楚的。谢谢你的帮助。是的,输入是方向,对不起,我认为它是清楚的。谢谢你的帮助。