Skip to content

Instantly share code, notes, and snippets.

@nadavkav
Created February 23, 2018 08:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nadavkav/b2a58aad908de75bf666ff262cc6126d to your computer and use it in GitHub Desktop.
Save nadavkav/b2a58aad908de75bf666ff262cc6126d to your computer and use it in GitHub Desktop.
A JSXGraph JS file for a Moodle jsxgraph filter
(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