某冰岚吧 关注:97贴子:3,358

回复:酷语言

只看楼主收藏回复

text函数跟PR 都是输出字符函数
都要通过转义字符实现某些功能
这个版本最好使用text,因为PR 跟画图会产生干扰
PR 的优点在速度快
text的缺点在于要置方向
text 32 0 15 宋体 你好 //绘制你好,字体大小32,样式0,颜色15
TO 测试 :a
PR 1
PR 2
PR {:a}
PR ┌┬┐┏┳┓╒╤╕╭─╮┏━┓╔╦╗─│━┃┄┆ ┝┿┥╃╄╅╆
PR ├┼┤┣╋┫╞╪╡│╳┃┃哈┃╠╬╣ ┉┋┈┊┉┋
PR └┴┘┗┻┛┕╧╛╰━╯┗━┛╚╩╝┞╀┦┟╁┧┠╂┨┡╇┩┢╈┪
PR ○◇□△▽☆
PR ●◆■▲▼★
PR ♀√
PR ♂×
PR ⊙◎▁▂▃▅▆▇█
PR 卍卐
PR ¬
PR ☉⊕Θ⊿
PR ∮‖§Ψ
PR 々
PR ㊣№
PR ㈱℡曱甴囍
PR ▓∷
PR ╱╲▁▏↖↗↑←◤◥
PR ╲╱▔▕↙↘↓→◣◢
PR ┭┰┲┮┱┭┱
PR ┿╂┾╊╉┽╉
PR ┵┸┶┺┹┵┹
TO MAIN
测试 3


