“OpenSCAD 使用数学公式和基本几何创建模型”的版本间差异

本页内容
(创建页面,内容为“== 在 OpenSCAD 中进行数学计算 == 到目前为止,您已经了解到 OpenSCAD 变量在整个脚本执行过程中只能保存一个值,即分配给它们的最后一个值。您还了解到 OpenSCAD 变量的常见用途是提供模型的参数化。在这种情况下,每个参数化模型都会有一些自变量,您可以更改其值以调整该模型。这些变量通常直接赋值,如下例所示。 <sample title="" desc=""> … wheel_dia…”)
 
Neo讨论 | 贡献
无编辑摘要
第110行: 第110行:
polygon(points);
polygon(points);
</sample>
</sample>
[[文件:Profile 1 polygon.jpeg]]
[[文件:Profile 1 polygon.jpg]]
关于多边形图元的使用,您应该注意一些事项。多边形图元使用点列表作为输入。点或顶点使用 X 和 Y 坐标对表示,并按顺序提供。定义列表时,您可以从您喜欢的任何顶点开始,您可以按顺时针或逆时针顺序遍历它们。在上面的示例中,第一个顶点位于原点 (0,0),而其余顶点按顺时针方向列出。所有顶点(X 和 Y 坐标对)p0、p1、...、p4 都放置在名为 points 的列表中。然后将此列表传递给多边形命令以创建相应的对象。
关于polygon的使用,您应该注意一些事项。polygon使用点列表作为输入。点或顶点使用 X 和 Y 坐标对表示,并按顺序提供。定义列表时,您可以从您喜欢的任何顶点开始,您可以按顺时针或逆时针顺序遍历它们。在上面的示例中,第一个顶点位于原点 (0,0),而其余顶点按顺时针方向列出。所有顶点(X 和 Y 坐标对)p0、p1、...、p4 都放置在名为 points 的列表中。然后将此列表传递给多边形命令以创建相应的对象。


无论变量只有一个值还是值列表,您都可以使用 echo 命令在控制台上打印其内容。
无论变量只有一个值还是值列表,您都可以使用 echo 命令在控制台上打印其内容。

2022年7月30日 (六) 10:36的版本

在 OpenSCAD 中进行数学计算

到目前为止,您已经了解到 OpenSCAD 变量在整个脚本执行过程中只能保存一个值,即分配给它们的最后一个值。您还了解到 OpenSCAD 变量的常见用途是提供模型的参数化。在这种情况下,每个参数化模型都会有一些自变量,您可以更改其值以调整该模型。这些变量通常直接赋值,如下例所示。


示例

…
wheel_diameter = 12;
…
body_length = 70;
…
wheelbase = 40;
…
// etc.
…

您已经看过几次但没有明确提及的另一件事是使用脚本中的变量和硬编码值执行数学运算的能力。这方面的一个例子是实现汽车的轴距。回想一下,汽车的车轴和车轮沿 X 轴平移并远离原点轴距值的一半。由于在这种情况下,轴距是一个已经在脚本中定义的变量,您可以通过将轴距变量除以 2 来计算单位数量。对轨道变量进行了类似的操作,以放置汽车的左右轮。回想一下,左轮和右轮沿 Y 轴平移并远离原点,距离轨道值的一半。


axle_with_wheelset.scad

use <vehicle_parts.scad>
$fa = 1;
$fs = 0.4;

wheelbase = 40;
track = 35;

translate([-wheelbase/2, track/2])
    simple_wheel();
translate([-wheelbase/2, -track/2])
    simple_wheel();
translate([-wheelbase/2, 0, 0])
    axle(track=track);

Axle with wheelset.jpg

加法、减法、乘法和除法在 OpenSCAD 中用符号 +、-、* 和 / 表示。除了这些基本运算之外,还有一些额外的数学运算在构建更复杂的模型时很有用。这方面的两个示例是用于定义汽车圆形图案的余弦和正弦函数。具体来说,您使用 cosine 和 sine 函数将每辆车的极坐标转换为笛卡尔坐标,以便将其平移到适当的位置。cheatsheet里面找到其他函数[1]


circular_pattern_of_cars.scad

…
r = 140; // pattern radius
n = 12; // number of cars
step = 360/n;
for (i=[0:step:359]) {
    angle = i;
    dx = r*cos(angle);
    dy = r*sin(angle);
    translate([dx,dy,0])
        rotate([0,0,angle])
        car();
}
…

Circular pattern of cars.jpg 在上述情况下,您不仅在脚本中使用了可用的数学运算,而且还定义了两个附加变量 dx 和 dy 来存储计算结果,以提高脚本的可读性。这也可以在您的汽车模型中完成。以以下车型为例。

car.scad

use <vehicle_parts.scad>
$fa = 1;
$fs = 0.4;

wheelbase = 40;
track = 35;

// Body
body();
// Front left wheel 
translate([-wheelbase/2,-track/2,0])
    simple_wheel();
 // Front right wheel 
translate([-wheelbase/2,track/2,0])
    simple_wheel();
// Rear left wheel 
translate([wheelbase/2,-track/2,0])
    simple_wheel();
// Rear right wheel 
translate([wheelbase/2,track/2,0])
    simple_wheel();
// Front axle 
translate([-wheelbase/2,0,0])
    axle(track=track); 
// Rear axle 
translate([wheelbase/2,0,0])
    axle(track=track);

在上述模型中,数学运算用于计算每个车轮和车轴沿 X 和 Y 轴所需的平移量。

Car model.jpg


使用多边形图元创建任何 2D 对象

除了圆形和方形 2D 基元之外,还有另一个基元可以让您设计几乎任何 2D 对象。这是多边形图元,它允许您通过提供包含其点坐标的列表来定义 2D 对象。假设您要设计以下 2D 零件。

Profile 1 drawing.jpg

在不使用多边形图元的情况下设计该零件的一种方法是从与该零件的外部尺寸相对应的正方形开始,然后从其右上角减去正确旋转和平移的正方形。计算适当的旋转角度和平移量将是一项耗时的任务。此外,不可能对更复杂的对象遵循这种策略。相反,您可以通过以下方式使用多边形图元创建此对象。


profile_1_polygon.scad

p0 = [0, 0];
p1 = [0, 30];
p2 = [15, 30];
p3 = [35, 20];
p4 = [35, 0];
points = [p0, p1, p2, p3, p4];
polygon(points);

Profile 1 polygon.jpg 关于polygon的使用,您应该注意一些事项。polygon使用点列表作为输入。点或顶点使用 X 和 Y 坐标对表示,并按顺序提供。定义列表时,您可以从您喜欢的任何顶点开始,您可以按顺时针或逆时针顺序遍历它们。在上面的示例中,第一个顶点位于原点 (0,0),而其余顶点按顺时针方向列出。所有顶点(X 和 Y 坐标对)p0、p1、...、p4 都放置在名为 points 的列表中。然后将此列表传递给多边形命令以创建相应的对象。

无论变量只有一个值还是值列表,您都可以使用 echo 命令在控制台上打印其内容。

此页面最后编辑于2022年7月30日 (星期六) 10:36。