Reuleaux pentagon: Difference between revisions

From JSXGraph Wiki
No edit summary
No edit summary
Line 11: Line 11:
var brd = JXG.JSXGraph.initBoard('jxgbox',{boundingbox:[-5,5,5,-5]});
var brd = JXG.JSXGraph.initBoard('jxgbox',{boundingbox:[-5,5,5,-5]});
brd.suspendUpdate();
brd.suspendUpdate();
var pi2 = 2.0*Math.PI;


// Pentagon
// Pentagon
Line 16: Line 18:
var B = brd.create('point',[2,-2]);
var B = brd.create('point',[2,-2]);
var pol = brd.create('regularpolygon',[A,B,5], {withLines:false, fillColor:'none', highlightFillColor:'none'});
var pol = brd.create('regularpolygon',[A,B,5], {withLines:false, fillColor:'none', highlightFillColor:'none'});


var reuleauxPentagon = brd.create('curve',[
var reuleauxPentagon = brd.create('curve',[
       function(t) {
       function(t) {
         var pi2_5 = 2*Math.PI/5;
         var pi2_5 = pi2/5;
         var p = pol.vertices;
         var p = pol.vertices;
         var d = p[0].Dist(p[2]);
         var d = p[0].Dist(p[2]);
         var t1 = (t%(2*Math.PI) + 2*Math.PI) %(2*Math.PI);
         var t1 = (t%pi2 + pi2) % pi2;
         var n = Math.floor(t1 / pi2_5)%5;
         var n = Math.floor(t1 / pi2_5)%5;
         if (isNaN(n)) return n;
         if (isNaN(n)) return n;
         var beta = JXG.Math.Geometry.rad([p[n].X()+1,p[n].Y()],p[n],p[(n+2)%5]);
         var beta = JXG.Math.Geometry.rad([p[n].X()+1,p[n].Y()],p[n],p[(n+2)%5]);
         t1 -= n*pi2_5;
         t1 -= n*pi2_5;
         t1*=0.5;
         t1 *=0.5;
         t1 += beta;
         t1 += beta;
         return p[n].X()+d*Math.cos(t1);
         return p[n].X()+d*Math.cos(t1);
       },
       },
       function(t) {
       function(t) {
         var pi2_5 = 2*Math.PI/5;
         var pi2_5 = pi2/5;
         var p = pol.vertices;
         var p = pol.vertices;
         var d = p[0].Dist(p[2]);
         var d = p[0].Dist(p[2]);
         var t1 = (t%(2*Math.PI) + 2*Math.PI) %(2*Math.PI);
         var t1 = (t%pi2 + pi2) % pi2;
         var n = Math.floor(t1 / pi2_5)%5;
         var n = Math.floor(t1 / pi2_5)%5;
         if (isNaN(n)) return n;
         if (isNaN(n)) return n;
Line 44: Line 47:
         return p[n].Y()+d*Math.sin(t1);
         return p[n].Y()+d*Math.sin(t1);
       },
       },
       0, 2*Math.PI],
       0, pi2],
       {color:'#093083', highlightFillColor:'#093083'});
       {color:'#093083', highlightFillColor:'#093083'});
        
        
Line 57: Line 60:
var reuleauxTriangle = brd.create('curve',[
var reuleauxTriangle = brd.create('curve',[
       function(t) {
       function(t) {
         var pi2_3 = 2*Math.PI/3;
         var pi2_3 = pi2/3;
         var p = pol3.vertices;
         var p = pol3.vertices;
         var d = p[0].Dist(p[1]);
         var d = p[0].Dist(p[1]);
         var t1 = (t%(2*Math.PI) + 2*Math.PI) %(2*Math.PI);
         var t1 = (t%(2*Math.PI) + pi2) % pi2;
         var n = Math.floor(t1 / pi2_3)%3;
         var n = Math.floor(t1 / pi2_3)%3;
         if (isNaN(n)) return n;
         if (isNaN(n)) return n;
Line 70: Line 73:
       },
       },
       function(t) {
       function(t) {
         var pi2_3 = 2*Math.PI/3;
         var pi2_3 = pi2/3;
         var p = pol3.vertices;
         var p = pol3.vertices;
         var d = p[0].Dist(p[1]);
         var d = p[0].Dist(p[1]);
         var t1 = (t%(2*Math.PI) + 2*Math.PI) %(2*Math.PI);
         var t1 = (t%pi2 + pi2) % pi2;
         var n = Math.floor(t1 / pi2_3)%3;
         var n = Math.floor(t1 / pi2_3)%3;
         if (isNaN(n)) return n;
         if (isNaN(n)) return n;
Line 82: Line 85:
         return p[n].Y()+d*Math.sin(t1);
         return p[n].Y()+d*Math.sin(t1);
       },
       },
       0, 2*Math.PI],
       0, pi2],
       {color:'#e8501f', highlightFillColor:'#e8501f'});
       {color:'#e8501f', highlightFillColor:'#e8501f'});
brd.unsuspendUpdate();
brd.unsuspendUpdate();
/*
var rol = JXG.Math.Numerics.createRoulette(reuleauxPentagon, reuleauxTriangle, 6*Math.PI/5, Math.PI/90, 10, [C,D]); </jsxgraph>
var createRoulette = function(c1, c2, start_c1, stepsize, time, pointlist) {
    var alpha = 0,
        t1 = start_c1,
        t2 = JXG.Math.Numerics.root(
                function(t) {
                    var c1x = c1.X(t1),
                        c1y = c1.Y(t1),
                        c2x = c2.X(t),
                        c2y = c2.Y(t);
                    return (c1x-c2x)*(c1x-c2x) + (c1y-c2y)*(c1y-c2y);
                },
                0),
        t1_new = 0.0, t2_new = 0.0,
        rotation = brd.create('transform',[function(){ return alpha;},
                                          function(){ return c1.X(t1);},
                                          function(){ return c1.Y(t1);}],
                                          {type:'rotate'}),
        linDist = function(t) {
                var mx = c1.X(t1),
                    my = c1.Y(t1),
                    c1x = mx - c1.X(t1_new),
                    c1y = my - c1.Y(t1_new),
                    c2x = mx - c2.X(t),
                    c2y = my - c2.Y(t);
                return (c1x*c1x+c1y*c1y) - (c2x*c2x+c2y*c2y);
            }, 
        interval = null;
 
    this.rolling = function(){
        t1_new = t1+stepsize;
        t2_new = JXG.Math.Numerics.root(linDist, t2+stepsize);
        alpha = -JXG.Math.Geometry.rad(
                    [c1.X(t1_new),c1.Y(t1_new)],
                    [c1.X(t1),c1.Y(t1)],
                    [c2.X(t2_new),c2.Y(t2_new)]);
        rotation.applyOnce(pointlist);
        brd.update();
        t1 = t1_new;
        t2 = t2_new;
    };
   
    this.start = function() {
        if (time>0) {
            interval = setInterval(this.rolling, time);
        }
        return this;
    };
   
    this.stop = function() {
        clearInterval(interval);
        return this;
    };
    return this;
};
*/
var rol = JXG.Math.Numerics.createRoulette(reuleauxPentagon, reuleauxTriangle, 6*Math.PI/5, Math.PI/90, 10, [C,D]); //.start();
</jsxgraph>


===The underlying JavaScript code===
===The underlying JavaScript code===
coming soon...
<source lang="javascript">
<source lang="javascript">
</source>
</source>

Revision as of 15:03, 2 October 2010

The underlying JavaScript code