我的理解是,我可以使用加权平均值在 3D 空间中三角形内的任意位置定位一个点:
import numpy as np
triangle = np.arange(9)
triangle.shape = (3,3)
weights = np.array([1, 0.3, 20])
point = np.average(triangle, weights=weights, axis=0)
现在我有一个使用加权平均值定位在三角形中的点。 我的问题是如何做相反的事情。如果我有一个三角形,并且我已经在其中放置了一个点,我是否可以从点和三角形之间的关系中获得权重,以便我使用加权平均值来重新定位该点?例如,如果三角形移动,我希望该点相对于三角形保持在同一位置。我意识到这可以通过重心计算来完成。我希望有一种更简单的加权平均值方法。
假设点存储在triangle
行中,并且点不都位于同一行中,您可以使用:
weights = np.linalg.solve(triangle.T, point)
下面是一个示例。 我将使用您的triangle
的修改版本,因此点不在一条线上:
In [57]: triangle
Out[57]:
array([[9, 1, 2],
[3, 4, 5],
[6, 7, 8]])
使用相同的weights
,计算point
作为triangle
行的加权平均值:
In [58]: weights
Out[58]: array([ 1. , 0.3, 20. ])
In [59]: point = np.average(triangle, weights=weights, axis=0)
In [60]: point
Out[60]: array([6.09859155, 6.67605634, 7.67605634])
现在反向过程:给定point
和triangle
,找到权重:
In [61]: w = np.linalg.solve(triangle.T, point)
In [62]: w
Out[62]: array([0.04694836, 0.01408451, 0.93896714])
请注意,w
是规范化的,因此其总和为 1。 如果我们规范化weights
,我们看到它匹配w
:
In [63]: weights / weights.sum()
Out[63]: array([0.04694836, 0.01408451, 0.93896714])