Можно ли использовать результаты циклов в openscads quicksort ()? - PullRequest
0 голосов
/ 29 апреля 2019

Массивы 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); 
      }
 }
...