turtle3d


海龜繪圖法 3D 版本。使用這個函式時,想像你坐在海龜上頭,移動或者轉動都是用你的觀點來指定相關數值,而不是 OpenSCAD 的座標觀點。

相關細節可以看看 實作 3D 海龜繪圖 這篇文章。

參數

  • cmd : 一個字串指令。不同的指令需要不同的引數。
    • "create" : 建立海龜資料。最簡單的指令為 turtle3d("create"),這會建立一個位於 [0, 0, 0](而單位向量為 [[1, 0, 0], [0, 1, 0], [0, 0, 1]])的海龜。你可以指定起點以及自設單位向量,例如 turtle3d("create", [0, 0, 0], [[1, 0, 0], [0, 1, 0], [0, 0, 1]])
    • "xu_move", "yu_move", "zu_move" : 這些指令都使用兩個引數:海龜資料與移動的長度(記得你坐在海龜上,用你的觀點來看的長度)。例如 "turtle3d("xu_move", turtle, 10)"
    • "xu_turn", "yu_turn", "zu_turn" : 這些指令都使用兩個引數:海龜資料與轉動的角度(記得你坐在海龜上,用你的觀點來看的長度)。例如 "turtle3d("xu_turn", turtle, 45)"
    • "pt" : 取得海龜的座標點,只需要一個引數,例如 "turtle3d("pt", turtle)"
    • "unit_vts" : 取得海龜的單位向量,只需要一個引數,例如 "turtle3d("unit_vts", turtle)"

範例

include <turtle3d.scad>;
include <hull_polyline3d.scad>;

leng = 10;
angle = 120;
thickness = 1;

t = turtle3d("create");

t2 = turtle3d("xu_move", t, leng);
hull_polyline3d(
    [turtle3d("pt", t), turtle3d("pt", t2)], 
    thickness
);

t3 = turtle3d("xu_move", turtle3d("zu_turn", t2, angle), leng);
hull_polyline3d(
    [turtle3d("pt", t2), turtle3d("pt", t3)], 
    thickness
);

t4 = turtle3d("xu_move", turtle3d("zu_turn", t3, angle), leng);
hull_polyline3d(
    [turtle3d("pt", t3), turtle3d("pt", t4)], 
    thickness
);

turtle3d

include <turtle3d.scad>;
include <hull_polyline3d.scad>;

module tree(t, leng, leng_scale1, leng_scale2, leng_limit, 
            angleZ, angleX, width) {
    if(leng > leng_limit) {
        t2 = turtle3d("xu_move", t, leng);

        hull_polyline3d(
            [turtle3d("pt", t), turtle3d("pt", t2)], 
            width);

        tree(
            turtle3d("zu_turn", t2, angleZ),
            leng * leng_scale1, leng_scale1, leng_scale2, leng_limit, 
            angleZ, angleX, 
            width);

        tree(
            turtle3d("xu_turn", t2, angleX), 
            leng * leng_scale2, leng_scale1, leng_scale2, leng_limit, 
            angleZ, angleX, 
            width);
    }    
}

leng = 100;
leng_limit = 1;
leng_scale1 = 0.4;
leng_scale2 = 0.9;
angleZ = 60;
angleX = 135;
width = 2;

t = turtle3d("create");

tree(t, leng, leng_scale1, leng_scale2, leng_limit, 
     angleZ, angleX, width);

turtle3d