Superformula: Difference between revisions
From JSXGraph Wiki
A WASSERMANN (talk | contribs) No edit summary |
A WASSERMANN (talk | contribs) No edit summary |
||
Line 20: | Line 20: | ||
var c = b2.createElement('curve', [ | var c = b2.createElement('curve', [ | ||
function(phi){return b2.pow( | function(phi){return b2.pow( | ||
b2.pow(Math.abs(Math.cos( m.Value()*phi*0.25/a.Value() )),n2.Value())+ | b2.pow(Math.abs(Math.cos( Math.floor(m.Value())*phi*0.25/a.Value() )), Math.floor(n2.Value()))+ | ||
b2.pow(Math.abs(Math.sin( m.Value()*phi*0.25/b.Value() )),n3.Value()), | b2.pow(Math.abs(Math.sin( Math.floor(m.Value())*phi*0.25/b.Value() )), Math.floor(n3.Value())), | ||
-1/n1.Value()); }, | -1/Math.floor(n1.Value())); }, | ||
[0, 0],0, function(){return len.Value()*Math.PI;}], | [0, 0],0, function(){return len.Value()*Math.PI;}], | ||
{curveType:'polar', strokewidth:1,fillColor:'#765412',fillOpacity:0.5}); | {curveType:'polar', strokewidth:1,fillColor:'#765412',fillOpacity:0.5}); | ||
Line 39: | Line 39: | ||
var c = b2.createElement('curve', [ | var c = b2.createElement('curve', [ | ||
function(phi){return b2.pow( | function(phi){return b2.pow( | ||
b2.pow(Math.abs(Math.cos( m.Value()*phi*0.25/a.Value() )),n2.Value())+ | b2.pow(Math.abs(Math.cos( Math.floor(m.Value())*phi*0.25/a.Value() )), Math.floor(n2.Value()))+ | ||
b2.pow(Math.abs(Math.sin( m.Value()*phi*0.25/b.Value() )),n3.Value()), | b2.pow(Math.abs(Math.sin( Math.floor(m.Value())*phi*0.25/b.Value() )), Math.floor(n3.Value())), | ||
-1/n1.Value()); }, | -1/Math.floor(n1.Value())); }, | ||
[0, 0],0, function(){return len.Value()*Math.PI;}], | [0, 0],0, function(){return len.Value()*Math.PI;}], | ||
{curveType:'polar', strokewidth:1,fillColor:'#765412',fillOpacity:0.5}); | {curveType:'polar', strokewidth:1,fillColor:'#765412',fillOpacity:0.5}); |
Revision as of 15:58, 18 March 2009
The superformula is a generalization of the superellipse and was first proposed by Johan Gielis.
Gielis suggested that the formula can be used to describe many complex shapes and curves that are found in nature. Others point out that the same can be said about many formulas with a sufficient number of parameters.
In polar coordinates, with r the radius and φ the angle, the superformula is:
- [math]\displaystyle{ r\left(\phi\right) = \left[ \left| \frac{\cos\left(\frac{m\phi}{4}\right)}{a} \right| ^{n_{2}} + \left| \frac{\sin\left(\frac{m\phi}{4}\right)}{b} \right| ^{n_{3}} \right] ^{-\frac{1}{n_{1}}} }[/math]
The JavaScript code to produce this picture
var b2 = JXG.JSXGraph.initBoard('box2', {axis:true,originX: 250, originY: 250, unitX: 25, unitY: 25});
var a = b2.createElement('slider', [[1,8],[7,8],[0,1,4]],{name:'a'});
var b = b2.createElement('slider', [[1,7],[7,7],[0,1,4]],{name:'b'});
var m = b2.createElement('slider', [[1,6],[7,6],[0,4,40]],{name:'m'});
var n1 = b2.createElement('slider', [[1,5],[7,5],[0,4,20]],{name:'n_1'});
var n2 = b2.createElement('slider', [[1,4],[7,4],[0,4,20]],{name:'n_2'});
var n3 = b2.createElement('slider', [[1,3],[7,3],[0,4,20]],{name:'n_3'});
var len = b2.createElement('slider', [[1,2],[7,2],[0,2,2]],{name:'len'});
var c = b2.createElement('curve', [
function(phi){return b2.pow(
b2.pow(Math.abs(Math.cos( Math.floor(m.Value())*phi*0.25/a.Value() )), Math.floor(n2.Value()))+
b2.pow(Math.abs(Math.sin( Math.floor(m.Value())*phi*0.25/b.Value() )), Math.floor(n3.Value())),
-1/Math.floor(n1.Value())); },
[0, 0],0, function(){return len.Value()*Math.PI;}],
{curveType:'polar', strokewidth:1,fillColor:'#765412',fillOpacity:0.5});