我正在尝试对人物进行模拟,我想做的一件事是模拟个人空间缓冲。要做到这一点,我需要检查一个点pt1
,看看它是否需要被另一个点pt2
击退。我希望缩放pt1
的阻力来模拟双曲线,例如1 / (distance + 1)
,其中+1
确保在小距离处力不会变为无穷大。
我已经解决了大部分问题,但我无法弄清楚如何获得一个相对于pt1
的力矢量是一个相对于它的力的归一化矢量。这里有人能用矢量数学帮助我吗?谢谢!
答案 0 :(得分:0)
不确定我是否正确理解了您的问题,但我假设这样: 你有一个点列表,让我们说一组坐标:
[[x0, y0], [x1, y1], [x2, y2], ... [xn, yn]]
然后,如果你需要在点#k上计算得到的力矢量,你需要这个:
force_vector = [0, 0]
for i from 0 to n:
skip if i = k
x_force = xk - xi
y_force = yk - yi
// Resulting force vector for i-k pair will be aligned as [x_force, y_force]
// we just need to normalize it
vector_modulo = square_root(x_force^2 + y_force^2)
normalized_vector = [x_force/vector_modulo, y_force/vector_modulo]
dist_ik = square_root((xk-xi)^2 + (yk - yi)^2)
force_vector[0] += normalized_vector[0]/(dist_ik + 1)
force_vector[1] += normalized_vector[1]/(dist_ik + 1)
最后你将拥有force_vector,其x和y值为#k点的“force”。