Line to Circle转换

问题描述 投票:2回答:1

我正在编写游戏,非常感谢一些帮助。我会直言不讳:我会用什么样的公式将有限线上的点转换为原点圆(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的点?)并且由于我的知识有限,我不知道如何处理这个问题。提前感谢您至少阅读此问题。

编辑:我想说我不确定是否存在一种转换,因为第一点左边的值和最后一点的值都被省略,因此数据丢失了。

graphics formula linear-algebra transformation game-development
1个回答
2
投票

矩阵变换是线性的(或在齐次坐标中是线性的)。这意味着例如

((p1 + p2)/2)M = ((p1 M) + (p2 M)) / 2

换句话说,p1p2的中间点被转换为p1p2转换的中间。

如果您有4个共线点,则没有矩阵可以将它们映射到非共线点。

如果您正在寻找一般映射,则需要更复杂的公式。一个易于实现(对于小尺寸的输入)和非常好的属性radial basis function (RBF) interpolator

在这种情况下,您可以指定任意点P[i]列表,并指定每个点Q[i]的目的地。最终得到一个平滑函数T,它将任意点映射到另一个点,并为所有指定点指定T(P[i]) = Q[i]

如果源点不是一般的,而是在规则网格上,那么简单的三次样条网可以为您提供一个很好的平滑插值器(显然这是大多数图像变形软件中使用的)。

© www.soinside.com 2019 - 2024. All rights reserved.