以任意角度弯曲一系列顶点的算法?
Algorithm for bending a series of vertices at an arbitrary angle?
我正在寻找有关如何“弯曲”任意列表的一些信息 points/vertices 类似于您可以在典型 3D 建模程序中找到的弯曲修改器。
我想提供点列表、旋转焦点和“最终角度”。出于我的目的,我总是会说“集合中最小 y 的点不会改变,最大 y 的点将以最大角度旋转,中间的所有内容都是插值的。”
初始配置和期望结果的示例图像,旋转 90 度:
任何人都可以提供可以解释如何进行此操作的资源吗?我已准备好对其进行编码 (C++),但我正在绞尽脑汁想出一个能让这项工作成功的概念。生成顶点很容易,但我正在为此编写的应用程序接受用户创建的内容并需要对其进行弯曲。
(编辑添加:我不需要奇迹矩阵或深度方程解...如果你说“对于每个顶点,这样做”就足以获得绿色复选标记)
谢谢!
您似乎是在将直线转换为圆弧,同时保持相邻点之间的距离。
因此,如果点 A
是您要保持不变的点,请选择另一个点 B
作为该圆的中心。 (B
越接近 A
,弯曲越严重。)现在对于任何要变换的点 C
,将矢量 C-B
分解为平行于A-B
(将该分量称为 R
)和与其垂直的分量(称为 k
)。 R
的大小将是您将 C
映射到的圆的半径,您可以将 'k' 的大小转换为沿该圆的距离:
theta = |k|/|R|
C` = B + R cos(theta) + k|R|/|k| sin(theta)
我正在寻找有关如何“弯曲”任意列表的一些信息 points/vertices 类似于您可以在典型 3D 建模程序中找到的弯曲修改器。
我想提供点列表、旋转焦点和“最终角度”。出于我的目的,我总是会说“集合中最小 y 的点不会改变,最大 y 的点将以最大角度旋转,中间的所有内容都是插值的。”
初始配置和期望结果的示例图像,旋转 90 度:
任何人都可以提供可以解释如何进行此操作的资源吗?我已准备好对其进行编码 (C++),但我正在绞尽脑汁想出一个能让这项工作成功的概念。生成顶点很容易,但我正在为此编写的应用程序接受用户创建的内容并需要对其进行弯曲。
(编辑添加:我不需要奇迹矩阵或深度方程解...如果你说“对于每个顶点,这样做”就足以获得绿色复选标记)
谢谢!
您似乎是在将直线转换为圆弧,同时保持相邻点之间的距离。
因此,如果点 A
是您要保持不变的点,请选择另一个点 B
作为该圆的中心。 (B
越接近 A
,弯曲越严重。)现在对于任何要变换的点 C
,将矢量 C-B
分解为平行于A-B
(将该分量称为 R
)和与其垂直的分量(称为 k
)。 R
的大小将是您将 C
映射到的圆的半径,您可以将 'k' 的大小转换为沿该圆的距离:
theta = |k|/|R|
C` = B + R cos(theta) + k|R|/|k| sin(theta)