@@ -5,18 +5,198 @@ permaid: webide
55
66## H5P
77
8- ::: geogebra { showAlgebra }
8+ ::: jsxgraph { height = " 500 " width = " 600 " boundingbox = " [-10,10,14,-10] " axis = false grid = false }
99
10- a = Point({1, 2})
10+ ``` js
11+ var a = board .create (" slider" , [
12+ [1 , 8 ],
13+ [5 , 8 ],
14+ [0 , 1 , 4 ],
15+ ]);
16+ var b = board .create (" slider" , [
17+ [1 , 9 ],
18+ [5 , 9 ],
19+ [0 , 0.25 , 4 ],
20+ ]);
21+ var c = board .create (
22+ " curve" ,
23+ [
24+ function (phi ) {
25+ return a .Value () + b .Value () * phi;
26+ },
27+ [0 , 0 ],
28+ 0 ,
29+ 8 * Math .PI ,
30+ ],
31+ { curveType: " polar" , strokewidth: 4 }
32+ );
33+ ```
1134
1235:::
1336
14- Das ist ein Test
37+ ::: jsxgraph { }
38+
39+ ``` js
40+ var p1 = board .create (" point" , [0 , 0 ], { name: " X" , size: 4 });
41+ var p2 = board .create (" point" , [2 , - 1 ], { name: " B" , size: 4 });
42+ var p3 = board .create (" point" , [- 2 , - 3 ], { name: " C" , size: 4 });
43+ var p4 = board .create (" point" , [- 1 , - 1 ], { name: " D" , size: 4 });
44+ var p5 = board .create (" point" , [3 , 1 ], { name: " E" , size: 4 });
45+
46+ var poly = board .create (" polygon" , [" X" , " B" , " C" , " D" , " E" ], {
47+ borders: { strokeColor: " black" },
48+ });
49+ ```
50+
51+ :::
52+
53+ ::: jsxgraph { boundingbox =" [-1.5,28.5,28.5,-1.5] " }
54+
55+ ``` js
56+ // Define sliders to dynamically change parameters of the equations and create text elements to describe them
57+ s = board .create (
58+ " slider" ,
59+ [
60+ [20.0 , 26.0 ],
61+ [25.0 , 26.0 ],
62+ [0.0 , 0.3 , 1.0 ],
63+ ],
64+ { name: " ε1" , strokeColor: " black" , fillColor: " black" }
65+ );
66+ st = board .create (" text" , [20 , 25 , " Birth rate predators" ], { fixed: true });
67+ u = board .create (
68+ " slider" ,
69+ [
70+ [20.0 , 24.0 ],
71+ [25.0 , 24.0 ],
72+ [0.0 , 0.7 , 1.0 ],
73+ ],
74+ { name: " ε2" , strokeColor: " black" , fillColor: " black" }
75+ );
76+ ut = board .create (" text" , [20 , 23 , " Death rate predators" ], { fixed: true });
77+
78+ o = board .create (
79+ " slider" ,
80+ [
81+ [10.0 , 26.0 ],
82+ [15.0 , 26.0 ],
83+ [0.0 , 0.1 , 1.0 ],
84+ ],
85+ { name: " γ1" , strokeColor: " black" , fillColor: " black" }
86+ );
87+ ot = board .create (" text" , [10 , 25 , " Death rate preys/per predator" ], {
88+ fixed: true ,
89+ });
90+ p = board .create (
91+ " slider" ,
92+ [
93+ [10.0 , 24.0 ],
94+ [15.0 , 24.0 ],
95+ [0.0 , 0.3 , 1.0 ],
96+ ],
97+ { name: " γ2" , strokeColor: " black" , fillColor: " black" }
98+ );
99+ pt = board .create (" text" , [10 , 23 , " Reproduction rate pred./per prey" ], {
100+ fixed: true ,
101+ });
102+
103+ // Dynamic initial value as gliders on the y-axis
104+ startpred = board .create (" glider" , [0 , 10 , board .defaultAxes .y ], {
105+ name: " Preys" ,
106+ strokeColor: " red" ,
107+ fillColor: " red" ,
108+ });
109+ startprey = board .create (" glider" , [0 , 5 , board .defaultAxes .y ], {
110+ name: " Predators" ,
111+ strokeColor: " blue" ,
112+ fillColor: " blue" ,
113+ });
114+
115+ // Variables for the JXG.Curves
116+ var g3 = null ;
117+ var g4 = null ;
118+
119+ // Initialise ODE and solve it with JXG.Math.Numerics.rungeKutta()
120+ function ode () {
121+ // evaluation interval
122+ var I = [0 , 25 ];
123+ // Number of steps. 1000 should be enough
124+ var N = 1000 ;
125+
126+ // Right hand side of the ODE dx/dt = f(t, x)
127+ var f = function (t , x ) {
128+ var bpred = s .Value (); // 0.3;
129+ var bprey = u .Value (); // 0.7;
130+ var dpred = o .Value (); // 0.1;
131+ var dprey = p .Value (); // 0.3;
132+
133+ var y = [];
134+ y[0 ] = x[0 ] * (bpred - dpred * x[1 ]);
135+ y[1 ] = - x[1 ] * (bprey - dprey * x[0 ]);
136+
137+ return y;
138+ };
139+
140+ // Initial value
141+ var x0 = [startpred .Y (), startprey .Y ()];
142+
143+ // Solve ode
144+ var data = JXG .Math .Numerics .rungeKutta (" euler" , x0, I , N , f);
145+
146+ // to plot the data against time we need the times where the equations were solved
147+ var t = [];
148+ var q = I [0 ];
149+ var h = (I [1 ] - I [0 ]) / N ;
150+ for (var i = 0 ; i < data .length ; i++ ) {
151+ data[i].push (q);
152+ q += h;
153+ }
154+
155+ return data;
156+ }
157+
158+ // get data points
159+ var data = ode ();
160+
161+ // copy data to arrays so we can plot it using JXG.Curve
162+ var t = [];
163+ var dataprey = [];
164+ var datapred = [];
165+ for (var i = 0 ; i < data .length ; i++ ) {
166+ t[i] = data[i][2 ];
167+ datapred[i] = data[i][0 ];
168+ dataprey[i] = data[i][1 ];
169+ }
170+
171+ // Plot Predator
172+ g3 = board .create (" curve" , [t, datapred], {
173+ strokeColor: " red" ,
174+ strokeWidth: " 2px" ,
175+ });
176+ g3 .updateDataArray = function () {
177+ var data = ode ();
178+ this .dataX = [];
179+ this .dataY = [];
180+ for (var i = 0 ; i < data .length ; i++ ) {
181+ this .dataX [i] = t[i];
182+ this .dataY [i] = data[i][0 ];
183+ }
184+ };
185+
186+ // Plot Prey
187+ g4 = board .create (" curve" , [t, dataprey], {
188+ strokeColor: " blue" ,
189+ strokeWidth: " 2px" ,
190+ });
191+ g4 .updateDataArray = function () {
192+ var data = ode ();
193+ this .dataX = [];
194+ this .dataY = [];
195+ for (var i = 0 ; i < data .length ; i++ ) {
196+ this .dataX [i] = t[i];
197+ this .dataY [i] = data[i][1 ];
198+ }
199+ };
200+ ```
15201
16- ::: geogebra { perspective =" G " height =400 width =700 coordsystem =" -10,10,-2,8 " }
17-
18- a = Slider[ -5,5]
19- SetCoords(a, 450, 370)
20- f_a(x) = x^2 * a + a * x
21-
22202:::
0 commit comments