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 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);