我现在正在编写一个游戏,非常感谢一些帮助。我将直截了当地说:我将使用哪种公式将有限线上的点转换为原点圆(0,0)?
例:
Matrix A contains points: (0, 2), (1, 2), (2, 2), ( 3, 2)
Matrix T is the standard transformation matrix (an equation is equally as helpful)
Matrix B is the transformation where AT = B so that B contains points:
(0, 2), (2, 0), (0, -2), (-2, 0)
Where vector (0, 2) is the eigenvector.
我一直遇到的问题是变换依赖于点的数量(也许将它们转换为普通 n-gon poylgon的点?),以我有限的知识,我不知道如何处理这个问题。提前感谢您至少阅读此问题。
编辑:我想说的是,我不确定是否有一种转换,因为省略了第一点左边的值和最后一点右边的值,因此数据丢失了。
矩阵变换是线性的(或在齐次坐标中是线性的)。这意味着例如
((p1 + p2)/2)M = ((p1 M) + (p2 M)) / 2
换句话说,p1
和p2
的中点被转换为p1
和p2
转换的中间点。
如果您有 4 个共线点,则没有矩阵可以在不共线的点中映射它们。
如果您正在寻找一般映射,则需要更复杂的公式。一个易于实现(对于小尺寸输入)并且具有非常好的属性的径向基函数(RBF)插值器。
在这种情况下,您可以指定任意的点列表P[i]
并指定每个点的目的地Q[i]
。您最终会得到一个平滑函数T
,它将任何点映射到另一个点,并且T(P[i]) = Q[i]
所有指定点。
如果源点不是通用的,而是在规则网格上,那么一个简单的三次样条网络可以为您提供一个很好的平滑插值器(显然这是大多数图像变形软件中使用的)。