代码之家  ›  专栏  ›  技术社区  ›  Chris

如何在OpenSCAD中的FOR循环中成对创建矢量元素

  •  1
  • Chris  · 技术社区  · 11 月前

    我的目标是使用FOR循环创建成对的2D矢量元素。考虑以下示例(不是我的真实示例,只是为了描述问题而简化的示例):

        step1 = [ for (i=[1:5]) 
            [i,2*i+3]
        ];
        
        step2 = [ for (i=[1:5]) 
            [-i,2*i+2]
        ];
        
        steps = [ for (i=[1:5]) 
            concat([step1[i-1]],[step2[i-1]])
        ];
     
    echo(step1);
    echo(step2);
    echo(steps);
    

    step1矢量如下:[[1,5],[2,7],[3,9],[4,11],[5,13]]

    step2矢量如下:[[-1,4],[-2,6],[-3,8],[-4,10],[-5,12]]

    我的目标是交织步骤1和步骤2的元素,以产生:
    [[1, 5], [-1, 4], [2, 7], [-2, 6], [3, 9], [-3, 8], [4, 11], [-4, 10], [5, 13], [-5, 12]]

    到目前为止,我所能实现的最接近使用如上所述的“concat”,但这将每个连接对视为一个单独的向量,因此在每个交织对周围加上一个额外的方括号,如下所示:
    [[[1, 5], [-1, 4]], [[2, 7], [-2, 6]], [[3, 9], [-3, 8]], [[4, 11], [-4, 10]], [[5, 13], [-5, 12]]]

    如果我试图在单个循环中创建每对元素,例如。

        steps = [ for (i=[1:5]) 
            [i,2*i+3],[-i,2*i+2]
        ];
    

    然后,对于逗号后面的元素的循环变量,我得到了一个“未知变量”错误。

    一定有一个简单的方法可以做到这一点——有人能帮忙吗?

    1 回复  |  直到 11 月前
        1
  •  0
  •   chrslg    11 月前

    我想这正是关键词 each 是的。

    steps = [ for (i=[1:5]) 
            each [step1[i-1],step2[i-1]]
    ];