Как использовать al oop в максимуме для построения нескольких векторов? - PullRequest
3 голосов
/ 01 августа 2020

Я пытаюсь построить некоторые векторы формы [x, -y] для любой точки (x, y), поэтому я попробовал это:

for i:1 while i<=21 do 
    (for j:1 while j<=21 do
      (draw2d(
        xrange=[0,50],
        yrange=[0,50],
        vector([i,j],[i,-j])
        )
       ));

Но окно gnuplot обновляется на каждой итерация, поэтому я попытался поместить два цикла после draw2d и прямо перед словом "vector", но это тоже не сработало.

1 Ответ

3 голосов
/ 03 августа 2020

draw2d (аналогично draw3d) dr aws целая «сцена», которая описывается своими аргументами. Все в аргументах - одна «сцена». Итак, чтобы создать сцену с разными элементами в ней, вы хотите составить список, в котором есть все, что вы хотите, а затем применить к нему draw2d, то есть сказать Maxima, чтобы вызвать draw2d с этим списком аргументов.

Вот пример, чтобы проиллюстрировать это. Сначала я создам список всех векторов. Объект vector graphi c принимает некоторые параметры, такие как head_type и так далее. Я составлю список с параметрами, которые мне нужны, а затем добавлю параметры и список векторов, чтобы получить все нужные мне аргументы. Наконец, я назову draw2d для отображения сцены.

(%i2) load (draw) $
(%i3) myvectors: makelist (makelist (vector([i, j], [i, -j]), j, 1, 5), i, 1, 5);
(%o3) [[vector([1, 1], [1, - 1]), vector([1, 2], [1, - 2]), 
vector([1, 3], [1, - 3]), vector([1, 4], [1, - 4]), 
vector([1, 5], [1, - 5])], [vector([2, 1], [2, - 1]), 
vector([2, 2], [2, - 2]), vector([2, 3], [2, - 3]), 
vector([2, 4], [2, - 4]), vector([2, 5], [2, - 5])], 
[vector([3, 1], [3, - 1]), vector([3, 2], [3, - 2]), 
vector([3, 3], [3, - 3]), vector([3, 4], [3, - 4]), 
vector([3, 5], [3, - 5])], [vector([4, 1], [4, - 1]), 
vector([4, 2], [4, - 2]), vector([4, 3], [4, - 3]), 
vector([4, 4], [4, - 4]), vector([4, 5], [4, - 5])], 
[vector([5, 1], [5, - 1]), vector([5, 2], [5, - 2]), 
vector([5, 3], [5, - 3]), vector([5, 4], [5, - 4]), 
vector([5, 5], [5, - 5])]]
(%i4) vector_options: [head_length = 0.2, head_angle = 15, head_type = empty];
(%o4) [head_length = 0.2, head_angle = 15, head_type = empty]
(%i5) append (vector_options, myvectors);
(%o5) [head_length = 0.2, head_angle = 15, head_type = empty, 
[vector([1, 1], [1, - 1]), vector([1, 2], [1, - 2]), 
vector([1, 3], [1, - 3]), vector([1, 4], [1, - 4]), 
vector([1, 5], [1, - 5])], [vector([2, 1], [2, - 1]), 
vector([2, 2], [2, - 2]), vector([2, 3], [2, - 3]), 
vector([2, 4], [2, - 4]), vector([2, 5], [2, - 5])], 
[vector([3, 1], [3, - 1]), vector([3, 2], [3, - 2]), 
vector([3, 3], [3, - 3]), vector([3, 4], [3, - 4]), 
vector([3, 5], [3, - 5])], [vector([4, 1], [4, - 1]), 
vector([4, 2], [4, - 2]), vector([4, 3], [4, - 3]), 
vector([4, 4], [4, - 4]), vector([4, 5], [4, - 5])], 
[vector([5, 1], [5, - 1]), vector([5, 2], [5, - 2]), 
vector([5, 3], [5, - 3]), vector([5, 4], [5, - 4]), 
vector([5, 5], [5, - 5])]]
(%i6) apply (draw2d, %);

Конечно, вы можете повторить пример с количеством векторов, равным 21 ^ 2 вместо 5 ^ 2, и вы можете изменить варианты, как вы хотите. Вы также можете создать другие объекты graphi c и добавить их в список аргументов, а затем применить draw2d ко всем аргументам.

...