Difference between revisions of "Tschirnhausen Cubic Catacaustic"

From JSXGraph Wiki
Jump to navigationJump to search
 
(30 intermediate revisions by the same user not shown)
Line 1: Line 1:
A semicubical parabola is a curve defined parametrically as
+
The Tschirnhausen cubic (black curve) is defined parametrically as
  
:<math> x = t^2 </math>
+
:<math> x = a3(t^2-3) </math>
  
:<math> y = at^3 </math>
+
:<math> y = at(t^2-3) </math>
 +
Its catacaustic (red curve) with radiant point <math>(-8a,p)</math>
 +
is the semicubical parabola with parametric equations
  
 +
:<math> x = a6(t^2-1) </math>
 +
 +
:<math> y = a4t^3 </math>
 +
 +
The catacaustic is the envelope of the rays reflected by the Tschirnhausen cubic.
 +
The ray's source is the ''radiant point''.
 +
 +
You can get a feeling why the red curve is called ''envelope'' of the blue line if you drag the ''point of reflection''.
 
<jsxgraph width="600" height="600">
 
<jsxgraph width="600" height="600">
 
(function(){
 
(function(){
Line 14: Line 24:
 
             [function(t){ return a.Value()*3*(t*t-3);},
 
             [function(t){ return a.Value()*3*(t*t-3);},
 
               function(t){ return a.Value()*t*(t*t-3);},
 
               function(t){ return a.Value()*t*(t*t-3);},
               -2, 2
+
               -5, 5
 
             ],
 
             ],
 
             {strokeWidth:1, strokeColor:'black'});
 
             {strokeWidth:1, strokeColor:'black'});
  
 
var radpoint = brd.create('point',[function(){ return -a.Value()*8;},0],{name:'radiant point'});
 
var radpoint = brd.create('point',[function(){ return -a.Value()*8;},0],{name:'radiant point'});
 +
var reflectionpoint = brd.create('glider',[-7,1,cubic],{name:'point of reflection'});
 +
var dir = brd.create('segment',[radpoint,reflectionpoint],{strokeWidth:1});
 +
var infty = brd.create('point',
 +
    [
 +
      function(){
 +
            var a = dir.stdform[1], b = dir.stdform[2],
 +
                t = reflectionpoint.position,
 +
                u = JXG.Math.Numerics.D(cubic.X)(t),
 +
                v = JXG.Math.Numerics.D(cubic.Y)(t),
 +
                dirx = a*v*v-2*b*u*v-a*u*u,
 +
                diry = b*u*u-2*a*u*v-b*v*v;
 +
            return [0, diry, -dirx]; 
 +
      }
 +
    ],{name:'', visible:false});
 +
 +
var reflection = brd.create('line',
 +
      [reflectionpoint,infty],
 +
      {strokeWidth:1, straightFirst:false, trace:true});
  
 
var cataustic = brd.create('curve',
 
var cataustic = brd.create('curve',
 
                 [function(t){ return a.Value()*6*(t*t-1);},
 
                 [function(t){ return a.Value()*6*(t*t-1);},
 
                   function(t){ return a.Value()*4*t*t*t;},
 
                   function(t){ return a.Value()*4*t*t*t;},
                 -2, 2
+
                 -4, 4
 
                 ],
 
                 ],
                 {strokeWidth:1, strokeColor:'red'});
+
                 {strokeWidth:3, strokeColor:'red'});
 
 
 
brd.unsuspendUpdate();
 
brd.unsuspendUpdate();
 
})();
 
})();
Line 32: Line 59:
  
 
===References===
 
===References===
 
