Reflect images: Difference between revisions
From JSXGraph Wiki
| A WASSERMANN (talk | contribs) No edit summary | A WASSERMANN (talk | contribs) No edit summary | ||
| (9 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| <jsxgraph width="600" height="500"> | <jsxgraph width="600" height="500"> | ||
| (function(){ | (function(){ | ||
|    var brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[- |    var brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-5,5,13,-2.5], grid:true}); | ||
|    var p0, p1, p2, p3 |    var p0, p1, p2, p3, p5, | ||
|        l1, l2, |        l1, l2, | ||
|        im1, im2, im3,   |        im1, im2, im3,   | ||
| Line 10: | Line 10: | ||
|    // Define two line through four points |    // Define two line through four points | ||
|    p0 = brd. |    p0 = brd.create('point', [2,-2]);   | ||
|    p1 = brd. |    p1 = brd.create('point', [2,1]);   | ||
|    p2 = brd. |    p2 = brd.create('point', [10,-1]);   | ||
|    l1 = brd. |    l1 = brd.create('line', [p0, p1]);   | ||
|    l2 = brd. |    l2 = brd.create('line', [p1, p2]);   | ||
|    p4 = brd. |    p4 = brd.create('point', [-2,-2]);   | ||
|    p5 = brd. |    p5 = brd.create('point', [1,0]);   | ||
|    X = function(){ return Math.min(p4.X(), p5.X()); }; |    X = function(){ return Math.min(p4.X(), p5.X()); }; | ||
| Line 30: | Line 29: | ||
|    im3 = brd.create('image',[imurl, [X, Y], [W, H]], {opacity:0.7});   |    im3 = brd.create('image',[imurl, [X, Y], [W, H]], {opacity:0.7});   | ||
|    t1 = brd. |    t1 = brd.create('transform', [l1], {type:'reflect'}); | ||
|    t2 = brd. |    t2 = brd.create('transform', [l2], {type:'reflect'}); | ||
|    // Reflect im2 on l1 |    // Reflect im2 on l1 | ||
|    t1.bindTo(im2); |    t1.bindTo(im2); | ||
|    // Reflect  |    // Reflect im3 on l1 and on l2 | ||
|    t1.bindTo(im3); |    t1.bindTo(im3); | ||
|    t2.bindTo(im3); |    t2.bindTo(im3); | ||
| Line 48: | Line 47: | ||
| Here is the complete code to accomplish this behaviour. | Here is the complete code to accomplish this behaviour. | ||
| <source lang="javascript"> | <source lang="javascript"> | ||
| (function(){ | |||
|   var brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-5,5,13,-2.5], grid:true}); | |||
|   var p0, p1, p2, p3, p5, | |||
|       l1, l2, | |||
|       im1, im2, im3,  | |||
|       t1, t2, | |||
|       imurl = "/distrib/images/uccellino.jpg", | |||
|       X, Y, W, H;          // Functions defining the position, width and height of the original image. | |||
|   // Define two line through four points | |||
|   p0 = brd.create('point', [2,-2]);  | |||
|   p1 = brd.create('point', [2,1]);  | |||
|   p2 = brd.create('point', [10,-1]);  | |||
|   l1 = brd.create('line', [p0, p1]);  | |||
|   l2 = brd.create('line', [p1, p2]);  | |||
|   p4 = brd.create('point', [-2,-2]);  | |||
|   p5 = brd.create('point', [1,0]);  | |||
|   X = function(){ return Math.min(p4.X(), p5.X()); }; | |||
|   Y = function(){ return Math.min(p4.Y(), p5.Y()); }; | |||
|   W = function(){ return Math.abs(p5.X() -p4.X()); }; | |||
|   H = function(){ return Math.abs(p5.Y() -p4.Y()); }; | |||
|   im1 = brd.create('image',[imurl, [X, Y], [W, H]], {opacity:0.7});  | |||
|   im2 = brd.create('image',[imurl, [X, Y], [W, H]], {opacity:0.7});  | |||
|   im3 = brd.create('image',[imurl, [X, Y], [W, H]], {opacity:0.7});  | |||
|   t1 = brd.create('transform', [l1], {type:'reflect'}); | |||
|   t2 = brd.create('transform', [l2], {type:'reflect'}); | |||
|   // Reflect im2 on l1 | |||
|   t1.bindTo(im2); | |||
|   // Reflect im3 on l1 and on l2 | |||
|   t1.bindTo(im3); | |||
|   t2.bindTo(im3); | |||
|   brd.update(); | |||
| })(); | |||
| </source> | </source> | ||
| [[Category:Examples]] | [[Category:Examples]] | ||
| [[Category:Geometry]] | [[Category:Geometry]] | ||
Revision as of 13:00, 3 March 2021
The JavaScript code
Here is the complete code to accomplish this behaviour.
(function(){
  var brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[-5,5,13,-2.5], grid:true});
  var p0, p1, p2, p3, p5,
      l1, l2,
      im1, im2, im3, 
      t1, t2,
      imurl = "/distrib/images/uccellino.jpg",
      X, Y, W, H;          // Functions defining the position, width and height of the original image.
  // Define two line through four points
  p0 = brd.create('point', [2,-2]); 
  p1 = brd.create('point', [2,1]); 
  p2 = brd.create('point', [10,-1]); 
  l1 = brd.create('line', [p0, p1]); 
  l2 = brd.create('line', [p1, p2]); 
  p4 = brd.create('point', [-2,-2]); 
  p5 = brd.create('point', [1,0]); 
  X = function(){ return Math.min(p4.X(), p5.X()); };
  Y = function(){ return Math.min(p4.Y(), p5.Y()); };
  W = function(){ return Math.abs(p5.X() -p4.X()); };
  H = function(){ return Math.abs(p5.Y() -p4.Y()); };
  im1 = brd.create('image',[imurl, [X, Y], [W, H]], {opacity:0.7}); 
  im2 = brd.create('image',[imurl, [X, Y], [W, H]], {opacity:0.7}); 
  im3 = brd.create('image',[imurl, [X, Y], [W, H]], {opacity:0.7}); 
  t1 = brd.create('transform', [l1], {type:'reflect'});
  t2 = brd.create('transform', [l2], {type:'reflect'});
  // Reflect im2 on l1
  t1.bindTo(im2);
  // Reflect im3 on l1 and on l2
  t1.bindTo(im3);
  t2.bindTo(im3);
  brd.update();
})();
