/ src / polyhedra / superellipsoid.scad
superellipsoid.scad
 1  /**
 2  * superellipsoid.scad
 3  *
 4  * @copyright Justin Lin, 2021
 5  * @license https://opensource.org/licenses/lgpl-3.0.html
 6  *
 7  * @see https://openhome.cc/eGossip/OpenSCAD/lib3x-superellipsoid.html
 8  *
 9  **/
10  
11  use <../__comm__/__frags.scad>
12  use <../sweep.scad>
13  
14  module superellipsoid(e, n) {
15  	function _c(w, m) = 
16  		let(cosw = cos(w))
17  			sign(cosw) * pow(abs(cosw), m);
18  		
19  	function _s(w, m) = 
20  		let(sinw = sin(w))
21  			sign(sinw) * pow(abs(sinw), m);
22  			
23  	a = 1;
24  	b = 1;
25  	c = 1;
26  
27  	a_step = 360 / __frags(1);
28  
29  	sweep([
30  		for(v = [-90:a_step:90])
31  			[
32  				for(u = 180 - a_step; u >= -180; u = u - a_step)
33  				let(
34  					x = a * _c(v, n) * _c(u, e),
35  					y = b * _c(v, n) * _s(u, e),
36  					z = c * _s(v, n)
37  				)
38  				[x, y, z]
39  			]
40  	]);
41  }