如何在OpenSCAD的循环中使用multimatrix?

时间:2015-08-20 19:41:08

标签: openscad

我希望在循环内端到端地连接立方体,这样我就可以构建一个由立方体组成的螺旋,只使用它们如何相加而不是参数方程的动态规则。即翻译1,倾斜20',rotate-z 10' ...将制作3D呼吸描记器。

这是一个使用openscad递归的示例文件(与openscad循环相比,内存崩溃非常快)我希望使用循环执行相同的操作?我很困惑。

#include <pcl_ros/centroid.h>

1 个答案:

答案 0 :(得分:0)

我们可以先在递归函数中生成矩阵列表 并使用for()模块中的结果生成实际几何体。

// the identity matrix 
identity = [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ]; 

// generate 4x4 rotation matrix around Z axis 
function mr(a) = [ [ cos(a), -sin(a), 0, 0 ], [ sin(a), cos(a), 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ]; 

// generate 4x4 translation matrix 
function mt(x, y) = [ [ 1, 0, 0, x ], [ 0, 1, 0, y ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ]; 

function matrices(i = 10, m = identity, ret = []) = i >= 0 
        ? matrices(i - 1, m * mt(0, 10) * mr(20), concat(ret, [ m ])) 
        : ret; 

for (m = matrices(17)) 
  multmatrix(m) 
    cube([5, 10, 5]); 

在Torsten Paul的帮助下。