Как нарисовать график без использования данных и функции? (аналог черепахи) - PullRequest
3 голосов
/ 10 марта 2020

Есть ли способ сделать график, как на следующем рисунке? В Gnuplot есть какая-нибудь команда типа "lineTo, moveTo, ar c, ... et c"? Если я хочу создать какое-нибудь изображение, подобное этому turtle graphics

Что мне следует сделать для создания этого изображения? в графике черепахи, просто нужно несколько кодов

repeat 36 [rt 10 repeat 2 [fd 100 rt 90]]

Ответы [ 3 ]

3 голосов
/ 10 марта 2020

Вы можете делать подобные вещи с gnuplot. Конечно, gnuplot должен знать координаты начальной и конечной точек линий, поэтому вам нужно как-то их вычислить. Что-то вроде приведенного ниже кода: вы записываете координаты в блок данных и наносите его на карту with vectors, также отметьте help vectors. График создан с помощью gnuplot 5.2.8.

Код:

### vector plot similar to turtle graphics
reset session
set size square 
set angle degrees

x0 = 0
y0 = 0
a0 = 0
r0 = 10
set print $Data
    do for [i=1:36] {
        a0 = a0 - 10
        do for [j=1:2] {
            print sprintf("%g %g %g %g",x0,y0,x0=x0+r0*cos(a0),y0=y0+r0*sin(a0))
            a0 = a0 - 90
        }
    }
set print

plot $Data u 1:2:($3-$1):($4-$2) w vectors nohead notitle
### end of code

Результат:

enter image description here

Дополнение:

Кстати: нельзя ли на самом деле упростить эту команду turtle graphi c до?

repeat 36 [fd 100 rt 110]

Да, как показывает @Friedrich, это можно сделать без блока данных. Вот модифицированная версия моего первого выстрела без модуля %. Пятый столбец, т. Е. (x0=x0+r*cos(a),y0=y0+r*sin(a),a=a-110), используется не для построения графика, а только для расчета.

Код:

### vector plot similar to turtle graphics
reset session

set size square 
set angle degrees
set xrange[-2:12]
set yrange[-10:4]
r = 10
set samples 36
plot a=x0=y0=0 '+' u (x0):(y0):(r*cos(a)):(r*sin(a)): \
                (x0=x0+r*cos(a),y0=y0+r*sin(a),a=a-110) w vec nohead not
### end of code

Результат: (аналогично графику выше)

1 голос
/ 31 марта 2020

Короткое решение с использованием полярных координат:

Я только что заметил хорошее поведение в режиме polar и специальном имени файла '+'. Наряду с обновленным решением @theozh, использующим vec, оно упрощается до

set size square 
set angle degrees
set polar

pl a=0, [i=1:36:1] '+' us (a=a+110):(1):(100):(0) w vec nohead

Таким образом, фрагмент черепахи может быть переведен практически напрямую.

Даже немного короче, тот же график можно сделать с помощью

set sample 36
pl '+' us ($0*10):(1):(100):(0) w vec nohead
0 голосов
/ 11 марта 2020

Вот версия, аналогичная @theozh без блока данных

set size square 
set angle degrees

r = 10
pl a=x=y=0, [i=1:2*36+1:1] '+' us (a=a-int(i)%2*10-90, x=x+r*cos(a)) : (y=y+r*sin(a)) w l t ""

int(i)%2 эмулирует второй счетчик l oop для чередующегося вычитания 10.

...