我想在 Open SCAD 中在这块周围打 65 个孔,但是怎么做?

Posted

技术标签:

【中文标题】我想在 Open SCAD 中在这块周围打 65 个孔,但是怎么做?【英文标题】:I want to make 65 holes all around this piece in Open SCAD, but How to? 【发布时间】:2021-08-03 06:58:04 【问题描述】:

我想打印一个类似于洒水器的水泵小装置。我见过一个非常简单的由带孔的球制成的。我想做一个非常相似的,但我不知道如何打孔。我需要大约 65 个直径为 1 毫米的孔。

这是我的代码:

union()       

difference() resize(newsize=[60,90,20]) translate([0, 0,-9]) sphere(r=10);
resize(newsize=[58,85,19]) translate([0, 0,-9]) 

sphere(r=10);


difference() cylinder(70,12,12) ; cylinder(200, 11, 11, center = true); 

【问题讨论】:

球体上的孔应该如何分布? 【参考方案1】:

您可以通过使用斐波那契格子或黄金比例螺旋来获得相对简单且均匀的分布。 this article 很好地解释了这种分布(和其他)背后的理论。

我们使用它在球体上打出多个N 的圆柱形孔(在使用resize 使其变形之前)。

GOLDENRATIO = 1.618;

resize([60,90,20]) 
  difference() 
    sphere(10);
    sphere(9);

    N=65; // number of points to distribue
    // height angle (given as multiple of PI) until which to distribute holes.
    max_height_angle = 0.8;
    for(i=[0:N]) 
      radius = 10 - 2;
      theta = 360*i / GOLDENRATIO;  // (0..N*360°) / 1.618
      phi = acos(1 - max_height_angle*i/N);
      // translate (theta, phi, r) to cartesian coords
      xi = cos(theta)*sin(phi) * radius;
      yi = sin(theta)*sin(phi) * radius;
      zi = cos(phi) * radius;
      translate([xi,yi,zi]) rotate([0,phi,theta]) cylinder(h=2, r=0.5, $fn=12);
    
  

phi 角度(对于max_height_angle==2.0)从球体底部到顶部,而theta360°/GOLDENRATIO 的步长增加。这使得点在球体上的分布非常均匀。但是,由于我们只想在球体的下半部分有点,所以我们将max_height_angle= 设置为 0.8,因此点分布在球体的下半部分,减去赤道。

角度thetaphiradius组成一个3D极坐标系,转换为笛卡尔坐标[xi, yi, zi]

rotate 定位球体上的圆柱孔。如果您希望孔垂直于地面,您可以将其省略,并使圆柱体稍长一些。

【讨论】:

以上是关于我想在 Open SCAD 中在这块周围打 65 个孔,但是怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

在图像移动/调整大小/旋转操作中在图像周围放置一些指示符

html 网页在中在按钮单击事件下会跳出一个提示框,我想隔1秒刷新一次页面,怎么在第一次

如何在本机反应中在图像周围浮动文本

我想在DELPHI 中在本机PROGRAM FILES 文件夹下建立一个目录123

如何编辑此 SCAD 文件中的孔尺寸

在一行中在 LHS 上分配多个新变量