Graphics 如何在不使用数据和函数的情况下绘制一些图形?(海龟模拟)

Graphics 如何在不使用数据和函数的情况下绘制一些图形?(海龟模拟),graphics,gnuplot,turtle-graphics,Graphics,Gnuplot,Turtle Graphics,有没有什么方法可以画出如下图所示的图形?在Gnuplot中,是否有类似“lineTo、moveTo、arc等”的命令? 如果我想拍一些像这样的照片 制作这张照片我该怎么做? 在海龟图形中,只需要一些代码 repeat 36 [rt 10 repeat 2 [fd 100 rt 90]] 您可以使用gnuplot做类似的事情。当然,gnuplot需要知道线的起点和终点的坐标,因此您必须以某种方式计算它们。类似于下面的代码:将坐标写入一个数据块,并用向量绘制它,同时选中帮助向量。使用gnuplo

有没有什么方法可以画出如下图所示的图形?在Gnuplot中,是否有类似“lineTo、moveTo、arc等”的命令? 如果我想拍一些像这样的照片

制作这张照片我该怎么做? 在海龟图形中,只需要一些代码

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

您可以使用gnuplot做类似的事情。当然,gnuplot需要知道线的起点和终点的坐标,因此您必须以某种方式计算它们。类似于下面的代码:将坐标写入一个数据块,并用向量绘制它,同时选中帮助向量。使用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
### 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
结果:

### 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
### 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

添加:

### 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
### 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
顺便问一下:这个海龟图形命令不能简化为

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

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
### 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

结果:(与上图类似)

这里有一个类似于@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
模拟第二个循环计数器进行10的交替减法运算


使用极坐标的简短解决方案:

我刚刚注意到组合
polar
模式和特殊文件名
'+'
的良好行为。随着使用
vec
更新的@theozh解决方案,它简化为

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

很高兴听到这个消息。如果这回答了您的问题,请检查答案是否已被接受。可能是最短的方法:-)