archimedean_spiral


取得阿基米德螺線路徑上各點與角度。點與點之間的距離近乎相等。傳回值的結構是 [[x, y], angle]

因為這個函式使用了近似求法,不建議使用小於 180 度的 init_angle。如果真的要設小於 180 度的 init_angle,建議搭配較大的 arm_distance。點之間的距 離誤差值如果要小,可以試試小一點的 point_distance

參數

  • arm_distance : 從原點往外畫條直線,在螺線上得到的兩兩成對的點,就是 arm_distance, 阿基米德螺線不管繞幾圈,這個值都會是固定的。
  • init_angle : 如果使用極座標 (r, θ),阿基米德螺線可以用 公式 r = bθ 來描述,其中 θ 是徑度。然而,為了與 OpenSCAD 使用的單位一致,這個函式會使用角度做為單位。init_angle 是螺線上第一個點的角度。
  • point_distance : 路徑上兩點之間的距離。
  • num_of_points : 路徑上總共有幾個點。
  • rt_dir : "CT_CLK" 是逆時針螺線,"CLK" 是順時針。預設值為 "CT_CLK"

範例

include <line2d.scad>;
include <polyline2d.scad>; include <archimedean_spiral.scad>; points_angles = archimedean_spiral( arm_distance = 10, init_angle = 180, point_distance = 5, num_of_points = 100 ); points = [for(pa = points_angles) pa[0]]; polyline2d(points, width = 1);

archimedean_spiral

include <archimedean_spiral.scad>;

points_angles = archimedean_spiral(
    arm_distance = 10,  
    init_angle = 180, 
    point_distance = 5,
    num_of_points = 100 
); 

for(pa = points_angles) {
    translate(pa[0]) 
        circle(2);
}

archimedean_spiral

include <archimedean_spiral.scad>;

t = "3.141592653589793238462643383279502884197169399375105820974944592307816406286";

points = archimedean_spiral(
    arm_distance = 15,
    init_angle = 450, 
    point_distance = 12, 
    num_of_points = len(t) 
); 

for(i = [0: len(points) - 1]) {
    translate(points[i][0])          
        rotate(points[i][1] + 90)  
            text(t[i], valign = "center", halign = "center");
}

archimedean_spiral