Created
February 23, 2018 08:41
-
-
Save nadavkav/b2a58aad908de75bf666ff262cc6126d to your computer and use it in GitHub Desktop.
A JSXGraph JS file for a Moodle jsxgraph filter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function() { | |
var dataLine= "נתון", sep = " : "; | |
var dbgGrid = false; | |
var dbgPoints = false; | |
var pA, pB, pC, pAA, pBB, pCC; | |
var color1='#0000ff', color2='#0000ff', color3='#0000ff'; | |
if ( {showColor} ) { | |
color1='#ff0000'; color2='#00ff00'; color3='#0000ff'; | |
} | |
// Angle Edge Angle triangle | |
function triangleAEA(nameA, nameB, nameC,aA, AB, aB, rotate) { | |
pAA = brd.create('point', [0, 0],{visible:dbgPoints , name:'AA'}); | |
pBB = brd.create('point', [AB, 0],{visible:dbgPoints , name:'BB'}); | |
var pX1= brd.create('point', [AB, 0],{visible:dbgPoints , name:'X1', fixed:false}); | |
aAA = brd.create('angle',[pBB, pAA, pX1], {visible:false}); | |
aAA.setAngle(function() { return aA*Math.PI / 180; }); | |
brd.update(); | |
var lAACC = brd.create('line', [pAA, pX1], {visible:false}); | |
var pX2= brd.create('point', [AB, 0],{name:'X2', fixed:false, visible:dbgPoints }); | |
aBB = brd.create('angle',[pAA, pBB, pX2], {visible:false}); | |
aBB.setAngle(function() { return Math.PI -aB*Math.PI / 180; }); | |
brd.update(); | |
var lBBCC = brd.create('line', [pBB, pX2], {visible:false}); | |
pCC=brd.create('intersection',[lAACC, lBBCC, 0], {visible:dbgPoints, name:'CC' }); | |
var pCenter = brd.create('incenter', [pAA, pBB, pCC], {visible:dbgPoints, name:'cen'}); | |
var tT1 = brd.create('transform', [-pCenter.X(),-pCenter.Y()], {type: 'translate'}); | |
var pZ = brd.create('point', [0, 0],{fixed:true, visible:false}); | |
var tR1 = brd.create('transform', [ rotate/16*Math.PI, pZ], {type: 'rotate'}); | |
pA = brd.create('point', [pAA,[tT1, tR1]],{name:nameA, fixed:true, strokeColor:'#000000', size:1}); | |
pB = brd.create('point', [pBB,[tT1, tR1]],{name:nameB, fixed:true, strokeColor:'#000000', size:1}); | |
pC = brd.create('point', [pCC,[tT1, tR1]],{name:nameC, fixed:true, strokeColor:'#000000', size:1}); | |
} | |
// Edge edge edge triangle | |
function triangleEEE(nameA, nameB, nameC,AB, BC, AC, rotate) { | |
pAA = brd.create('point', [0, 0],{visible:dbgPoints , name:'AA'}); | |
pBB = brd.create('point', [AB, 0],{visible:dbgPoints , name:'BB'}); | |
var cA= brd.create('circle', [pAA, AC],{visible:false}); | |
var cB= brd.create('circle', [pBB, BC],{visible:false}); | |
pCC=brd.create('intersection',[cA, cB, 0], {visible:dbgPoints}); | |
var pCenter = brd.create('incenter', [pAA, pBB, pCC], {visible:dbgPoints, name:'cen'}); | |
var tT1 = brd.create('transform', [-pCenter.X(),-pCenter.Y()], {type: 'translate'}); | |
var pZ = brd.create('point', [0, 0],{fixed:true, visible:false}); | |
var tR1 = brd.create('transform', [ rotate/16*Math.PI, pZ], {type: 'rotate'}); | |
pA = brd.create('point', [pAA,[tT1, tR1]],{name:nameA, fixed:true, strokeColor:'#000000', size:1}); | |
pB = brd.create('point', [pBB,[tT1, tR1]],{name:nameB, fixed:true, strokeColor:'#000000', size:1}); | |
pC = brd.create('point', [pCC,[tT1, tR1]],{name:nameC, fixed:true, strokeColor:'#000000', size:1}); | |
} | |
function angle3p(A,B,C) { | |
var AB = Math.sqrt(Math.pow(B.X()-A.X(),2)+ Math.pow(B.Y()-A.Y(),2)); | |
var BC = Math.sqrt(Math.pow(B.X()-C.X(),2)+ Math.pow(B.Y()-C.Y(),2)); | |
var AC = Math.sqrt(Math.pow(C.X()-A.X(),2)+ Math.pow(C.Y()-A.Y(),2)); | |
return Math.acos((BC*BC+AB*AB-AC*AC)/(2*BC*AB)); | |
} | |
function ShowSegSize(lS) | |
{ | |
var p= brd.create('midpoint', [lS], {visible:false}); | |
brd.create('text',[0, 0,lS.L().toFixed(2)], {anchor: p}); | |
} | |
function DisplayLength(e1,e2){ | |
d= e1.Dist(e2); | |
dataLine = e1.getName()+e2.getName()+" = " + d.toFixed(2) +sep + dataLine ; | |
sep=" , "; | |
} | |
function DisplayAngle(e1,e2, e3){ | |
d= angle3p(e1,e2,e3)*180/Math.PI; | |
console.log(d); | |
dataLine = "∡"+ e1.getName()+e2.getName()+ e3.getName()+ " = " + d.toFixed(2) +sep + dataLine ; | |
sep=" , "; | |
} | |
var brd = JXG.JSXGraph.initBoard('{MB}', { axis:dbgGrid , grid:dbgGrid , | |
showCopyright:false, | |
showNavigation:false | |
}); | |
// create a triangle with the given AEA | |
var pZ = brd.create('point', [0, 0],{fixed:true, visible:false}); | |
triangleAEA('{A}', '{B}', '{C}', {alpha}, {w}, {beta}, {Ang2}); | |
// triangleEEE('{A}', '{B}', '{C}', 3, 4, 5, 0); | |
var triRad = Math.max(pZ.Dist(pA), pZ.Dist(pB), pZ.Dist(pC)); | |
triRad = triRad * (1+{sc}) *0.71; | |
var lAB = brd.create('segment', [pA, pB], {strokeColor:color1}); | |
var lAC = brd.create('segment', [pA, pC], {strokeColor:color2}); | |
var lBC = brd.create('segment', [pB, pC], {strokeColor:color3}); | |
//ShowSegSize(lAB); | |
//ShowSegSize(lAC); | |
//ShowSegSize(lBC); | |
if ({showAngles}) { | |
var aA = brd.create('angle',[pB, pA, pC], {name:' ', radius:0.5, fillColor:color1, strokeColor:color1}); | |
var aB = brd.create('angle',[pC, pB, pA], {name:' ', radius:0.5, fillColor:color2, strokeColor:color2}); | |
var aC = brd.create('angle',[pA, pC, pB], {name:' ', radius:0.5, fillColor:color3, strokeColor:color3}); | |
} | |
var tTran = brd.create('transform', [triRad,-triRad], {type: 'translate'}); | |
// reflection line | |
var lR = brd.create('line', [[0,0], [0, 1.0]], {visible:false}); | |
var tRefl = brd.create('transform', [lR], {type: 'reflect'}) | |
// var pZ = brd.create('point', [0, 0],{fixed:true, visible:false}); | |
var tRot = brd.create('transform', [ {Ang}, pZ], {type: 'rotate'}); | |
var tScale = brd.create('transform', [{sc}, {sc}], {type: 'scale'}); | |
var pR = brd.create('point', [pA,[tScale, tRefl, tRot, tTran]],{name:'{R}', fixed:true, strokeColor:'#000000', size:1}); | |
var pS = brd.create('point', [pB,[tScale, tRefl, tRot, tTran]],{name:'{S}', fixed:true, strokeColor:'#000000', size:1}); | |
var pT = brd.create('point', [pC,[tScale, tRefl, tRot, tTran]],{name:'{T}', fixed:true, strokeColor:'#000000', size:1}); | |
var lRS = brd.create('segment', [pR, pS], {strokeColor:color1}); | |
var lRT = brd.create('segment', [pR, pT], {strokeColor:color2}); | |
var lST = brd.create('segment', [pS, pT], {strokeColor:color3}); | |
if ({showAngles}) { | |
var aR = brd.create('angle',[pT, pR, pS], {name:' ', radius:0.5, fillColor:color1, strokeColor:color1}); | |
var aS = brd.create('angle',[pR, pS, pT], {name:' ', radius:0.5, fillColor:color2, strokeColor:color2}); | |
var aT = brd.create('angle',[pS, pT, pR], {name:' ', radius:0.5, fillColor:color3, strokeColor:color3}); | |
} | |
//ShowSegSize(lRS); | |
//ShowSegSize(lRT); | |
//ShowSegSize(lST); | |
var minX = Math.min(pA.X(), pB.X(), pC.X(), pR.X(), pS.X(), pT.X()); | |
var minY = Math.min(pA.Y(), pB.Y(), pC.Y(), pR.Y(), pS.Y(), pT.Y()); | |
var maxX = Math.max(pA.X(), pB.X(), pC.X(), pR.X(), pS.X(), pT.X()); | |
var maxY = Math.max(pA.Y(), pB.Y(), pC.Y(), pR.Y(), pS.Y(), pT.Y()); | |
if (dbgPoints ) { | |
minX= Math.min(minX, pAA.X(), pBB.X(), pCC.X()); | |
minY= Math.min(minY, pAA.Y(), pBB.Y(), pCC.Y()); | |
maxX= Math.max(maxX, pAA.X(), pBB.X(), pCC.X()); | |
maxY= Math.max(maxY, pAA.Y(), pBB.Y(), pCC.Y()); | |
} | |
var bSize = Math.max(maxX-minX, maxY-minY); | |
var Pad = bSize * 15 /400; | |
brd.setBoundingBox([minX-0.5,minY+bSize+0.5+Pad,minX+bSize+0.5+Pad,minY-0.5]); | |
//DisplayLength(pA,pB); | |
//DisplayLength(pA,pC); | |
//DisplayLength(pR,pS); | |
//DisplayLength(pS,pT); | |
//DisplayAngle(pA,pB,pC); | |
// brd.create('text', [minX,minY+bSize+1,dataLine]); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment