跳到內容

OpenSCAD 使用者手冊/過小的圓形物體

來自華夏公益教科書,開放的世界中的開放書籍

使用 cylinder() 與 difference() 在物件中放置孔會導致孔過小。這是因為圓形路徑是用內接於圓的多邊形近似的。多邊形的點在圓上,但它們之間的直線在圓內。這在http://hydraraptor.blogspot.com.au/2011/02/polyholes.html中詳細討論。

雖然標準的 cylinder() 和 circle() 生成內部(內接)多邊形,但這裡有一些模組可以生成外部(外接)和中間(1/2 路徑之間)多邊形。

圓柱體

[編輯 | 編輯原始碼]
 module cylinder_outer(height,radius,fn){
   fudge = 1/cos(180/fn);
   cylinder(h=height,r=radius*fudge,$fn=fn);}
 module cylinder_mid(height,radius,fn){
   fudge = (1+1/cos(180/fn))/2;
   cylinder(h=height,r=radius*fudge,$fn=fn);}
Example of outer and mid cylinder
外部和中間圓柱體的示例
partial view
部分檢視
 //example script to show differences
 cylinder_outer(5,100,6);
 %cylinder_mid(5.5,100,6);
 cylinder(6,r=100,$fn=6);        // standard
 #cylinder(5.75,r=100,$fn=60);   // reference
 //CSG tree for this example
 group() {
   group() {
     cylinder($fn = 6, $fa = 12, $fs = 2, h = 5, r1 = 115.47, r2 = 115.47, center = false);
   }
 % group() {
     cylinder($fn = 6, $fa = 12, $fs = 2, h = 5.5, r1 = 107.735, r2 = 107.735, center = false);
   }
   cylinder($fn = 6, $fa = 12, $fs = 2, h = 6, r1 = 100, r2 = 100, center = false);
 # cylinder($fn = 60, $fa = 12, $fs = 2, h = 5.75, r1 = 100, r2 = 100, center = false);
 }

對於頂部和底部半徑不同的圓柱體

 module cone_outer(height,radius1,radius2,fn){
   fudge = 1/cos(180/fn);
   cylinder(h=height,r1=radius1*fudge,r2=radius2*fudge,$fn=fn);}
 module cone_mid(height,radius1,radius2,fn){
   fudge = (1+1/cos(180/fn))/2;
   cylinder(h=height,r1=radius1*fudge,r2=radius2*fudge,$fn=fn);}
 cone_outer(5 ,10 ,5 ,6);
 cone_mid(5 ,10 ,5 ,6);

最後不要忘記二維世界

   module circle_outer(radius,fn){
     fudge = 1/cos(180/fn);
     circle(r=radius*fudge,$fn=fn);}
   module circle_mid(radius,fn){
     fudge = (1+1/cos(180/fn))/2;
     circle(r=radius*fudge,$fn=fn);}
 circle_outer(20,6);
 circle_mid(20,6);
華夏公益教科書