[英]Use NumPy for 3D vectors
我必须承认,我在Python上并不差,但是在数学上却不那么好。 在那里,我说了。 我正计划用3D坐标系构建游戏。 经典,真的很简单。 就像我的第一个房间是0、0、0,而东方的房间是1、0、0。
更加困难的是,我需要搜索这些坐标。 举例来说,找出以3个房间为半径的X,Y,Z坐标周围的所有房间。 我也可以将其用于寻路。 所以我在考虑使用NumPy来提高性能(因为我不知道最后会有多少个坐标),所以事情很简单:
import numpy as np
a = np.array([0.0, 0.0, 0.0])
b = np.array([1.0, 0.0, 0.0])
但这就是我微薄的技能达到死胡同的地方。 从理论上讲,我可以将两者相减以获得绝对距离,但即使如此,它似乎还是卡住了。 所以我将我的需求放在这里...并希望有人可以帮助我解决问题:
很抱歉,如果这没有太大意义。 我的用例在我的脑海中非常清楚,但是对向量的了解却很少,也许我缺少一个或多个简单的概念。
谢谢你的帮助!
一点线性代数将对您完成大部分所需的工作大有帮助。
两个向量之间的距离。 您可以定义c = a- b
,然后找到该差矢量的大小。 查找向量的大小很简单: mag = np.sqrt(np.dot(c,c))
现在您已经有了计算两个点之间的距离的方法,尽管检查每个可能的向量对都是O(N ^ 2),但是您可以执行建议的操作。
我不太确定2D方向和垂直方向是什么意思。 但是,可以使用以下事实来找到两个向量之间的夹角:A点B = | A | * | B | * cos(theta),其中| A | 是A的大小,θ是角度。 因此,您可以执行以下操作:
magA = np.sqrt(np.dot(A,A)) magB = np.sqrt(np.dot(B,B)) angle = np.arccos(np.dot(A,B)/(magA*magB))
这就是旋转矩阵的作用。 给定一个角度,您可以定义一个旋转矩阵M,然后简单地使用np.dot(M, A)
来获得旋转矢量。
要归一化向量,只需将每个分量除以幅度即可。 所以normA = A / (np.sqrt(np.dot(A,A))
这不是一个完整的答案,但希望它能引导您朝正确的方向发展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.