Polynomial curve of constant width

From JSXGraph Wiki
Revision as of 09:59, 7 June 2011 by A WASSERMANN (talk | contribs)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

The curve with support defined by

[math]\displaystyle{ p(\phi)= a\cdot cos^2(k\cdot\phi/2)+b }[/math]

has constant width for odd values of [math]\displaystyle{ k }[/math]. It defines the parametric curve

[math]\displaystyle{ x(\phi) = p(\phi)cos(\phi) - p'sin(\phi) }[/math]
[math]\displaystyle{ y(\phi) = p(\phi)sin(\phi) + p'cos(\phi) }[/math]

In the visualization with JSXGraph below [math]\displaystyle{ k }[/math] is determined

[math]\displaystyle{ k = 2k'+1. }[/math]


References

The underlying JavaScript code

var brd = JXG.JSXGraph.initBoard('jxgbox',{boundingbox:[-8,8,8,-8], keepaspectratio:true});
brd.suspendUpdate();
var a = brd.create('slider',[[-1,1.8],[1,1.8],[-5,0.20,5]], {name:'a'});
var b = brd.create('slider',[[-1,1.6],[1,1.6],[-5,1.15,10]], {name:'b'});
var k = brd.create('slider',[[-1,1.4],[1,1.4],[1,1,11]], {name:'k\'', snapWidth:1});

var c = brd.create('curve',[function(phi, suspendUpdate){ 
                              var kk, aa, bb, p, ps, co, si;
                              //if (!suspendUpdate) {
                                aa = a.Value();
                                bb = b.Value();
                                kk = 2*k.Value()+1;
                              //}
                              co = Math.cos(kk*phi*0.5);
                              si = Math.sin(kk*phi*0.5);
                              p  =  aa*co*co+bb;
                              ps = -aa*kk*co*si;
                              return p*Math.cos(phi)-ps*Math.sin(phi);
                             },
                             function(phi, suspendUpdate){ 
                              var kk, aa, bb, p, ps, co, si;
                              //if (!suspendUpdate) {
                                aa = a.Value();
                                bb = b.Value();
                                kk = 2*k.Value()+1;
                              //}
                              co = Math.cos(kk*phi*0.5);
                              si = Math.sin(kk*phi*0.5);
                              p  =  aa*co*co+bb;
                              ps = -aa*kk*co*si;
                              return p*Math.sin(phi)+ps*Math.cos(phi);
                             },
                             0, Math.PI*2], {strokeWidth:10, strokeColor:'#ad5544'});

brd.unsuspendUpdate();