我必须承认,我在Python方面并不是那么糟糕,但在数学方面却不是那么好。在那里,我说了。我打算用3D坐标系建立游戏。经典,非常简单。就像我的第一个房间是0,0,0,而东边的那个房间将是1,0,0。
更难的是我需要搜索这些坐标。例如,找一个半房间内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])
但这就是我的微薄技能达到死胡同的地方。从理论上讲,我可以将一个减去另一个来获得绝对距离,但即便如此,我也会陷入困境。所以我会把我的需求放在这里......希望有人可以帮助我解决问题:
如果这没有多大意义,我很抱歉。我的用例在我的脑海中非常清楚,但不是很了解向量,也许我在一个或多个简单的概念上缺失。
感谢您的帮助!
答案 0 :(得分:2)
一点点线性代数将大大有助于完成你想要的大部分工作。
两个向量之间的距离。您可以定义c = a- b
,然后找到此差异向量的大小。找到向量的大小很简单:mag = np.sqrt(np.dot(c,c))
既然您有办法计算两点之间的距离,您可以按照建议进行操作,但检查每个可能的向量对将是O(N ^ 2)。
我不完全确定你的2D方向和垂直方向是什么意思。但是可以使用A点B = | A | * | B | * cos(theta)的事实来找到两个向量之间的角度,其中| A |是A的大小,theta是角度。所以你可以这样做:
magA = np.sqrt(np.dot(A,A))
magB = np.sqrt(np.dot(B,B))
angle = np.arccos(np.dot(A,B)/(magA*magB))
这是rotation matrices的用途。给定一个角度,你可以定义一个旋转矩阵M,只需用np.dot(M, A)
来获得旋转的矢量。
要标准化矢量,只需将每个分量除以幅度即可。所以normA = A / (np.sqrt(np.dot(A,A))
这不是一个完整的答案,但希望它能让你朝着正确的方向前进。