从现有点查找权重,以使用加权平均值相对于三角形定位点



我的理解是,我可以使用加权平均值在 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])

现在反向过程:给定pointtriangle,找到权重:

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])

相关内容

  • 没有找到相关文章

最新更新