如何在OpenSCAD的FOR循环中创建成对的向量元素
解决OpenSCAD中交错合并2D向量列表的问题
你需要将两组2D向量按交错顺序合并成一维列表,而非嵌套数组。以下是几种可行的解决方案:
方案1:利用flatten扁平化嵌套数组
保留你原有的step1和step2定义,先通过循环生成成对的子数组,再用flatten函数展开嵌套结构:
step1 = [ for (i=[1:5]) [i,2*i+3] ]; step2 = [ for (i=[1:5]) [-i,2*i+2] ]; // 生成成对嵌套数组后,扁平化一层得到交错结果 steps = flatten([ for(i=[1:5]) [step1[i-1], step2[i-1]] ]); echo(steps);
flatten会将最外层的子数组直接展开,把[[a,b],[c,d],...]转换为[a,b,c,d,...],正好符合你的需求。
方案2:单循环直接生成(无需提前定义step1/step2)
直接在循环中生成每对元素并包装为子列表,再通过flatten展开,写法更简洁:
steps = flatten([ for(i=[1:5]) [ [i,2*i+3], [-i,2*i+2] ] ]); echo(steps);
方案3:双倍长度循环+索引判断
将循环次数设为目标总长度(10次),利用索引的奇偶性决定生成哪一组元素:
steps = [ for(idx=[0:9]) let(i = floor(idx/2) + 1) // 计算对应原循环的i值 idx % 2 == 0 ? [i, 2*i+3] : [-i, 2*i+2] ]; echo(steps);
为什么你之前的代码报错?
OpenSCAD的列表推导式[for(...) ...]要求循环体每次只能返回单个元素,你直接写[i,2*i+3],[-i,2*i+2]相当于一次返回两个元素,违反语法规则,因此会出现循环变量未识别的错误。必须将两个元素包装为一个子列表,再通过flatten处理嵌套结构。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