+
* [http://mathworld.wolfram.com/TschirnhausenCubicCatacaustic.html Weisstein, Eric W. "Tschirnhausen Cubic Catacaustic." From MathWorld--A Wolfram Web Resource.]
 +
* [http://en.wikipedia.org/wiki/Caustic_%28mathematics%29 Wikipedia on Caustics]
 
===The underlying JavaScript code===
 
===The underlying JavaScript code===
 
<source lang="javascript">
 
<source lang="javascript">
 +
var brd = JXG.JSXGraph.initBoard('jxgbox',{boundingbox:[-10,10,10,-10], keepaspectratio:true, axis:true});
 +
brd.suspendUpdate();
 +
var a = brd.create('slider',[[-5,6],[5,6],[-5,1,5]], {name:'a'});
 +
 +
var cubic = brd.create('curve',
 +
            [function(t){ return a.Value()*3*(t*t-3);},
 +
              function(t){ return a.Value()*t*(t*t-3);},
 +
              -5, 5
 +
            ],
 +
            {strokeWidth:1, strokeColor:'black'});
 +
 +
var radpoint = brd.create('point',[function(){ return -a.Value()*8;},0],{name:'radiant point'});
 +
var reflectionpoint = brd.create('glider',[-7,1,cubic],{name:'point of reflection'});
 +
var dir = brd.create('segment',[radpoint,reflectionpoint],{strokeWidth:1});
 +
var infty = brd.create('point',
 +
    [
 +
      function(){
 +
            var a = dir.stdform[1], b = dir.stdform[2],
 +
                t = reflectionpoint.position,
 +
                u = JXG.Math.Numerics.D(cubic.X)(t),
 +
                v = JXG.Math.Numerics.D(cubic.Y)(t),
 +
                dirx = a*v*v-2*b*u*v-a*u*u,
 +
                diry = b*u*u-2*a*u*v-b*v*v;
 +
            return [0, diry, -dirx]; 
 +
      }
 +
    ],{name:'', visible:false});
 +
 +
var reflection = brd.create('line',
 +
      [reflectionpoint,infty],
 +
      {strokeWidth:1, straightFirst:false, trace:true});
 +
 +
var cataustic = brd.create('curve',
 +
                [function(t){ return a.Value()*6*(t*t-1);},
 +
                  function(t){ return a.Value()*4*t*t*t;},
 +
                -4, 4
 +
                ],
 +
                {strokeWidth:3, strokeColor:'red'});
 +
brd.unsuspendUpdate();
 
</source>
 
</source>
  
 
[[Category:Examples]]
 
[[Category:Examples]]
 
[[Category:Curves]]
 
[[Category:Curves]]

Latest revision as of 15:26, 13 January 2011

The Tschirnhausen cubic (black curve) is defined parametrically as

[math] x = a3(t^2-3) [/math]
[math] y = at(t^2-3) [/math]

Its catacaustic (red curve) with radiant point [math](-8a,p)[/math] is the semicubical parabola with parametric equations

[math] x = a6(t^2-1) [/math]
[math] y = a4t^3 [/math]

The catacaustic is the envelope of the rays reflected by the Tschirnhausen cubic. The ray's source is the radiant point.

You can get a feeling why the red curve is called envelope of the blue line if you drag the point of reflection.

References

The underlying JavaScript code

var brd = JXG.JSXGraph.initBoard('jxgbox',{boundingbox:[-10,10,10,-10], keepaspectratio:true, axis:true});
brd.suspendUpdate();
var a = brd.create('slider',[[-5,6],[5,6],[-5,1,5]], {name:'a'});

var cubic = brd.create('curve',
             [function(t){ return a.Value()*3*(t*t-3);},
              function(t){ return a.Value()*t*(t*t-3);},
              -5, 5
             ],
             {strokeWidth:1, strokeColor:'black'});

var radpoint = brd.create('point',[function(){ return -a.Value()*8;},0],{name:'radiant point'});
var reflectionpoint = brd.create('glider',[-7,1,cubic],{name:'point of reflection'});
var dir = brd.create('segment',[radpoint,reflectionpoint],{strokeWidth:1});
var infty = brd.create('point',
     [
       function(){ 
            var a = dir.stdform[1], b = dir.stdform[2],
                t = reflectionpoint.position,
                u = JXG.Math.Numerics.D(cubic.X)(t), 
                v = JXG.Math.Numerics.D(cubic.Y)(t),
                dirx = a*v*v-2*b*u*v-a*u*u,
                diry = b*u*u-2*a*u*v-b*v*v;
            return [0, diry, -dirx];  
       }
     ],{name:'', visible:false});

var reflection = brd.create('line',
       [reflectionpoint,infty],
       {strokeWidth:1, straightFirst:false, trace:true});

var cataustic = brd.create('curve',
                 [function(t){ return a.Value()*6*(t*t-1);},
                  function(t){ return a.Value()*4*t*t*t;},
                 -4, 4
                 ],
                 {strokeWidth:3, strokeColor:'red'});
brd.unsuspendUpdate();