turtle2d


在 xy 平面上移動的海龜繪圖法。可用來取得海龜目前位置的 [x, y]angle

參數

  • cmd : 一個字串指令。不同的指令會使用不同個數的引數。
    • "create" : 建立海龜資料,這個指令需要 xyangle 三個引數。例如 turtle2d("create", 5, 10, 30) 建立的海龜會位於 [0, 0],頭朝向 30 度。
    • "x" : 設定或取得海龜的 x 座標。如果是 turtle2d("x", turtle, 20) 這樣的指令,會設定 x 座標。沒有指定數值的話,會取得 x 座標。
    • "y" : 設定或取得海龜的 y 座標。如果是 turtle2d("y", turtle, 20) 這樣的指令,會設定 y 座標。沒有指定數值的話,會取得 y 座標。
    • "angle" : 設定或取得海龜的朝向角度。如果是 turtle2d("angle", turtle, 45) 這樣的指令,會設定角度為 45。沒有指定數值的話,會取得角度。
    • "pt" : 設定或取得海龜的 [x, y] 座標,。如果是 turtle2d("pt", turtle, [10, 20]) 這樣的指令,會設定座標為 [10, 20]。沒有指定座標的話,會取得座標。
    • "forward" : 讓海龜前進,這指令需要兩個引數,第一個引數是海龜資料,第二個引數是前進長度,例如 turtle2d("forward", turtle, 100)
    • "turn" : 讓海龜轉向,這指令需要兩個引數,第一個引數是海龜資料,第二個引數是轉動角度 turtle2d("turn", turtle, 180)

範例

include <line2d.scad>;
include <turtle2d.scad>;

module turtle_spiral(t_before, times, side_leng, angle, width) {
    $fn = 24;
    if(times != 0) {
        t_after_tr = turtle2d("turn", t_before, angle);
        t_after_fd = turtle2d("forward", t_after_tr, side_leng);

        line2d(
            turtle2d("pt", t_before),
            turtle2d("pt", t_after_fd),
            width,
            p1Style = "CAP_ROUND", 
            p2Style =  "CAP_ROUND"
        );

        turtle_spiral(t_after_fd, times - 1, side_leng, angle, width);
    }

}

side_leng = 10;
angle = 144;
width = 1;
times = 5;

turtle_spiral(turtle2d("create", 0, 0, 0), times, side_leng, angle, width);

turtle2d

include <line2d.scad>;
include <turtle2d.scad>;

module turtle_spiral(t_before, side_leng, d_step, min_leng, angle, width) {
    $fn = 24;
    if(side_leng > min_leng) {
        t_after = turtle2d("forward", turtle2d("turn", t_before, angle), side_leng);

        line2d(
            turtle2d("pt", t_before),
            turtle2d("pt", t_after),
            width,
            p1Style = "CAP_ROUND", 
            p2Style =  "CAP_ROUND"
        );


        turtle_spiral(t_after, side_leng - d_step, d_step, min_leng, angle, width);
    }

}

side_leng = 50;
d_step = 1;
min_leng = 1;
angle = 90;
width = 1;

turtle_spiral(
    turtle2d("create", 0, 0, 0), 
    side_leng, 
    d_step, 
    min_leng, 
    angle, 
    width
);

turtle2d