使用加权平均找到现有点的权重以相对于三角形定位点
Find the weights from an existing point to position a point relative to a triangle using weighted average
我的理解是我可以使用加权平均值将点定位在 3D 三角形内的任何位置 space:
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])
我的理解是我可以使用加权平均值将点定位在 3D 三角形内的任何位置 space:
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])