algorithm - 折叠一张纸(计算机视觉)

标签 algorithm geometry linear-algebra

我正在执行一项任务,尝试将带有折叠折痕的 2D 草图转换为完整的 3D 表示。 红线代表山谷,蓝线代表山峰。我想计算转换/映射坐标 {P1'...P8'}。我还没有找到任何可以自动执行此操作的好软件,但希望得到提示。

Folding Pattern

  • a - 折叠角度
  • P - 坐标
  • E - 元素
  • 蓝线-折叠山
  • 红线-折叠谷

Folded 与 a1 = a2 = a3 = 90 deg (pi/2 rad) (折叠角) 和箭头作为表面法线

我正在使用 Matlab,但我正在寻找解决此问题的通用算法。

假设点 P0 在 origo 中固定并且元素 E1 不会更改其坐标,我应该如何最好地描述转换?我应该使用非齐次坐标还是齐次坐标、极坐标?

例如,P8 点依赖于其他坐标,而其他坐标又依赖于角度。

我想我可以为点(节点)使用某种邻接矩阵和/或将每个元素与其节点配对的矩阵。 例如:[E1 P0 P4 P5 P1 ; E2 P1 P5 P6 P2 ; ...]

每个坐标的变换是变换+旋转,变换取决于坐标/元素。但是连接多个元素会变得棘手......

如何将带有折叠图案的 2D“纸”巧妙地转换为 3D 坐标?

最佳答案

您可以遍历每个折叠折痕,并计算位于折痕一侧的所有像素的变换。

您可以使用转换矩阵来计算折叠点的坐标。看看the wikipedia article describing transformation matrix .

首先,平移所有点,使折痕与一个轴对齐,然后根据折痕的方向旋转折痕一侧的所有点。然后您可以反转第一个平移,使图形回到原来的位置。重复下一个折痕的过程,直到完全折叠图形。

使用 matlab,矩阵计算非常容易进行。

关于algorithm - 折叠一张纸(计算机视觉),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10920221/

相关文章:

计算CUDA中两个三角形之间的角度

matlab - 简单的线性代数问题( Octave /matlab)

algorithm - 在 3D 中找到最大数量的共线点

java - Shell 排序 Java 示例

algorithm - 获取数字的所有因子(迭代器摊牌 :)

algorithm - 找到 : T(n) = T(n^(1/2)) + 1 的 theta

c++ - 从2个矩形中获取交点

algorithm - 多边形被分成 4 部分

ios - 将世界坐标转换为对象坐标

algorithm - O(in) 是二次复杂度的线性复杂度吗?还是取决于k?