1 /*
  2     Copyright 2008,2009
  3         Matthias Ehmann,
  4         Michael Gerhaeuser,
  5         Carsten Miller,
  6         Bianca Valentin,
  7         Alfred Wassermann,
  8         Peter Wilfahrt
  9 
 10     This file is part of JSXGraph.
 11 
 12     JSXGraph is free software: you can redistribute it and/or modify
 13     it under the terms of the GNU Lesser General Public License as published by
 14     the Free Software Foundation, either version 3 of the License, or
 15     (at your option) any later version.
 16 
 17     JSXGraph is distributed in the hope that it will be useful,
 18     but WITHOUT ANY WARRANTY; without even the implied warranty of
 19     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 20     GNU Lesser General Public License for more details.
 21 
 22     You should have received a copy of the GNU Lesser General Public License
 23     along with JSXGraph.  If not, see <http://www.gnu.org/licenses/>.
 24 */
 25 
 26 JXG.extend(JXG.Board.prototype, /** @lends JXG.Board.prototype */ {
 27     angle: function(A, B, C){ return JXG.Math.Geometry.angle(A,B,C); },
 28     rad: function(A, B, C){ return JXG.Math.Geometry.rad(A,B,C); },
 29     distance: function(arr1, arr2){ return JXG.Math.Geometry.distance(arr1,arr2); },
 30     pow: function(a, b){ return JXG.Math.pow(a,b); },
 31     round: function(x, n){ return (x).toFixed(n); },
 32     cosh: function(x){ return JXG.Math.cosh(x); },
 33     sinh: function(x){ return JXG.Math.sinh(x); },
 34     sgn: function(x) { return (x==0 ? 0 : x/(Math.abs(x))); },
 35     D: function(f,obj){ return JXG.Math.Numerics.D(f,obj); },
 36     I: function(interval,f){ return JXG.Math.Numerics.I(interval,f); },
 37     root: function(f,x,obj){ return JXG.Math.Numerics.root(f,x,obj); },
 38     lagrangePolynomial: function(p){ return JXG.Math.Numerics.lagrangePolynomial(p); },
 39     neville: function(p){ return JXG.Math.Numerics.Neville(p); },
 40     riemannsum: function(f,n,type,start,end){ return JXG.Math.Numerics.riemannsum(f,n,type,start,end); },
 41 
 42     abs: Math.abs,
 43     acos: Math.acos,
 44     asin: Math.asin,
 45     atan: Math.atan,
 46     ceil: Math.ceil,
 47     cos: Math.cos,
 48     exp: Math.exp,
 49     floor: Math.floor,
 50     log: Math.log,
 51     max: Math.max,
 52     min: Math.min,
 53     random: Math.random,
 54     sin: Math.sin,
 55     sqrt: Math.sqrt,
 56     tan: Math.tan,
 57     trunc: Math.ceil,
 58     
 59     factorial: function(n){ return JXG.Math.factorial(n); },
 60     binomial: function(n,k){ return JXG.Math.binomial(n,k); },
 61 
 62     getElement: function (el) {return JXG.getReference(this,el); },
 63 
 64     /**
 65      * GUI interface
 66      **/
 67     intersectionOptions: ['point',[[JXG.OBJECT_CLASS_LINE,JXG.OBJECT_CLASS_LINE],[JXG.OBJECT_CLASS_LINE,JXG.OBJECT_CLASS_CIRCLE],
 68                                    [JXG.OBJECT_CLASS_CIRCLE,JXG.OBJECT_CLASS_CIRCLE]]],
 69 
 70     pointFunc: function(){return [null];},
 71     pointOptions: ['point',[[JXG.OBJECT_CLASS_POINT]]],
 72 
 73     lineFunc: function(){return arguments;},
 74     lineOptions: ['line',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],
 75 
 76     linesegmentFunc: function(){return arguments;},
 77     linesegmentOptions: ['line',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],
 78     linesegmentAtts: {straightFirst : false, straightLast : false },
 79 
 80     arrowFunc: function(){return arguments;},
 81     arrowOptions: ['arrow',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],
 82 
 83     circleFunc: function(){return arguments;},
 84     circleOptions: ['circle',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT],[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE],
 85                               [JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_CIRCLE]]],
 86 
 87     arrowparallelOptions: ['arrowparallel',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],
 88     arrowparallelFunc: function(){return arguments;},
 89 
 90     bisectorOptions: ['bisector',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],
 91     bisectorFunc: function(){return arguments;},
 92 
 93     circumcircleOptions: ['circumcircle',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],
 94     circumcircleFunc: function(){return arguments;},
 95 
 96     circumcirclemidpointOptions: ['circumcirclemidpoint',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],
 97     circumcirclemidpointFunc: function(){return arguments;},
 98 
 99     integralOptions: ['integral',[[]]],
100     integralFunc: function(){return arguments;},
101 
102     midpointOptions: ['midpoint',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT],[JXG.OBJECT_CLASS_LINE]]],
103     midpointFunc: function(){return arguments;},
104 
105     mirrorpointOptions: ['mirrorpoint',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],
106     mirrorpointFunc: function(){return arguments;},
107 
108     normalOptions: ['normal',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],
109     normalFunc: function(){return arguments;},
110 
111     parallelOptions: ['parallel',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],
112     parallelFunc: function(){return arguments;},
113 
114     parallelpointOptions: ['parallelpoint',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],
115     parallelpointFunc: function(){return arguments;},
116 
117     perpendicularOptions: ['perpendicular',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],
118     perpendicularFunc: function(){return arguments;},
119 
120     perpendicularpointOptions: ['perpendicularpoint',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],
121     perpendicularpointFunc: function(){return arguments;},
122 
123     reflectionOptions: ['reflection',[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],
124     reflectionFunc: function(){return arguments;}
125 });
126 
127 // Some shortcuts
128 JXG.Point.prototype.setPositionX = function (method, x) {
129     var y = (method==JXG.COORDS_BY_USER)?this.coords.usrCoords[2]:this.coords.scrCoords[2];
130     this.setPosition(method,[x,y]);
131 };
132 JXG.Point.prototype.setPositionY = function (method, y) {
133     var x = (method==JXG.COORDS_BY_USER)?this.coords.usrCoords[1]:this.coords.scrCoords[1];
134     this.setPosition(method,[x,y]);
135 };
136