如何在 OpenSCAD 中制作弯曲的 sheet(立方体)?
How to a make a curved sheet (cube) in OpenSCAD?
如何弯曲 sheet(立方体)?我想控制 bend/curve.
的角度
例如
立方体([50,50,2]);
我可以这样做,但如果你能在#degrees 中指定 bend/curve 作为函数的参数会更好:
$fn=300;
module oval(w, h, height, center = false) {
scale([1, h/w, 1]) cylinder(h=height, r=w, center=center);
}
module curved(w,l,h) {
difference() {
oval(w,l,h);
translate([0.5,-1,-1]) color("red") oval(w,l+2,h+2);
}
}
curved(10,20,30);
您可以rotate_extrude()
一个带有参数角度的矩形。这需要 openscad 版本 2016.xx 或更高版本,请参阅 documentation。
需要安装开发快照,见download openscad
$fn= 360;
width = 10; // width of rectangle
height = 2; // height of rectangle
r = 50; // radius of the curve
a = 30; // angle of the curve
rotate_extrude(angle = a) translate([r, 0, 0]) square(size = [height, width], center = true);
看起来像这样:
曲线由半径和角度定义。我认为更现实的是,在此草图中使用长度或 dh 等其他尺寸
并计算半径和角度
$fn= 360;
w = 10; // width of rectangle
h = 2; // height of rectangle
l = 25; // length of chord of the curve
dh = 2; // delta height of the curve
module curve(width, height, length, dh) {
// calculate radius and angle
r = ((length/2)*(length/2) - dh*dh)/(2*dh);
a = asin((length/2)/r);
rotate_extrude(angle = a) translate([r, 0, 0]) square(size = [height, width], center = true);
}
curve(w, h, l, dh);
编辑 2019 年 9 月 30 日:
考虑到 Cfreitas 的评论,另外将生成的形状移动到原点,因此可以在坐标轴上看到尺寸
$fn= 360;
w = 10; // width of rectangle
h = 2; // height of rectangle
l = 30; // length of chord of the curve
dh = 4; // delta height of the curve
module curve(width, height, length, dh) {
r = (pow(length/2, 2) + pow(dh, 2))/(2*dh);
a = 2*asin((length/2)/r);
translate([-(r -dh), 0, -width/2]) rotate([0, 0, -a/2]) rotate_extrude(angle = a) translate([r, 0, 0]) square(size = [height, width], center = true);
}
curve(w, h, l, dh);
结果:
编辑 2020 年 9 月 19 日:上次编辑中有错字:在第一个 'translate' 中,应使用本地 'width' 而不是 'w'。在上面的代码中更正了它。
使用 a_manthey_67 使用的概念,更正数学并居中(将弦与 y 轴对齐)结果对象:
module bentCube(width, height, length, dh) {
// calculate radius and angle
r = (length*length + 4*dh*dh)/(8*dh);
a = 2*asin(length/(2*r));
translate([-r,0,0]) rotate([0,0,-a/2])
rotate_extrude(angle = a) translate([r, 0, 0]) square(size = [height, width], center = true);}
或者,如果您只想要固定长度和特定弯曲角度的东西,请执行以下操作:
module curve(width, height, length, a) {
if( a > 0 ) {
r = (360 * (length/a)) / (2 * pi);
translate( [-r-height/2,0,0] )
rotate_extrude(angle = a)
translate([r, 0, 0])
square(size = [height, width], center = false);
} else {
translate( [-height/2,0,width] )
rotate( a=270, v=[1,0,0] )
linear_extrude( height = length )
square(size = [height, width], center = false);
}
}
需要if (a > 0)
语句,当弯曲角度为0(如果绘制曲面,将导致无限半径)时例外。
Animated GIF here
如何弯曲 sheet(立方体)?我想控制 bend/curve.
的角度例如
立方体([50,50,2]);
我可以这样做,但如果你能在#degrees 中指定 bend/curve 作为函数的参数会更好:
$fn=300;
module oval(w, h, height, center = false) {
scale([1, h/w, 1]) cylinder(h=height, r=w, center=center);
}
module curved(w,l,h) {
difference() {
oval(w,l,h);
translate([0.5,-1,-1]) color("red") oval(w,l+2,h+2);
}
}
curved(10,20,30);
您可以rotate_extrude()
一个带有参数角度的矩形。这需要 openscad 版本 2016.xx 或更高版本,请参阅 documentation。
需要安装开发快照,见download openscad
$fn= 360;
width = 10; // width of rectangle
height = 2; // height of rectangle
r = 50; // radius of the curve
a = 30; // angle of the curve
rotate_extrude(angle = a) translate([r, 0, 0]) square(size = [height, width], center = true);
看起来像这样:
曲线由半径和角度定义。我认为更现实的是,在此草图中使用长度或 dh 等其他尺寸
并计算半径和角度
$fn= 360;
w = 10; // width of rectangle
h = 2; // height of rectangle
l = 25; // length of chord of the curve
dh = 2; // delta height of the curve
module curve(width, height, length, dh) {
// calculate radius and angle
r = ((length/2)*(length/2) - dh*dh)/(2*dh);
a = asin((length/2)/r);
rotate_extrude(angle = a) translate([r, 0, 0]) square(size = [height, width], center = true);
}
curve(w, h, l, dh);
编辑 2019 年 9 月 30 日: 考虑到 Cfreitas 的评论,另外将生成的形状移动到原点,因此可以在坐标轴上看到尺寸
$fn= 360;
w = 10; // width of rectangle
h = 2; // height of rectangle
l = 30; // length of chord of the curve
dh = 4; // delta height of the curve
module curve(width, height, length, dh) {
r = (pow(length/2, 2) + pow(dh, 2))/(2*dh);
a = 2*asin((length/2)/r);
translate([-(r -dh), 0, -width/2]) rotate([0, 0, -a/2]) rotate_extrude(angle = a) translate([r, 0, 0]) square(size = [height, width], center = true);
}
curve(w, h, l, dh);
结果:
编辑 2020 年 9 月 19 日:上次编辑中有错字:在第一个 'translate' 中,应使用本地 'width' 而不是 'w'。在上面的代码中更正了它。
使用 a_manthey_67 使用的概念,更正数学并居中(将弦与 y 轴对齐)结果对象:
module bentCube(width, height, length, dh) {
// calculate radius and angle
r = (length*length + 4*dh*dh)/(8*dh);
a = 2*asin(length/(2*r));
translate([-r,0,0]) rotate([0,0,-a/2])
rotate_extrude(angle = a) translate([r, 0, 0]) square(size = [height, width], center = true);}
或者,如果您只想要固定长度和特定弯曲角度的东西,请执行以下操作:
module curve(width, height, length, a) {
if( a > 0 ) {
r = (360 * (length/a)) / (2 * pi);
translate( [-r-height/2,0,0] )
rotate_extrude(angle = a)
translate([r, 0, 0])
square(size = [height, width], center = false);
} else {
translate( [-height/2,0,width] )
rotate( a=270, v=[1,0,0] )
linear_extrude( height = length )
square(size = [height, width], center = false);
}
}
需要if (a > 0)
语句,当弯曲角度为0(如果绘制曲面,将导致无限半径)时例外。
Animated GIF here