首页 > 解决方案 > 如何在不使用数据和函数的情况下绘制一些图形?(乌龟模拟)

问题描述

有什么方法可以制作如下图所示的图表吗?在 Gnuplot 中,是否有类似“lineTo、moveTo、arc、...等”的命令?如果我想制作这样的图片 海龟图形

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

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

标签: graphicsgnuplotturtle-graphics

解决方案


你可以用 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

结果:

在此处输入图像描述

添加:

顺便说一句:这个海龟图形命令实际上不能简化为吗?

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

结果:(类似于上图)


推荐阅读