mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-07-31 03:50:27 +02:00
added stereographic_extrude
This commit is contained in:
@@ -44,6 +44,7 @@ Some modules may depend on other modules. For example, the `polyline2d` module d
|
||||
|
||||
- Other
|
||||
- [box_extrude](https://openhome.cc/eGossip/OpenSCAD/lib-box_extrude.html)
|
||||
- [stereographic_extrude](https://openhome.cc/eGossip/OpenSCAD/lib-stereographic_extrude.html)
|
||||
|
||||
## About dotSCAD
|
||||
|
||||
|
BIN
docs/images/lib-stereographic_extrude-1.JPG
Normal file
BIN
docs/images/lib-stereographic_extrude-1.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
31
docs/lib-stereographic_extrude.md
Normal file
31
docs/lib-stereographic_extrude.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# stereographic_extrude
|
||||
|
||||
Takes a 2D polygon as input and extends it onto a sphere. If you light up a lamp on the north pole of the sphere, the shadow will return to the original 2D polygon. For more information, take a look at [Stereographic projection](https://en.wikipedia.org/wiki/Stereographic_projection).
|
||||
|
||||
The 2D polygon should center at the origin and you have to determine the side length of a square which can cover the 2D polygon. Because the 2D polygon will be extended onto a sphere, you can use `$fa`, `$fs` or `$fn` to controll the sphere resolution.
|
||||
|
||||
## Parameters
|
||||
|
||||
- `shadow_side_leng` : The side length of a square which can cover the 2D polygon.
|
||||
- `$fa`, `$fs`, `$fn` : Check [the sphere module](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#sphere for more details.
|
||||
|
||||
|
||||
## Examples
|
||||
|
||||
dimension = 100;
|
||||
|
||||
render() stereographic_extrude(shadow_side_leng = dimension)
|
||||
text(
|
||||
"M", size = dimension,
|
||||
valign = "center", halign = "center"
|
||||
);
|
||||
|
||||
color("black")
|
||||
text(
|
||||
"M", size = dimension,
|
||||
valign = "center", halign = "center"
|
||||
);
|
||||
|
||||

|
||||
|
||||
For more advanced examples, take a look at [my stereographic_projection collection](https://www.thingiverse.com/JustinSDK/collections/stereographic-projection).
|
35
src/stereographic_extrude.scad
Normal file
35
src/stereographic_extrude.scad
Normal file
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* stereographic_extrude.scad
|
||||
*
|
||||
* Takes a 2D polygon as input and extends it onto a sphere.
|
||||
* If you light up a lamp on the north pole of the sphere, the
|
||||
* shadow will return to the original 2D polygon. For more
|
||||
* information, take a look at [Stereographic projection](https://en.wikipedia.org/wiki/Stereographic_projection).
|
||||
*
|
||||
* @copyright Justin Lin, 2017
|
||||
* @license https://opensource.org/licenses/lgpl-3.0.html
|
||||
*
|
||||
* @see https://openhome.cc/eGossip/OpenSCAD/lib-stereographic_extrude.html
|
||||
*
|
||||
**/
|
||||
|
||||
module stereographic_extrude(shadow_side_leng) {
|
||||
half_side_length = shadow_side_leng / 2;
|
||||
outer_sphere_r = half_side_length / 3;
|
||||
a = atan(sqrt(2) * half_side_length / (2 * outer_sphere_r));
|
||||
inner_sphere_r = outer_sphere_r * sin(a);
|
||||
|
||||
intersection() {
|
||||
translate([0, 0, outer_sphere_r]) difference() {
|
||||
sphere(outer_sphere_r);
|
||||
sphere(outer_sphere_r / 2 + inner_sphere_r / 2);
|
||||
|
||||
translate([0, 0, outer_sphere_r / 2])
|
||||
linear_extrude(outer_sphere_r)
|
||||
circle(inner_sphere_r * cos(a));
|
||||
}
|
||||
|
||||
linear_extrude(outer_sphere_r * 2, scale = 0.01)
|
||||
children();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user