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