JSXGraph Conference 2021
Newcastle University
JSXGraph Conference 2021
Christian Lawson-Perfect
Newcastle University
An open-source e-assessment system designed for mathematical subjects.
Developed at Newcastle University for >10 years.
Included a JSXGraph extension from the beginning.
More than 4,000 questions using the extension, more than 1,000 published under Creative Commons licences.
Still the most popular extension (≈2× GeoGebra).
Sorry for lurking!
I proposed this talk to pressure myself to do more work on JSXGraph.
Minimise code.
A domain-specific language for diagrams, such as Eukleides, Asymptote or TikZ.
Integrate with randomised question variables.
Use the state of the diagram in marking.
Two-way link between diagram and numerical/mathematical expression inputs.
var div = extensions.jsxgraph.makeBoard('400px','400px'); var board = div.board; var a = board.create('point', [5,7]); return div;
jessiecode( 600,600, """ A = point(-2,-2); B = point(2,-2); C = point(1,2); circumcenter = circumcenter(A,B,C) << name: "circumcenter" >>; circle(A,B,C) << strokeOpacity: 0.3 >>; """, [ "axis": false ] )
jsxgraph( 600,600, [ ['point',[-2,-2],["name":"A"]], ['point',[2,-2],["name":"B"]], ['point',[1,2],["name":"C"]], ['circumcenter',['A','B','C'],["name":"circumcenter"]], ['circle',['A','B','C'],["strokeOpacity": 0.3]], ], [ "axis": false ] )
Hard to make an easy system to link diagrams to answer inputs.
Want:
Change input → redraw diagram
and
Move object → change input.
Two-way link is hard!
student_gradient: jxg_slope(diagram["l"]) correct_gradient (Does the student's line have the right gradient?): if(student_gradient = gradient, add_credit(0.5, "Your line has the right gradient."), negative_feedback("Your line's gradient is {student_gradient}.") ) student_intercept: jxg_rise(diagram["l"]) correct_intercept (Does the student's line have the right y-intercept?): if(student_intercept = y_intercept, add_credit(0.5, "Your line has the right $y$-intercept."), negative_feedback("Your line's $y$-intercept is {student_intercept}.") )
new in the last 10 minutes!!!
jxg_input: [ jxg_set_position(diagram["A"],studentMatrix[0]) ] jxg_output: let([x,y],jxg_position(diagram["A"]), [[string(x),string(y)]] )Source