0

数组 openScad:我需要在 quicksort() 函数中使用嵌套循环的结果,但这似乎是不可能的。

倒数第二行(在下面的代码中)中的“arr”一次不会包含多个值。在循环的第一次运行中,arr 得到值 2.01,在第二次运行中,值是 1.6125,依此类推。我需要的是一个包含所有四个值的数组:arr=[[2.01],[1.6125],[3.775],[4.8]],因为上面的快速排序需要这样的输入。如果可以在 openScad 中实现这一点,我该怎么做?

function quicksort(arr) = !(len(arr)>0) ? [] : let(
pivot   = arr[floor(len(arr)/2)],
lesser  = [ for (y = arr) if (y  < pivot) y ],
equal   = [ for (y = arr) if (y == pivot) y ],
greater = [ for (y = arr) if (y  > pivot) y ]
) concat(quicksort(lesser), equal, quicksort(greater));

x_0=262; y_0=140; x_1=17.5;y_1=305;x_2=500;y_2=255; x_3=575;y_3=385;

ads=[[x_0,y_0],[x_1,y_1],[x_2,y_2],[x_3,y_3]];
for(b=[0 : 3])
{
 for(c=[0:0])
    if(ads[b][0]>=0 && ads[b][1]>=0)
    {         
            asc_diff=((ads[b][0])+ads[b][1])/2*0.01;                    
            arr=asc_diff; 
            //quicksort(arr) ;          
            echo("27: arr", arr); 
      }
 }
4

1 回答 1

0

您必须在初始化时使用硬编码值或依赖硬编码值的函数来设置数组的所有值。所以是的,您可以创建一个数组,其值已计算,但您必须在初始化时进行所有计算。这可能看起来像这样:

arr = [asc_diff(element_1), asc_diff(element_2), ... , asc_diff(element_n)];

对于嵌套循环,这将变得相当困难和麻烦。您可以编写一个 C 程序来为您生成 OpenSCAD 代码。或者您可能想查看 OpenJSCAD。OpenJSCAD 是面向对象的,并且比 OpenSCAD 具有更多的编码功能。

于 2019-11-30T23:31:14.930 回答