graphics - 线到圆的变换

标签 graphics formula linear-algebra transformation game-development

我目前正在编写游戏,非常感谢您的帮助。我开门见山:我会使用什么样的公式来将有限线上的点转换为原点圆 (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 边形多边形的点数?)并且以我有限的知识,我不知道如何处理这个.提前感谢您至少阅读此问题。

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

最佳答案

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

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

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

关于graphics - 线到圆的变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26971646/

相关文章:

algorithm - 寻找将图像映射到 4 边多边形的算法

c++ - 访问呈现的 WPF 页面/窗口的底层 DirectX 表面/渲染目标

javascript - 5x5 网格中所有可能的移动?

javascript - 如何在模型 View 投影广告牌顶点着色器中保留旋转和缩放变换?

python - 矩阵向量乘法

java - 扩展图形程序

excel - 如何在excel中的所有单元格中查找和替换部分公式

基于标准的 Excel 索引

Python稀疏矩阵逆和拉普拉斯计算

python - Spyder - UMD 已删除 : module