22楼2017-02-16 00:41
回复

    这是上个楼层执行的结果
    \{代表'{'
    \b退格
    \\是'\'
    \r\n是换行
    \e是不换行
    {}这个大括号里面是计算表达式的值
    这些转义字符内容PR 跟text是一样的
    换行没测过
    PR 会把空格原样输出
    text遇到空格就结束所以text中的空格要换成特殊字符比如' '


    23楼2017-02-16 00:50
    回复

      TO 头 :x :y :r :z臂 :z臂r :y臂 :y臂r :z腕 :z腕r :y腕 :y腕r :z腿 :z腿r :y腿 :y腿r :zx腿 :zx腿r :yx腿 :yx腿r
      make :penx=:penx+:x :peny=:peny+:y :heading=:heading+:r
      OVAL 10 10 0
      OVAL 6 6 0
      OVAL 2 2 0
      rt 180
      fd 80
      make :r=:heading :x=:penx :y=:peny :penc=1
      左臂 :z臂 :z臂r :z腕 :z腕r
      make :heading=:r :penx=:x :peny=:y :penc=:penc+1
      右臂 :y臂 :y臂r :y腕 :y腕r
      make :heading=:r :penx=:x :peny=:y :penc=:penc+1
      左大腿 :z腿 :z腿r :zx腿 :zx腿r
      make :heading=:r :penx=:x :peny=:y :penc=:penc+1
      右大腿 :y腿 :y腿r :yx腿 :yx腿r
      make :heading=:r :penx=:x :peny=:y :penc=:penc+1
      bk 80
      rt 180
      TO 左臂 :z臂 :z臂r :z腕 :z腕r
      bk 65
      rt :z臂+:z臂r
      fd 40
      左腕 :z腕 :z腕r
      TO 右臂 :y臂 :y臂r :y腕 :y腕r
      bk 65
      rt :y臂+:y臂r
      fd 40
      右腕 :y腕 :y腕r
      TO 左腕 :z腕 :z腕r
      make :penc=:penc+1
      rt :z腕+:z腕r
      fd 30
      TO 右腕 :y腕 :y腕r
      make :penc=:penc+1
      rt :y腕+:y腕r
      fd 30
      TO 左大腿 :z腿 :z腿r :zx腿 :zx腿r
      rt :z腿+:z腿r
      fd 50
      左小腿 :zx腿 :zx腿r
      TO 右大腿 :y腿 :y腿r :yx腿 :yx腿r
      rt :y腿+:y腿r
      fd 50
      右小腿 :yx腿 :yx腿r
      TO 左小腿 :zx腿 :zx腿r
      make :penc=:penc+2
      rt :zx腿+:zx腿r
      fd 50
      TO 右小腿 :yx腿 :yx腿r
      make :penc=:penc+2
      rt :yx腿+:yx腿r
      fd 50
      to 动 :x :y :r :z臂r :y臂r :z腕r :y腕r :z腿r :y腿r :zx腿r :yx腿r
      头 :pen0 :pen1 :r :pen2 :z臂r :pen3 :y臂r :pen4 :z腕r :pen5 :y腕r :pen6 :z腿r :pen7 :y腿r :pen8 :zx腿r :pen9 :yx腿r
      make :pen0=:pen0+:x :pen1=:pen1+:y :pen2=:pen2+:z臂r :pen3=:pen3+:y臂r :pen4=:pen4+:z腕r
      make :pen5=:pen5+:y腕r :pen6=:pen6+:z腿r :pen7=:pen7+:y腿r :pen8=:pen8+:zx腿r :pen9=:pen9+:yx腿r
      TO MAIN
      //text 32 0 15 宋体 同志们好!
      make :pen0=0 :pen1=0 :pen2=0 :pen3=0 :pen4=0 :pen5=0 :pen6=0 :pen7=0 :pen8=0 :pen9=0 :PENw=4 :PENA=230
      MEMUSE
      WHILE
      动 1 0 1 10 -10 -5 5 0 -10 0 10
      MEMSEE
      WAIT 100
      动 0 0 0 10 -10 -5 5 -10 0 10 0
      MEMSEE
      WAIT 100
      动 0 0 0 10 -10 -5 5 0 10 0 -10
      MEMSEE
      //text 32 0 15 宋体  同志们辛苦了!
      WAIT 100
      动 -1 0 0 10 -10 -5 5 10 0 -10 0
      MEMSEE
      text 32 0 15 宋体  同志们好!
      WAIT 100
      IF :penx>500
      make :penx=-500
      ]
      IF :heading>30
      make :heading=25
      ]
      ]


      24楼2017-02-16 00:53
      回复
        TO 坐标轴 :a :x :y :x数 :y数 :kx :ky :p
        //:a缩放比例:x :y标注线密度:x数 :y数数字标注的密度 :k网格线的密度
        //:p PI相关(p取值 0为无PI 1为x轴PI相关 2为y轴PI相关 3为全部PI相关)
        hm
        make :penx=-1500 :penw=2
        setxy 1500 0
        make :penx=0 :peny=-750
        setxy 0 750
        hm
        for ::I :a*:x 1500
        make :penx=::I
        fd 6
        bk 6
        ]:a*:x
        for ::I :a*:x*(-1) -1500
        make :penx=::I
        fd 6
        bk 6
        ]:a*:x*(-1)
        hm
        rt 90
        for ::I :a*:y 750
        make :peny=::I
        fd 6
        bk 6
        ]:a*:y
        for ::I :a*:y*(-1) -750
        make :peny=::I
        fd 6
        bk 6
        ]:a*:y*(-1)
        hm
        make :peny=-7
        //↓▼↓▼↓▼↓▼↓▼↓▼↓PI相关有所不同▼↓▼↓▼↓▼↓▼↓▼↓▼
        for ::I :a*:x数 1500
        make :penx=::I-5
        IF OR :p=1 :p=3
        text 14 0 15 宋体 {(round(1000*(::I/:a)/PI))/1000}π
        ]
        elif 1=1
        text 14 0 15 宋体 {::I/:a}
        ]
        ]:a*:x数
        for ::I :a*:x数*(-1) -1500
        make :penx=::I-6
        IF OR :p=1 :p=3
        text 14 0 15 宋体 {(round(1000*(::I/:a)/PI))/1000}π
        ]
        elif 1=1
        text 14 0 15 宋体 {::I/:a}
        ]
        ]:a*:x数*(-1)
        make :penx=6
        for ::I :a*:y数 750
        make :peny=::I+8
        IF OR :p=2 :p=3
        text 14 0 15 宋体 {(round(1000*(::I/:a)/PI))/1000}π
        ]
        elif 1=1
        text 14 0 15 宋体 {::I/:a}
        ]
        ]:a*:y数
        for ::I :a*:y数*(-1) -750
        make :peny=::I+8
        IF OR :p=2 :p=3
        text 14 0 15 宋体 {(round(1000*(::I/:a)/PI))/1000}π
        ]
        elif 1=1
        text 14 0 15 宋体 {::I/:a}
        ]
        ]:a*:y数*(-1)
        //↑▲↑▲↑▲↑▲↑▲↑▲PI相关有所不同↑▲↑▲↑▲↑▲↑▲↑▲↑▲↑▲
        hm
        make :peny=-7
        text 14 0 15 宋体 O
        make :penw=1 :pena=200
        hm
        make :peny=-750
        for ::I :a*:kx 1500
        make :penx=::I
        setxy :penx 750
        make :peny=-750
        ]:a*:kx
        for ::I :a*:kx*(-1) -1500
        make :penx=::I
        setxy :penx 750
        make :peny=-750
        ]:a*:kx*(-1)
        make :penx=-1500
        for ::I :a*:ky 750
        make :peny=::I
        setxy 1500 :peny
        make :penx=-1500
        ]:a*:ky
        for ::I :a*:ky*(-1) -750
        make :peny=::I
        setxy 1500 :peny
        make :penx=-1500
        ]:a*:ky*(-1)
        make :pena=255
        hm
        TO 正弦图像 :x :y :z :k :a :b :j
        //:x :y :z 置坐标旋转:k值域 :a缩放,:j精度(步长越小越精确):b为y轴方向的放大倍数
        make :penx=((-1)*:b*(sin(((-1)*:k)))*(sin(deg(:z)))-:k*(cos(deg(:z)))+:x)*:a
        make :peny=(:b*(sin(((-1)*:k)))*(cos(deg(:z)))-:k*(sin(deg(:z)))+:y)*:a
        FOR ::j ((-1)*:k) :k
        setxy ((-1)*:b*(sin(::j))*(sin(deg(:z)))+::j*(cos(deg(:z)))+:x)*:a (:b*(sin(::j))*(cos(deg(:z)))+::j*(sin(deg(:z)))+:y)*:a
        ]:j
        TO 余弦图像 :x :y :z :k :a :b :j
        //:x :y :z 置坐标旋转:k值域 :a缩放,:j精度(步长越小越精确):b为y轴方向的放大倍数
        make :penx=((-1)*:b*(cos(((-1)*:k)))*(sin(deg(:z)))-:k*(cos(deg(:z)))+:x)*:a
        make :peny=(:b*(cos(((-1)*:k)))*(cos(deg(:z)))-:k*(sin(deg(:z)))+:y)*:a
        FOR ::j ((-1)*:k) :k
        setxy ((-1)*:b*(cos(::j))*(sin(deg(:z)))+::j*(cos(deg(:z)))+:x)*:a (:b*(cos(::j))*(cos(deg(:z)))+::j*(sin(deg(:z)))+:y)*:a
        ]:j
        TO 正切图像 :x :y :z :k :a :b :j
        //:x :y :z 置坐标旋转:k值域 :a缩放,:j精度(步长越小越精确):b为y轴方向的放大倍数
        if tan(:k)>:a*500
        make :k=:k-:j
        ]
        make :penx=((-1)*:b*(tan(((-1)*:k)))*(sin(deg(:z)))-:k*(cos(deg(:z)))+:x)*:a
        make :peny=(:b*(tan(((-1)*:k)))*(cos(deg(:z)))-:k*(sin(deg(:z)))+:y)*:a
        FOR ::j ((-1)*:k) :k
        if tan(::j)>tan(::j+:j)
        make :PENx=((-1)*:b*(tan(::j+:j))*(sin(deg(:z)))+::j*(cos(deg(:z)))+:x)*:a :PENy=(:b*(tan(::j+:j))*(cos(deg(:z)))+::j*(sin(deg(:z)))+:y)*:a
        ]
        if tan(::j)<tan(::j+:j)
        setxy ((-1)*:b*(tan(::j))*(sin(deg(:z)))+::j*(cos(deg(:z)))+:x)*:a (:b*(tan(::j))*(cos(deg(:z)))+::j*(sin(deg(:z)))+:y)*:a
        ]
        ]:j
        //fplot /zoom 30 30 /plot x sin(x) /plot x 1/sin(x+pi/6) /plot x sin(x+2*pi/6)
        TO MAIN
        //text 32 0 15 宋体 同志们好!
        正切图像 0 0 0 10 80 1 0.01
        正弦图像 0 0 0 10 80 1 0.01
        余弦图像 0 0 0 10 80 1 0.01
        //make x_x (X-0x)*cz-(Y-Oy)*sz+Ox
        //make y_y (X-0x)*sz+(Y-Oy)*cz+Oy
        坐标轴 80 0.5*PI 1 0.5*PI 1 0.5*PI 1 1


        25楼2017-02-17 00:15
        收起回复

          to 极坐标转参数坐标放大置坐标旋转 :a :x :y :z :xx :yy
          setxy :a*(:yy*(sin(:xx))*(cos(deg(:z)))-:yy*(cos(:xx))*(sin(deg(:z))))+:x :a*(:yy*(sin(:xx))*(sin(deg(:z)))+:yy*(cos(:xx))*(cos(deg(:z))))+:y
          TO 极坐标转参数初始放大置坐标旋转 :a :x :y :z :xx :yy
          make :penx=:a*(:yy*(sin(:xx))*(cos(deg(:z)))-:yy*(cos(:xx))*(sin(deg(:z))))+:x :peny=:a*(:yy*(sin(:xx))*(sin(deg(:z)))+:yy*(cos(:xx))*(cos(deg(:z))))+:y
          TO 心形 :a :x :y :z
          极坐标转参数初始放大置坐标旋转 :a :x :y :z 0 1
          for ::i 0 2*PI
          make :penc=rand(15)+1
          极坐标转参数坐标放大置坐标旋转 :a :x :y :z ::i 1-sin(::i)
          ]0.1
          TO 心形1 :a :x :y :z
          极坐标转参数初始放大置坐标旋转 :a :x :y :z 0 sin(0)*((abs(cos(0)))^(1/2))/(sin(0)+7/5)-2*sin(0)+2
          for ::i 0 2*PI
          make :penc=rand(15)+1
          极坐标转参数坐标放大置坐标旋转 :a :x :y :z ::i sin(::i)*((abs(cos(::i)))^(1/2))/(sin(::i)+7/5)-2*sin(::i)+2
          ]0.1
          TO MAIN
          MEMUSE
          while
          心形 50+10*rand(1) 0 0 -90
          心形1 50+10*rand(1) 0 0 -90
          WAIT 500
          MEMSEE
          ]
          MEMOUT


          26楼2017-02-22 12:19
          收起回复
            TO 放大置坐标旋转 :a :x :y :z :xx :yy
            setxy :a*(:xx*(cos(deg(:z)))-:yy*(sin(deg(:z))))+:x :a*(:xx*(sin(deg(:z)))+:yy*(cos(deg(:z))))+:y
            TO 初始放大置坐标旋转 :a :x :y :z :xx :yy
            make :penx=:a*(:xx*(cos(deg(:z)))-:yy*(sin(deg(:z))))+:x :peny=:a*(:xx*(sin(deg(:z)))+:yy*(cos(deg(:z))))+:y
            /*
            上面的两个函数是把参数方程的放大,旋转,置坐标,放在一起
            比如你要画y=x^2
            就先定一个值域x∈(-k,k)每一个点就是(x,x^2)
            TO 抛物线y=x^2 :a :x :y :z :k
            //上面的参数:a :x :y :z都照抄上(用来(:a)放大(:z)旋转置坐标),后面的:k就是值域
            初始放大置坐标旋转 :a :x :y :z :k*(-1) :k^2
            //上面是初始位置先把起点坐标置到(-k,k^2)因为-k平方等于k^2所以就直接写:k^2(一定要注意符号是不是有影响)
            FOR ::i :k*(-1) :k
            放大置坐标旋转 :a :x :y :z ::i ::i^2
            ]0.1
            就这样一个抛物线的图像就写好了
            如果是想画y=x^3就把上面的 :k^2改成((-1)*:k)^3 把下面的::i^2改成::i^3就可以了
            这几乎是万能的格式
            但是要注意!无穷点(就是除以0的情况)要用IF来判断要跳过无穷点
            上面的正切图像已经有先例这里就不介绍了
            这里所有的置坐标都是在数学图像外部的
            是相对原点移动多少像素,
            如果要放在数学函数内部,就要
            把 '初始放大置坐标旋转'跟'放大置坐标旋转'里的+:y跟+:x项替换成+:y*:a跟+:x*:a
            按ctrl+h然后全部替换,
            如果函数内外都要置坐标,就再加两个参数(+:xxx +:yyy)不乘以:a即可
            */


            28楼2017-02-22 18:15
            回复
              TO 费马螺线 :a :x :y :z :k
              极坐标转参数初始放大置坐标旋转 :a :x :y :z 0 0
              for ::j 0 :k
              make :penc=rand(15)+1
              极坐标转参数坐标放大置坐标旋转 :a :x :y :z ::j sqrt(::j)
              ]1
              极坐标转参数初始放大置坐标旋转 :a :x :y :z 0 0
              for ::j 0 :k
              make :penc=rand(15)+1
              极坐标转参数坐标放大置坐标旋转 :a :x :y :z ::j (-1)*sqrt(::j)
              ]1
              TO 阿基米德螺线 :a :x :y :z :c :b :k
              极坐标转参数初始放大置坐标旋转 :a :x :y :z 0 0
              for ::j 0 :k
              make :penc=rand(15)+1
              极坐标转参数坐标放大置坐标旋转 :a :x :y :z ::j :c+:b*::j
              ]1
              极坐标转参数初始放大置坐标旋转 :a :x :y :z 0 0
              for ::j 0 :k
              make :penc=rand(15)+1
              极坐标转参数坐标放大置坐标旋转 :a :x :y :z ::j (-1)*(:c+:b*::j)
              ]1
              TO MAIN
              MEMUSE
              FOR ::i 0 3600
              费马螺线 20 -150 0 ::i 10*PI
              阿基米德螺线 10 100 0 ::i 0 0.3 10*PI
              MEMSEE
              ]


              29楼2017-02-23 16:45
              收起回复

                本来是要搞光点的效果的,没相到是火焰的效果
                TO 随机光点 :个数 :范围 :形状 :x :y :n :w
                make :x=:penx :y=:peny :n=:pena :pena=50 :w=:penw
                IF (:范围/1.4)<99
                make :penw=(:范围)/1.4
                ]
                elif 1=1
                make :penw=99
                ]
                FOR ::i 1 :个数
                make :penx=:x :peny=:y
                rt 79
                fd rand(:范围)
                //oval 3 3 0
                ]
                make :penx=:x :peny=:y :pena=:n :penw=:w
                to 极坐标转参数坐标放大置坐标旋转 :a :x :y :z :xx :yy
                make :penx=:a*(:yy*(sin(:xx))*(cos(deg(:z)))-:yy*(cos(:xx))*(sin(deg(:z))))+:x :peny=:a*(:yy*(sin(:xx))*(sin(deg(:z)))+:yy*(cos(:xx))*(cos(deg(:z))))+:y
                随机光点 3 :a/3 0 0 0 0 0
                TO 极坐标转参数初始放大置坐标旋转 :a :x :y :z :xx :yy
                make :penx=:a*(:yy*(sin(:xx))*(cos(deg(:z)))-:yy*(cos(:xx))*(sin(deg(:z))))+:x :peny=:a*(:yy*(sin(:xx))*(sin(deg(:z)))+:yy*(cos(:xx))*(cos(deg(:z))))+:y
                TO 心形 :a :x :y :z
                极坐标转参数初始放大置坐标旋转 :a :x :y :z 0 1
                for ::i 0 2*PI
                make :penc=rand(15)+1
                极坐标转参数坐标放大置坐标旋转 :a :x :y :z ::i 1-sin(::i)
                ]0.1
                TO 心形1 :a :x :y :z
                极坐标转参数初始放大置坐标旋转 :a :x :y :z 1.7 sin(1.7)*((abs(cos(1.7)))^(1/2))/(sin(1.7)+7/5)-2*sin(1.7)+2
                for ::i 1.63 7
                //make :penc=rand(15)+1
                极坐标转参数坐标放大置坐标旋转 :a :x :y :z ::i sin(::i)*((abs(cos(::i)))^(1/2))/(sin(::i)+7/5)-2*sin(::i)+2
                ]0.01
                TO MAIN
                make :penc=rand(15)+1
                MEMUSE
                WHILE
                心形1 50 0 0 -90
                心形1 90 0 -50 -90
                MEMSEE
                ]


                30楼2017-02-25 00:33
                回复

                  TO 随机光点 :个数 :范围 :形状 :x :y :n :w :a
                  make :x=:penx :y=:peny :n=:pena :pena=150 :w=:penw
                  make :penc=rand(15)+1
                  make :penw=16
                  FOR ::i 1 :个数
                  make :penx=:x :peny=:y :heading=rand(360)
                  fd rand(:范围)
                  oval 8 8 0
                  ]
                  make :penx=:x :peny=:y :pena=:n :penw=:w
                  TO MAIN
                  MEMUSE
                  pu
                  make :PEN9=:HEADING :heading=:pen9+10
                  while
                  make :penx=-400 :peny=300 :PEN9=:HEADING :heading=:pen9+3
                  while :peny>(-250)
                  make :PEN9=:HEADING :heading=:pen9+3 :penx=:penx+50
                  随机光点 2 30 0 0 0 0 0 0
                  IF :penx>400
                  make :penx=-400 :peny=:peny-50
                  ]
                  ]
                  MEMSEE
                  ]


                  31楼2017-02-26 00:03
                  收起回复
                    蜂窝数据解析
                    曾经在f版上写过一个蜂窝想把它移植到clogo上来,但是因为变量太多而且原来的还有重笔.所以决定重写.
                    原蜂窝有两个参数,一半径,二层数,现在要加放大旋转置坐标,
                    还要再写一个以海龟为中心以海龟的方向为方向的蜂窝.
                    蜂窝就是三组一样的横线,一组线旋转60度的到第二组线,再旋转60度得到第三组线
                    线的层数是y=4x-1(y线层数,x蜂窝的层数)
                    设蜂窝层数为b半径为a
                    每层线的线段数目是1,2,3,~,b,b-1,b,b-1,b,~,b,~,3,2,1
                    就是前面是从1到b,中间是b跟b-1的交错后面是b到1
                    每一层的距离是sqrt(3)/2*a(二分之根号三乘以a)
                    如果从上往下画起笔点是(-a/2,(2*b-1)*a*sqrt(3)/2)
                    可以直接前进(2*b-1)*a*sqrt(3)/2右转90度后退-a/2(到达落笔点)(要记下起点位置方向,前面的动作都是抬笔状态)
                    (下面所说的层数都是线段的层数,蜂窝的层数用b来表示)
                    判断在第几层算出这一层的线段数
                    第一层画完可以直接抬笔rt 60 fd a rt 120 bk a 到达第二层的起点
                    第二年层到第三层就是抬笔 lt 60 fd a lt 120 bk a 到第三层(这明显需要分支语句来判断层数决定用rt 还是lt )
                    到达第b层时下一层的线段数目是b-1(下面是到达b+1层的起点)
                    rt 60 fd a rt 120 fd 2*a或者是lt 60 fd a lt 120 fd 2*a(b为奇数用rt b为偶数用lt )
                    b+2层是lt 60 fd a lt 120 bk a或是rt 60 fd a rt 120 bk a
                    倒数第b层到倒数b-1层rt 60 fd a rt 120 fd 2*a或者是lt 60 fd a lt 120 fd 2*a(b为奇数用rt b为偶数用lt )
                    倒数第b-1层到倒数b-2层lt 60 fd a lt 120 fd 2*a或者是rt 60 fd a rt 120 fd 2*a(b为奇数用lt b为偶数用rt )
                    rt 60 fd a rt 120 bk a跟lt 60 fd a lt 120 bk a是用在线段数加1的情况下的
                    rt 60 fd a rt 120 fd 2*a跟lt 60 fd a lt 120 fd 2*a是用在线段数减一的情况下的
                    涉及变量起点坐标方向,线层数,每一层的线段数,判断倒数第几层的中间量(看情况可以不要)画到第几层


                    32楼2017-03-26 13:19
                    收起回复