Polynomial curve of constant width: Difference between revisions

From JSXGraph Wiki
No edit summary
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
The curve with support defined by
The curve with support defined by


:<math> p(\phi)= a\cdot cos(k\cdot\phi/2)+b </math>
:<math> p(\phi)= a\cdot \cos^2(k\cdot\phi/2)+b </math>


has constant width for odd values of <math>k</math>.
has constant width for odd values of <math>k</math>.
It defines the parametric curve
It defines the parametric curve


:<math> x(\phi) = p(\phi)cos(\phi) - p'sin(\phi)</math>
:<math> x(\phi) = p(\phi)\cos(\phi) - p'\sin(\phi)</math>


:<math> y(\phi) = p(\phi)sin(\phi) + p'cos(\phi)</math>
:<math> y(\phi) = p(\phi)\sin(\phi) + p'\cos(\phi)</math>


In the visualization with JSXGraph below <math>k</math> is determined  
In the visualization with JSXGraph below <math>k</math> is determined  
Line 22: Line 22:
var k = brd.create('slider',[[-1,4],[1,4],[1,1,11]], {name:'k\'', snapWidth:1});
var k = brd.create('slider',[[-1,4],[1,4],[1,1,11]], {name:'k\'', snapWidth:1});


var c = brd.create('curve',[function(phi, suspendUpdate){  
var c = brd.create('curve',[function(phi){  
                               var kk, aa, bb, p, ps, co, si;
                               var kk, aa, bb, p, ps, co, si;
                               //if (!suspendUpdate) {
                               aa = a.Value();
                                aa = a.Value();
                              bb = b.Value();
                                bb = b.Value();
                              kk = 2*k.Value()+1;
                                kk = 2*k.Value()+1;
                              //}
                               co = Math.cos(kk*phi*0.5);
                               co = Math.cos(kk*phi*0.5);
                               si = Math.sin(kk*phi*0.5);
                               si = Math.sin(kk*phi*0.5);
Line 35: Line 33:
                               return p*Math.cos(phi)-ps*Math.sin(phi);
                               return p*Math.cos(phi)-ps*Math.sin(phi);
                             },
                             },
                             function(phi, suspendUpdate){  
                             function(phi){  
                               var kk, aa, bb, p, ps, co, si;
                               var kk, aa, bb, p, ps, co, si;
                               //if (!suspendUpdate) {
                               aa = a.Value();
                                aa = a.Value();
                              bb = b.Value();
                                bb = b.Value();
                              kk = 2*k.Value()+1;
                                kk = 2*k.Value()+1;
                              //}
                               co = Math.cos(kk*phi*0.5);
                               co = Math.cos(kk*phi*0.5);
                               si = Math.sin(kk*phi*0.5);
                               si = Math.sin(kk*phi*0.5);
Line 65: Line 61:
var k = brd.create('slider',[[-1,1.4],[1,1.4],[1,1,11]], {name:'k\'', snapWidth:1});
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 c = brd.create('curve',[function(phi){  
                               var kk, aa, bb, p, ps, co, si;
                               var kk, aa, bb, p, ps, co, si;
                               //if (!suspendUpdate) {
                               aa = a.Value();
                                aa = a.Value();
                              bb = b.Value();
                                bb = b.Value();
                              kk = 2*k.Value()+1;
                                kk = 2*k.Value()+1;
                              //}
                               co = Math.cos(kk*phi*0.5);
                               co = Math.cos(kk*phi*0.5);
                               si = Math.sin(kk*phi*0.5);
                               si = Math.sin(kk*phi*0.5);
Line 78: Line 72:
                               return p*Math.cos(phi)-ps*Math.sin(phi);
                               return p*Math.cos(phi)-ps*Math.sin(phi);
                             },
                             },
                             function(phi, suspendUpdate){  
                             function(phi){  
                               var kk, aa, bb, p, ps, co, si;
                               var kk, aa, bb, p, ps, co, si;
                               //if (!suspendUpdate) {
                               aa = a.Value();
                                aa = a.Value();
                              bb = b.Value();
                                bb = b.Value();
                              kk = 2*k.Value()+1;
                                kk = 2*k.Value()+1;
                              //}
                               co = Math.cos(kk*phi*0.5);
                               co = Math.cos(kk*phi*0.5);
                               si = Math.sin(kk*phi*0.5);
                               si = Math.sin(kk*phi*0.5);

Latest revision as of 20:51, 23 March 2021

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){ 
                              var kk, aa, bb, p, ps, co, si;
                              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){ 
                              var kk, aa, bb, p, ps, co, si;
                              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();