@teachinglab/omd 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +257 -251
- package/README.old.md +137 -137
- package/canvas/core/canvasConfig.js +202 -202
- package/canvas/drawing/segment.js +167 -167
- package/canvas/drawing/stroke.js +385 -385
- package/canvas/events/eventManager.js +444 -444
- package/canvas/events/pointerEventHandler.js +262 -262
- package/canvas/index.js +48 -48
- package/canvas/tools/PointerTool.js +71 -71
- package/canvas/tools/tool.js +222 -222
- package/canvas/utils/boundingBox.js +377 -377
- package/canvas/utils/mathUtils.js +258 -258
- package/docs/api/configuration-options.md +198 -198
- package/docs/api/eventManager.md +82 -82
- package/docs/api/focusFrameManager.md +144 -144
- package/docs/api/index.md +105 -105
- package/docs/api/main.md +62 -62
- package/docs/api/omdBinaryExpressionNode.md +86 -86
- package/docs/api/omdCanvas.md +83 -83
- package/docs/api/omdConfigManager.md +112 -112
- package/docs/api/omdConstantNode.md +52 -52
- package/docs/api/omdDisplay.md +87 -87
- package/docs/api/omdEquationNode.md +174 -174
- package/docs/api/omdEquationSequenceNode.md +258 -258
- package/docs/api/omdEquationStack.md +192 -192
- package/docs/api/omdFunctionNode.md +82 -82
- package/docs/api/omdGroupNode.md +78 -78
- package/docs/api/omdHelpers.md +87 -87
- package/docs/api/omdLeafNode.md +85 -85
- package/docs/api/omdNode.md +201 -201
- package/docs/api/omdOperationDisplayNode.md +117 -117
- package/docs/api/omdOperatorNode.md +91 -91
- package/docs/api/omdParenthesisNode.md +133 -133
- package/docs/api/omdPopup.md +191 -191
- package/docs/api/omdPowerNode.md +131 -131
- package/docs/api/omdRationalNode.md +144 -144
- package/docs/api/omdSequenceNode.md +128 -128
- package/docs/api/omdSimplification.md +78 -78
- package/docs/api/omdSqrtNode.md +144 -144
- package/docs/api/omdStepVisualizer.md +146 -146
- package/docs/api/omdStepVisualizerHighlighting.md +65 -65
- package/docs/api/omdStepVisualizerInteractiveSteps.md +108 -108
- package/docs/api/omdStepVisualizerLayout.md +70 -70
- package/docs/api/omdStepVisualizerNodeUtils.md +140 -140
- package/docs/api/omdStepVisualizerTextBoxes.md +76 -76
- package/docs/api/omdToolbar.md +130 -130
- package/docs/api/omdTranscriptionService.md +95 -95
- package/docs/api/omdTreeDiff.md +169 -169
- package/docs/api/omdUnaryExpressionNode.md +137 -137
- package/docs/api/omdUtilities.md +82 -82
- package/docs/api/omdVariableNode.md +123 -123
- package/docs/api/selectTool.md +74 -74
- package/docs/api/simplificationEngine.md +97 -97
- package/docs/api/simplificationRules.md +76 -76
- package/docs/api/simplificationUtils.md +64 -64
- package/docs/api/transcribe.md +43 -43
- package/docs/api-reference.md +85 -85
- package/docs/index.html +453 -453
- package/docs/index.md +38 -38
- package/docs/omd-objects.md +258 -258
- package/index.js +79 -79
- package/jsvg/index.js +3 -0
- package/jsvg/jsvg.js +898 -898
- package/jsvg/jsvgComponents.js +357 -358
- package/npm-docs/DOCUMENTATION_SUMMARY.md +220 -220
- package/npm-docs/README.md +251 -251
- package/npm-docs/api/api-reference.md +85 -85
- package/npm-docs/api/configuration-options.md +198 -198
- package/npm-docs/api/eventManager.md +82 -82
- package/npm-docs/api/expression-nodes.md +561 -561
- package/npm-docs/api/focusFrameManager.md +144 -144
- package/npm-docs/api/index.md +105 -105
- package/npm-docs/api/main.md +62 -62
- package/npm-docs/api/omdBinaryExpressionNode.md +86 -86
- package/npm-docs/api/omdCanvas.md +83 -83
- package/npm-docs/api/omdConfigManager.md +112 -112
- package/npm-docs/api/omdConstantNode.md +52 -52
- package/npm-docs/api/omdDisplay.md +87 -87
- package/npm-docs/api/omdEquationNode.md +174 -174
- package/npm-docs/api/omdEquationSequenceNode.md +258 -258
- package/npm-docs/api/omdEquationStack.md +192 -192
- package/npm-docs/api/omdFunctionNode.md +82 -82
- package/npm-docs/api/omdGroupNode.md +78 -78
- package/npm-docs/api/omdHelpers.md +87 -87
- package/npm-docs/api/omdLeafNode.md +85 -85
- package/npm-docs/api/omdNode.md +201 -201
- package/npm-docs/api/omdOperationDisplayNode.md +117 -117
- package/npm-docs/api/omdOperatorNode.md +91 -91
- package/npm-docs/api/omdParenthesisNode.md +133 -133
- package/npm-docs/api/omdPopup.md +191 -191
- package/npm-docs/api/omdPowerNode.md +131 -131
- package/npm-docs/api/omdRationalNode.md +144 -144
- package/npm-docs/api/omdSequenceNode.md +128 -128
- package/npm-docs/api/omdSimplification.md +78 -78
- package/npm-docs/api/omdSqrtNode.md +144 -144
- package/npm-docs/api/omdStepVisualizer.md +146 -146
- package/npm-docs/api/omdStepVisualizerHighlighting.md +65 -65
- package/npm-docs/api/omdStepVisualizerInteractiveSteps.md +108 -108
- package/npm-docs/api/omdStepVisualizerLayout.md +70 -70
- package/npm-docs/api/omdStepVisualizerNodeUtils.md +140 -140
- package/npm-docs/api/omdStepVisualizerTextBoxes.md +76 -76
- package/npm-docs/api/omdToolbar.md +130 -130
- package/npm-docs/api/omdTranscriptionService.md +95 -95
- package/npm-docs/api/omdTreeDiff.md +169 -169
- package/npm-docs/api/omdUnaryExpressionNode.md +137 -137
- package/npm-docs/api/omdUtilities.md +82 -82
- package/npm-docs/api/omdVariableNode.md +123 -123
- package/npm-docs/api/selectTool.md +74 -74
- package/npm-docs/api/simplificationEngine.md +97 -97
- package/npm-docs/api/simplificationRules.md +76 -76
- package/npm-docs/api/simplificationUtils.md +64 -64
- package/npm-docs/api/transcribe.md +43 -43
- package/npm-docs/guides/equations.md +854 -854
- package/npm-docs/guides/factory-functions.md +354 -354
- package/npm-docs/guides/getting-started.md +318 -318
- package/npm-docs/guides/quick-examples.md +525 -525
- package/npm-docs/guides/visualizations.md +682 -682
- package/npm-docs/index.html +12 -0
- package/npm-docs/json-schemas.md +826 -826
- package/omd/config/omdConfigManager.js +279 -267
- package/omd/core/index.js +158 -158
- package/omd/core/omdEquationStack.js +546 -546
- package/omd/core/omdUtilities.js +113 -113
- package/omd/display/omdDisplay.js +969 -962
- package/omd/display/omdToolbar.js +501 -501
- package/omd/nodes/omdBinaryExpressionNode.js +459 -459
- package/omd/nodes/omdConstantNode.js +141 -141
- package/omd/nodes/omdEquationNode.js +1327 -1327
- package/omd/nodes/omdFunctionNode.js +351 -351
- package/omd/nodes/omdGroupNode.js +67 -67
- package/omd/nodes/omdLeafNode.js +76 -76
- package/omd/nodes/omdNode.js +556 -556
- package/omd/nodes/omdOperationDisplayNode.js +321 -321
- package/omd/nodes/omdOperatorNode.js +108 -108
- package/omd/nodes/omdParenthesisNode.js +292 -292
- package/omd/nodes/omdPowerNode.js +235 -235
- package/omd/nodes/omdRationalNode.js +295 -295
- package/omd/nodes/omdSqrtNode.js +307 -307
- package/omd/nodes/omdUnaryExpressionNode.js +227 -227
- package/omd/nodes/omdVariableNode.js +122 -122
- package/omd/simplification/omdSimplification.js +140 -140
- package/omd/simplification/omdSimplificationEngine.js +887 -887
- package/omd/simplification/package.json +5 -5
- package/omd/simplification/rules/binaryRules.js +1037 -1037
- package/omd/simplification/rules/functionRules.js +111 -111
- package/omd/simplification/rules/index.js +48 -48
- package/omd/simplification/rules/parenthesisRules.js +19 -19
- package/omd/simplification/rules/powerRules.js +143 -143
- package/omd/simplification/rules/rationalRules.js +725 -725
- package/omd/simplification/rules/sqrtRules.js +48 -48
- package/omd/simplification/rules/unaryRules.js +37 -37
- package/omd/simplification/simplificationRules.js +31 -31
- package/omd/simplification/simplificationUtils.js +1055 -1055
- package/omd/step-visualizer/omdStepVisualizer.js +947 -947
- package/omd/step-visualizer/omdStepVisualizerHighlighting.js +246 -246
- package/omd/step-visualizer/omdStepVisualizerLayout.js +892 -892
- package/omd/step-visualizer/omdStepVisualizerTextBoxes.js +200 -200
- package/omd/utils/aiNextEquationStep.js +106 -106
- package/omd/utils/omdNodeOverlay.js +638 -638
- package/omd/utils/omdPopup.js +1203 -1203
- package/omd/utils/omdStepVisualizerInteractiveSteps.js +684 -684
- package/omd/utils/omdStepVisualizerNodeUtils.js +267 -267
- package/omd/utils/omdTranscriptionService.js +123 -123
- package/omd/utils/omdTreeDiff.js +733 -733
- package/package.json +59 -57
- package/readme.html +184 -120
- package/src/index.js +74 -74
- package/src/json-schemas.md +576 -576
- package/src/omd-json-samples.js +147 -147
- package/src/omdApp.js +391 -391
- package/src/omdAppCanvas.js +335 -335
- package/src/omdBalanceHanger.js +199 -199
- package/src/omdColor.js +13 -13
- package/src/omdCoordinatePlane.js +541 -541
- package/src/omdExpression.js +115 -115
- package/src/omdFactory.js +150 -150
- package/src/omdFunction.js +114 -114
- package/src/omdMetaExpression.js +290 -290
- package/src/omdNaturalExpression.js +563 -563
- package/src/omdNode.js +383 -383
- package/src/omdNumber.js +52 -52
- package/src/omdNumberLine.js +114 -112
- package/src/omdNumberTile.js +118 -118
- package/src/omdOperator.js +72 -72
- package/src/omdPowerExpression.js +91 -91
- package/src/omdProblem.js +259 -259
- package/src/omdRatioChart.js +251 -251
- package/src/omdRationalExpression.js +114 -114
- package/src/omdSampleData.js +215 -215
- package/src/omdShapes.js +512 -512
- package/src/omdSpinner.js +151 -151
- package/src/omdString.js +49 -49
- package/src/omdTable.js +498 -498
- package/src/omdTapeDiagram.js +244 -244
- package/src/omdTerm.js +91 -91
- package/src/omdTileEquation.js +349 -349
- package/src/omdUtils.js +84 -84
- package/src/omdVariable.js +51 -51
|
@@ -1,525 +1,525 @@
|
|
|
1
|
-
# Quick Examples
|
|
2
|
-
|
|
3
|
-
A collection of ready-to-use code examples for common OMD use cases.
|
|
4
|
-
|
|
5
|
-
## Table of Contents
|
|
6
|
-
|
|
7
|
-
- [Basic Equations](#basic-equations)
|
|
8
|
-
- [Visualizations](#visualizations)
|
|
9
|
-
- [Step-by-Step Solutions](#step-by-step-solutions)
|
|
10
|
-
- [Advanced Features](#advanced-features)
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Basic Equations
|
|
15
|
-
|
|
16
|
-
### Simple Equation
|
|
17
|
-
|
|
18
|
-
```javascript
|
|
19
|
-
import { omdDisplay, omdEquationNode } from '@teachinglab/omd';
|
|
20
|
-
|
|
21
|
-
const container = document.getElementById('container');
|
|
22
|
-
const display = new omdDisplay(container);
|
|
23
|
-
|
|
24
|
-
const equation = omdEquationNode.fromString('2x + 3 = 11');
|
|
25
|
-
display.render(equation);
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### Expression
|
|
29
|
-
|
|
30
|
-
```javascript
|
|
31
|
-
import { omdExpression } from '@teachinglab/omd';
|
|
32
|
-
|
|
33
|
-
const expr = new omdExpression();
|
|
34
|
-
expr.loadFromJSON("3x^2 + 5x - 2");
|
|
35
|
-
display.render(expr);
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### Quadratic Equation
|
|
39
|
-
|
|
40
|
-
```javascript
|
|
41
|
-
const quadratic = omdEquationNode.fromString('x^2 - 5x + 6 = 0');
|
|
42
|
-
display.render(quadratic);
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Visualizations
|
|
48
|
-
|
|
49
|
-
### Number Line
|
|
50
|
-
|
|
51
|
-
```javascript
|
|
52
|
-
import { omdNumberLine } from '@teachinglab/omd';
|
|
53
|
-
|
|
54
|
-
const numberLine = new omdNumberLine();
|
|
55
|
-
numberLine.loadFromJSON({
|
|
56
|
-
min: 0,
|
|
57
|
-
max: 20,
|
|
58
|
-
dotValues: [5, 10, 15],
|
|
59
|
-
label: "Skip Counting by 5"
|
|
60
|
-
});
|
|
61
|
-
display.render(numberLine);
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Coordinate Plane with Function
|
|
65
|
-
|
|
66
|
-
```javascript
|
|
67
|
-
import { omdCoordinatePlane } from '@teachinglab/omd';
|
|
68
|
-
|
|
69
|
-
const plane = new omdCoordinatePlane();
|
|
70
|
-
plane.loadFromJSON({
|
|
71
|
-
xMin: -10,
|
|
72
|
-
xMax: 10,
|
|
73
|
-
yMin: -10,
|
|
74
|
-
yMax: 10,
|
|
75
|
-
graphEquations: [
|
|
76
|
-
{ equation: 'y = x^2 - 4', color: '#e11d48', strokeWidth: 2 }
|
|
77
|
-
],
|
|
78
|
-
xLabel: "x",
|
|
79
|
-
yLabel: "y"
|
|
80
|
-
});
|
|
81
|
-
display.render(plane);
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### Multiple Functions
|
|
85
|
-
|
|
86
|
-
```javascript
|
|
87
|
-
plane.loadFromJSON({
|
|
88
|
-
xMin: -5,
|
|
89
|
-
xMax: 5,
|
|
90
|
-
yMin: -5,
|
|
91
|
-
yMax: 5,
|
|
92
|
-
graphEquations: [
|
|
93
|
-
{ equation: 'y = x^2', color: '#e11d48', strokeWidth: 2 },
|
|
94
|
-
{ equation: 'y = 2x + 1', color: '#3B82F6', strokeWidth: 2 },
|
|
95
|
-
{ equation: 'y = -x + 3', color: '#10B981', strokeWidth: 2 }
|
|
96
|
-
]
|
|
97
|
-
});
|
|
98
|
-
display.render(plane);
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Tape Diagram
|
|
102
|
-
|
|
103
|
-
```javascript
|
|
104
|
-
import { omdTapeDiagram } from '@teachinglab/omd';
|
|
105
|
-
|
|
106
|
-
const tape = new omdTapeDiagram();
|
|
107
|
-
tape.loadFromJSON({
|
|
108
|
-
values: [4, 4, 4, 3],
|
|
109
|
-
colors: ["#FF6B6B", "#4ECDC4", "#45B7D1", "#FFA07A"],
|
|
110
|
-
showValues: true,
|
|
111
|
-
labelSet: [
|
|
112
|
-
{
|
|
113
|
-
startIndex: 0,
|
|
114
|
-
endIndex: 2,
|
|
115
|
-
label: "3 equal groups",
|
|
116
|
-
showBelow: false
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
startIndex: 0,
|
|
120
|
-
endIndex: 3,
|
|
121
|
-
label: "Total: 15",
|
|
122
|
-
showBelow: true
|
|
123
|
-
}
|
|
124
|
-
]
|
|
125
|
-
});
|
|
126
|
-
display.render(tape);
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Table from Equation
|
|
130
|
-
|
|
131
|
-
```javascript
|
|
132
|
-
import { omdTable } from '@teachinglab/omd';
|
|
133
|
-
|
|
134
|
-
const table = new omdTable();
|
|
135
|
-
table.loadFromJSON({
|
|
136
|
-
equation: "y = 2x + 1",
|
|
137
|
-
headers: ["x", "y"],
|
|
138
|
-
xMin: -3,
|
|
139
|
-
xMax: 3,
|
|
140
|
-
stepSize: 1,
|
|
141
|
-
title: "Linear Function Table",
|
|
142
|
-
alternatingRowColors: ["#F0F0F0", "#FFFFFF"]
|
|
143
|
-
});
|
|
144
|
-
display.render(table);
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
## Step-by-Step Solutions
|
|
150
|
-
|
|
151
|
-
### Linear Equation Solution
|
|
152
|
-
|
|
153
|
-
```javascript
|
|
154
|
-
import { omdEquationStack, omdEquationNode } from '@teachinglab/omd';
|
|
155
|
-
|
|
156
|
-
const steps = [
|
|
157
|
-
omdEquationNode.fromString('3x + 5 = 20'),
|
|
158
|
-
omdEquationNode.fromString('3x = 15'),
|
|
159
|
-
omdEquationNode.fromString('x = 5')
|
|
160
|
-
];
|
|
161
|
-
|
|
162
|
-
const stack = new omdEquationStack(steps, {
|
|
163
|
-
toolbar: true,
|
|
164
|
-
stepVisualizer: true
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
display.render(stack);
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Quadratic Factoring
|
|
171
|
-
|
|
172
|
-
```javascript
|
|
173
|
-
const quadraticSteps = [
|
|
174
|
-
omdEquationNode.fromString('x^2 + 5x + 6 = 0'),
|
|
175
|
-
omdEquationNode.fromString('(x + 2)(x + 3) = 0'),
|
|
176
|
-
omdEquationNode.fromString('x = -2 or x = -3')
|
|
177
|
-
];
|
|
178
|
-
|
|
179
|
-
const stack = new omdEquationStack(quadraticSteps);
|
|
180
|
-
display.render(stack);
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
### With Explanations
|
|
184
|
-
|
|
185
|
-
```javascript
|
|
186
|
-
const stepsWithExplanations = [
|
|
187
|
-
{
|
|
188
|
-
node: omdEquationNode.fromString('2(x + 3) = 14'),
|
|
189
|
-
explanation: 'Original equation'
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
node: omdEquationNode.fromString('2x + 6 = 14'),
|
|
193
|
-
explanation: 'Distribute the 2'
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
node: omdEquationNode.fromString('2x = 8'),
|
|
197
|
-
explanation: 'Subtract 6 from both sides'
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
node: omdEquationNode.fromString('x = 4'),
|
|
201
|
-
explanation: 'Divide both sides by 2'
|
|
202
|
-
}
|
|
203
|
-
];
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
## Advanced Features
|
|
209
|
-
|
|
210
|
-
### Rational Expressions
|
|
211
|
-
|
|
212
|
-
```javascript
|
|
213
|
-
import { omdRationalExpression } from '@teachinglab/omd';
|
|
214
|
-
|
|
215
|
-
const rational = new omdRationalExpression();
|
|
216
|
-
rational.loadFromJSON({
|
|
217
|
-
numeratorExpression: {
|
|
218
|
-
termsAndOpers: [
|
|
219
|
-
{ omdType: "variable", name: "x" },
|
|
220
|
-
{ omdType: "operator", operator: "+" },
|
|
221
|
-
{ omdType: "number", value: 1 }
|
|
222
|
-
]
|
|
223
|
-
},
|
|
224
|
-
denominatorExpression: {
|
|
225
|
-
termsAndOpers: [
|
|
226
|
-
{ omdType: "term", coefficient: 1, variable: "x", exponent: 2 },
|
|
227
|
-
{ omdType: "operator", operator: "-" },
|
|
228
|
-
{ omdType: "number", value: 1 }
|
|
229
|
-
]
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
display.render(rational);
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
### Power Expressions
|
|
236
|
-
|
|
237
|
-
```javascript
|
|
238
|
-
import { omdPowerExpression } from '@teachinglab/omd';
|
|
239
|
-
|
|
240
|
-
const power = new omdPowerExpression();
|
|
241
|
-
power.loadFromJSON({
|
|
242
|
-
baseExpression: {
|
|
243
|
-
termsAndOpers: [
|
|
244
|
-
{ omdType: "variable", name: "x" },
|
|
245
|
-
{ omdType: "operator", operator: "+" },
|
|
246
|
-
{ omdType: "number", value: 1 }
|
|
247
|
-
]
|
|
248
|
-
},
|
|
249
|
-
exponentExpression: {
|
|
250
|
-
omdType: "number",
|
|
251
|
-
value: 2
|
|
252
|
-
}
|
|
253
|
-
});
|
|
254
|
-
display.render(power);
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
### Function Definition
|
|
258
|
-
|
|
259
|
-
```javascript
|
|
260
|
-
import { omdFunction } from '@teachinglab/omd';
|
|
261
|
-
|
|
262
|
-
const func = new omdFunction();
|
|
263
|
-
func.loadFromJSON({
|
|
264
|
-
name: "f",
|
|
265
|
-
inputVariables: ["x"],
|
|
266
|
-
expression: {
|
|
267
|
-
termsAndOpers: [
|
|
268
|
-
{ omdType: "term", coefficient: 2, variable: "x", exponent: 2 },
|
|
269
|
-
{ omdType: "operator", operator: "-" },
|
|
270
|
-
{ omdType: "term", coefficient: 3, variable: "x" },
|
|
271
|
-
{ omdType: "operator", operator: "+" },
|
|
272
|
-
{ omdType: "number", value: 1 }
|
|
273
|
-
]
|
|
274
|
-
}
|
|
275
|
-
});
|
|
276
|
-
display.render(func);
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### Coordinate Plane with Shapes
|
|
280
|
-
|
|
281
|
-
```javascript
|
|
282
|
-
const planeWithShapes = new omdCoordinatePlane();
|
|
283
|
-
planeWithShapes.loadFromJSON({
|
|
284
|
-
xMin: -5,
|
|
285
|
-
xMax: 5,
|
|
286
|
-
yMin: -5,
|
|
287
|
-
yMax: 5,
|
|
288
|
-
shapeSet: [
|
|
289
|
-
{
|
|
290
|
-
omdType: 'circle',
|
|
291
|
-
radius: 2,
|
|
292
|
-
color: '#FF6B6B'
|
|
293
|
-
},
|
|
294
|
-
{
|
|
295
|
-
omdType: 'rectangle',
|
|
296
|
-
width: 3,
|
|
297
|
-
height: 2,
|
|
298
|
-
color: '#4ECDC4'
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
omdType: 'regularPolygon',
|
|
302
|
-
sides: 6,
|
|
303
|
-
radius: 1.5,
|
|
304
|
-
color: '#45B7D1'
|
|
305
|
-
}
|
|
306
|
-
],
|
|
307
|
-
dotValues: [
|
|
308
|
-
[0, 0, "red"],
|
|
309
|
-
[2, 2, "blue"],
|
|
310
|
-
[-2, -2, "green"]
|
|
311
|
-
]
|
|
312
|
-
});
|
|
313
|
-
display.render(planeWithShapes);
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
### Tile Equation
|
|
317
|
-
|
|
318
|
-
```javascript
|
|
319
|
-
import { omdTileEquation } from '@teachinglab/omd';
|
|
320
|
-
|
|
321
|
-
const tileEq = new omdTileEquation();
|
|
322
|
-
tileEq.loadFromJSON({
|
|
323
|
-
left: ["x", "x", 3],
|
|
324
|
-
right: [11],
|
|
325
|
-
equation: "2x + 3 = 11",
|
|
326
|
-
tileSize: 30,
|
|
327
|
-
showLabels: true,
|
|
328
|
-
fontFamily: "Albert Sans"
|
|
329
|
-
});
|
|
330
|
-
display.render(tileEq);
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
### Custom Configuration
|
|
334
|
-
|
|
335
|
-
```javascript
|
|
336
|
-
import { omdConfigManager, omdDisplay } from '@teachinglab/omd';
|
|
337
|
-
|
|
338
|
-
// Set global configuration
|
|
339
|
-
omdConfigManager.setConfig({
|
|
340
|
-
defaultFontSize: 32,
|
|
341
|
-
defaultColor: '#2C3E50',
|
|
342
|
-
highlightColor: '#FFD700'
|
|
343
|
-
});
|
|
344
|
-
|
|
345
|
-
// Create display with custom options
|
|
346
|
-
const display = new omdDisplay(container, {
|
|
347
|
-
fontSize: 36,
|
|
348
|
-
centerContent: true,
|
|
349
|
-
fontFamily: 'Georgia'
|
|
350
|
-
});
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
### Programmatic Expression Building
|
|
354
|
-
|
|
355
|
-
```javascript
|
|
356
|
-
function createPolynomial(coefficients) {
|
|
357
|
-
const termsAndOpers = [];
|
|
358
|
-
|
|
359
|
-
coefficients.forEach((coef, index) => {
|
|
360
|
-
const exponent = coefficients.length - index - 1;
|
|
361
|
-
|
|
362
|
-
if (index > 0 && coef >= 0) {
|
|
363
|
-
termsAndOpers.push({ omdType: "operator", operator: "+" });
|
|
364
|
-
} else if (coef < 0) {
|
|
365
|
-
termsAndOpers.push({ omdType: "operator", operator: "-" });
|
|
366
|
-
coef = Math.abs(coef);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
if (exponent === 0) {
|
|
370
|
-
termsAndOpers.push({ omdType: "number", value: coef });
|
|
371
|
-
} else {
|
|
372
|
-
termsAndOpers.push({
|
|
373
|
-
omdType: "term",
|
|
374
|
-
coefficient: coef,
|
|
375
|
-
variable: "x",
|
|
376
|
-
exponent: exponent
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
return { termsAndOpers };
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
// Create x² + 3x - 4
|
|
385
|
-
const expr = new omdExpression();
|
|
386
|
-
expr.loadFromJSON(createPolynomial([1, 3, -4]));
|
|
387
|
-
display.render(expr);
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
### Interactive Canvas
|
|
391
|
-
|
|
392
|
-
```javascript
|
|
393
|
-
import { omdCanvas } from '@teachinglab/omd';
|
|
394
|
-
|
|
395
|
-
const canvas = new omdCanvas(container);
|
|
396
|
-
|
|
397
|
-
// Add multiple components
|
|
398
|
-
const eq1 = omdEquationNode.fromString('y = x^2');
|
|
399
|
-
const eq2 = omdEquationNode.fromString('y = 2x + 1');
|
|
400
|
-
|
|
401
|
-
canvas.addNode(eq1);
|
|
402
|
-
canvas.addNode(eq2);
|
|
403
|
-
|
|
404
|
-
// Enable dragging
|
|
405
|
-
canvas.enableDragging();
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
---
|
|
409
|
-
|
|
410
|
-
## Complete Working Example
|
|
411
|
-
|
|
412
|
-
```html
|
|
413
|
-
<!DOCTYPE html>
|
|
414
|
-
<html lang="en">
|
|
415
|
-
<head>
|
|
416
|
-
<meta charset="UTF-8">
|
|
417
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
418
|
-
<title>OMD Complete Example</title>
|
|
419
|
-
<style>
|
|
420
|
-
body {
|
|
421
|
-
font-family: 'Albert Sans', sans-serif;
|
|
422
|
-
padding: 20px;
|
|
423
|
-
max-width: 1200px;
|
|
424
|
-
margin: 0 auto;
|
|
425
|
-
}
|
|
426
|
-
.container {
|
|
427
|
-
width: 100%;
|
|
428
|
-
height: 500px;
|
|
429
|
-
border: 2px solid #e0e0e0;
|
|
430
|
-
border-radius: 8px;
|
|
431
|
-
margin: 20px 0;
|
|
432
|
-
padding: 20px;
|
|
433
|
-
background: #fafafa;
|
|
434
|
-
}
|
|
435
|
-
h2 {
|
|
436
|
-
color: #2C3E50;
|
|
437
|
-
}
|
|
438
|
-
</style>
|
|
439
|
-
</head>
|
|
440
|
-
<body>
|
|
441
|
-
<h1>OMD Demonstration</h1>
|
|
442
|
-
|
|
443
|
-
<h2>Equation with Steps</h2>
|
|
444
|
-
<div id="equation-container" class="container"></div>
|
|
445
|
-
|
|
446
|
-
<h2>Coordinate Plane</h2>
|
|
447
|
-
<div id="plane-container" class="container"></div>
|
|
448
|
-
|
|
449
|
-
<h2>Visualizations</h2>
|
|
450
|
-
<div id="viz-container" class="container"></div>
|
|
451
|
-
|
|
452
|
-
<script type="module">
|
|
453
|
-
import {
|
|
454
|
-
omdDisplay,
|
|
455
|
-
omdEquationNode,
|
|
456
|
-
omdEquationStack,
|
|
457
|
-
omdCoordinatePlane,
|
|
458
|
-
omdNumberLine
|
|
459
|
-
} from '@teachinglab/omd';
|
|
460
|
-
|
|
461
|
-
// 1. Equation with steps
|
|
462
|
-
const eqDisplay = new omdDisplay(
|
|
463
|
-
document.getElementById('equation-container')
|
|
464
|
-
);
|
|
465
|
-
|
|
466
|
-
const steps = [
|
|
467
|
-
omdEquationNode.fromString('2x + 3 = 11'),
|
|
468
|
-
omdEquationNode.fromString('2x = 8'),
|
|
469
|
-
omdEquationNode.fromString('x = 4')
|
|
470
|
-
];
|
|
471
|
-
|
|
472
|
-
const stack = new omdEquationStack(steps, {
|
|
473
|
-
stepVisualizer: true
|
|
474
|
-
});
|
|
475
|
-
|
|
476
|
-
eqDisplay.render(stack);
|
|
477
|
-
|
|
478
|
-
// 2. Coordinate plane
|
|
479
|
-
const planeDisplay = new omdDisplay(
|
|
480
|
-
document.getElementById('plane-container')
|
|
481
|
-
);
|
|
482
|
-
|
|
483
|
-
const plane = new omdCoordinatePlane();
|
|
484
|
-
plane.loadFromJSON({
|
|
485
|
-
xMin: -10,
|
|
486
|
-
xMax: 10,
|
|
487
|
-
yMin: -10,
|
|
488
|
-
yMax: 10,
|
|
489
|
-
graphEquations: [
|
|
490
|
-
{ equation: 'y = x^2 - 4', color: '#e11d48', strokeWidth: 2 },
|
|
491
|
-
{ equation: 'y = 2x + 1', color: '#3B82F6', strokeWidth: 2 }
|
|
492
|
-
],
|
|
493
|
-
xLabel: "x",
|
|
494
|
-
yLabel: "y"
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
planeDisplay.render(plane);
|
|
498
|
-
|
|
499
|
-
// 3. Number line
|
|
500
|
-
const vizDisplay = new omdDisplay(
|
|
501
|
-
document.getElementById('viz-container')
|
|
502
|
-
);
|
|
503
|
-
|
|
504
|
-
const numberLine = new omdNumberLine();
|
|
505
|
-
numberLine.loadFromJSON({
|
|
506
|
-
min: 0,
|
|
507
|
-
max: 10,
|
|
508
|
-
dotValues: [2, 5, 8],
|
|
509
|
-
label: "Number Line Example"
|
|
510
|
-
});
|
|
511
|
-
|
|
512
|
-
vizDisplay.render(numberLine);
|
|
513
|
-
</script>
|
|
514
|
-
</body>
|
|
515
|
-
</html>
|
|
516
|
-
```
|
|
517
|
-
|
|
518
|
-
---
|
|
519
|
-
|
|
520
|
-
## Next Steps
|
|
521
|
-
|
|
522
|
-
- **[Getting Started](./getting-started.md)** - Installation and setup
|
|
523
|
-
- **[Visualizations Guide](./visualizations.md)** - All visual components
|
|
524
|
-
- **[Equations Guide](./equations.md)** - Equation and expression details
|
|
525
|
-
- **[JSON Schemas](../json-schemas.md)** - Complete reference
|
|
1
|
+
# Quick Examples
|
|
2
|
+
|
|
3
|
+
A collection of ready-to-use code examples for common OMD use cases.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Basic Equations](#basic-equations)
|
|
8
|
+
- [Visualizations](#visualizations)
|
|
9
|
+
- [Step-by-Step Solutions](#step-by-step-solutions)
|
|
10
|
+
- [Advanced Features](#advanced-features)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Basic Equations
|
|
15
|
+
|
|
16
|
+
### Simple Equation
|
|
17
|
+
|
|
18
|
+
```javascript
|
|
19
|
+
import { omdDisplay, omdEquationNode } from '@teachinglab/omd';
|
|
20
|
+
|
|
21
|
+
const container = document.getElementById('container');
|
|
22
|
+
const display = new omdDisplay(container);
|
|
23
|
+
|
|
24
|
+
const equation = omdEquationNode.fromString('2x + 3 = 11');
|
|
25
|
+
display.render(equation);
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Expression
|
|
29
|
+
|
|
30
|
+
```javascript
|
|
31
|
+
import { omdExpression } from '@teachinglab/omd';
|
|
32
|
+
|
|
33
|
+
const expr = new omdExpression();
|
|
34
|
+
expr.loadFromJSON("3x^2 + 5x - 2");
|
|
35
|
+
display.render(expr);
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Quadratic Equation
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
const quadratic = omdEquationNode.fromString('x^2 - 5x + 6 = 0');
|
|
42
|
+
display.render(quadratic);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Visualizations
|
|
48
|
+
|
|
49
|
+
### Number Line
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
import { omdNumberLine } from '@teachinglab/omd';
|
|
53
|
+
|
|
54
|
+
const numberLine = new omdNumberLine();
|
|
55
|
+
numberLine.loadFromJSON({
|
|
56
|
+
min: 0,
|
|
57
|
+
max: 20,
|
|
58
|
+
dotValues: [5, 10, 15],
|
|
59
|
+
label: "Skip Counting by 5"
|
|
60
|
+
});
|
|
61
|
+
display.render(numberLine);
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Coordinate Plane with Function
|
|
65
|
+
|
|
66
|
+
```javascript
|
|
67
|
+
import { omdCoordinatePlane } from '@teachinglab/omd';
|
|
68
|
+
|
|
69
|
+
const plane = new omdCoordinatePlane();
|
|
70
|
+
plane.loadFromJSON({
|
|
71
|
+
xMin: -10,
|
|
72
|
+
xMax: 10,
|
|
73
|
+
yMin: -10,
|
|
74
|
+
yMax: 10,
|
|
75
|
+
graphEquations: [
|
|
76
|
+
{ equation: 'y = x^2 - 4', color: '#e11d48', strokeWidth: 2 }
|
|
77
|
+
],
|
|
78
|
+
xLabel: "x",
|
|
79
|
+
yLabel: "y"
|
|
80
|
+
});
|
|
81
|
+
display.render(plane);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Multiple Functions
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
plane.loadFromJSON({
|
|
88
|
+
xMin: -5,
|
|
89
|
+
xMax: 5,
|
|
90
|
+
yMin: -5,
|
|
91
|
+
yMax: 5,
|
|
92
|
+
graphEquations: [
|
|
93
|
+
{ equation: 'y = x^2', color: '#e11d48', strokeWidth: 2 },
|
|
94
|
+
{ equation: 'y = 2x + 1', color: '#3B82F6', strokeWidth: 2 },
|
|
95
|
+
{ equation: 'y = -x + 3', color: '#10B981', strokeWidth: 2 }
|
|
96
|
+
]
|
|
97
|
+
});
|
|
98
|
+
display.render(plane);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Tape Diagram
|
|
102
|
+
|
|
103
|
+
```javascript
|
|
104
|
+
import { omdTapeDiagram } from '@teachinglab/omd';
|
|
105
|
+
|
|
106
|
+
const tape = new omdTapeDiagram();
|
|
107
|
+
tape.loadFromJSON({
|
|
108
|
+
values: [4, 4, 4, 3],
|
|
109
|
+
colors: ["#FF6B6B", "#4ECDC4", "#45B7D1", "#FFA07A"],
|
|
110
|
+
showValues: true,
|
|
111
|
+
labelSet: [
|
|
112
|
+
{
|
|
113
|
+
startIndex: 0,
|
|
114
|
+
endIndex: 2,
|
|
115
|
+
label: "3 equal groups",
|
|
116
|
+
showBelow: false
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
startIndex: 0,
|
|
120
|
+
endIndex: 3,
|
|
121
|
+
label: "Total: 15",
|
|
122
|
+
showBelow: true
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
});
|
|
126
|
+
display.render(tape);
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Table from Equation
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
import { omdTable } from '@teachinglab/omd';
|
|
133
|
+
|
|
134
|
+
const table = new omdTable();
|
|
135
|
+
table.loadFromJSON({
|
|
136
|
+
equation: "y = 2x + 1",
|
|
137
|
+
headers: ["x", "y"],
|
|
138
|
+
xMin: -3,
|
|
139
|
+
xMax: 3,
|
|
140
|
+
stepSize: 1,
|
|
141
|
+
title: "Linear Function Table",
|
|
142
|
+
alternatingRowColors: ["#F0F0F0", "#FFFFFF"]
|
|
143
|
+
});
|
|
144
|
+
display.render(table);
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Step-by-Step Solutions
|
|
150
|
+
|
|
151
|
+
### Linear Equation Solution
|
|
152
|
+
|
|
153
|
+
```javascript
|
|
154
|
+
import { omdEquationStack, omdEquationNode } from '@teachinglab/omd';
|
|
155
|
+
|
|
156
|
+
const steps = [
|
|
157
|
+
omdEquationNode.fromString('3x + 5 = 20'),
|
|
158
|
+
omdEquationNode.fromString('3x = 15'),
|
|
159
|
+
omdEquationNode.fromString('x = 5')
|
|
160
|
+
];
|
|
161
|
+
|
|
162
|
+
const stack = new omdEquationStack(steps, {
|
|
163
|
+
toolbar: true,
|
|
164
|
+
stepVisualizer: true
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
display.render(stack);
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Quadratic Factoring
|
|
171
|
+
|
|
172
|
+
```javascript
|
|
173
|
+
const quadraticSteps = [
|
|
174
|
+
omdEquationNode.fromString('x^2 + 5x + 6 = 0'),
|
|
175
|
+
omdEquationNode.fromString('(x + 2)(x + 3) = 0'),
|
|
176
|
+
omdEquationNode.fromString('x = -2 or x = -3')
|
|
177
|
+
];
|
|
178
|
+
|
|
179
|
+
const stack = new omdEquationStack(quadraticSteps);
|
|
180
|
+
display.render(stack);
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### With Explanations
|
|
184
|
+
|
|
185
|
+
```javascript
|
|
186
|
+
const stepsWithExplanations = [
|
|
187
|
+
{
|
|
188
|
+
node: omdEquationNode.fromString('2(x + 3) = 14'),
|
|
189
|
+
explanation: 'Original equation'
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
node: omdEquationNode.fromString('2x + 6 = 14'),
|
|
193
|
+
explanation: 'Distribute the 2'
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
node: omdEquationNode.fromString('2x = 8'),
|
|
197
|
+
explanation: 'Subtract 6 from both sides'
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
node: omdEquationNode.fromString('x = 4'),
|
|
201
|
+
explanation: 'Divide both sides by 2'
|
|
202
|
+
}
|
|
203
|
+
];
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Advanced Features
|
|
209
|
+
|
|
210
|
+
### Rational Expressions
|
|
211
|
+
|
|
212
|
+
```javascript
|
|
213
|
+
import { omdRationalExpression } from '@teachinglab/omd';
|
|
214
|
+
|
|
215
|
+
const rational = new omdRationalExpression();
|
|
216
|
+
rational.loadFromJSON({
|
|
217
|
+
numeratorExpression: {
|
|
218
|
+
termsAndOpers: [
|
|
219
|
+
{ omdType: "variable", name: "x" },
|
|
220
|
+
{ omdType: "operator", operator: "+" },
|
|
221
|
+
{ omdType: "number", value: 1 }
|
|
222
|
+
]
|
|
223
|
+
},
|
|
224
|
+
denominatorExpression: {
|
|
225
|
+
termsAndOpers: [
|
|
226
|
+
{ omdType: "term", coefficient: 1, variable: "x", exponent: 2 },
|
|
227
|
+
{ omdType: "operator", operator: "-" },
|
|
228
|
+
{ omdType: "number", value: 1 }
|
|
229
|
+
]
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
display.render(rational);
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Power Expressions
|
|
236
|
+
|
|
237
|
+
```javascript
|
|
238
|
+
import { omdPowerExpression } from '@teachinglab/omd';
|
|
239
|
+
|
|
240
|
+
const power = new omdPowerExpression();
|
|
241
|
+
power.loadFromJSON({
|
|
242
|
+
baseExpression: {
|
|
243
|
+
termsAndOpers: [
|
|
244
|
+
{ omdType: "variable", name: "x" },
|
|
245
|
+
{ omdType: "operator", operator: "+" },
|
|
246
|
+
{ omdType: "number", value: 1 }
|
|
247
|
+
]
|
|
248
|
+
},
|
|
249
|
+
exponentExpression: {
|
|
250
|
+
omdType: "number",
|
|
251
|
+
value: 2
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
display.render(power);
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Function Definition
|
|
258
|
+
|
|
259
|
+
```javascript
|
|
260
|
+
import { omdFunction } from '@teachinglab/omd';
|
|
261
|
+
|
|
262
|
+
const func = new omdFunction();
|
|
263
|
+
func.loadFromJSON({
|
|
264
|
+
name: "f",
|
|
265
|
+
inputVariables: ["x"],
|
|
266
|
+
expression: {
|
|
267
|
+
termsAndOpers: [
|
|
268
|
+
{ omdType: "term", coefficient: 2, variable: "x", exponent: 2 },
|
|
269
|
+
{ omdType: "operator", operator: "-" },
|
|
270
|
+
{ omdType: "term", coefficient: 3, variable: "x" },
|
|
271
|
+
{ omdType: "operator", operator: "+" },
|
|
272
|
+
{ omdType: "number", value: 1 }
|
|
273
|
+
]
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
display.render(func);
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Coordinate Plane with Shapes
|
|
280
|
+
|
|
281
|
+
```javascript
|
|
282
|
+
const planeWithShapes = new omdCoordinatePlane();
|
|
283
|
+
planeWithShapes.loadFromJSON({
|
|
284
|
+
xMin: -5,
|
|
285
|
+
xMax: 5,
|
|
286
|
+
yMin: -5,
|
|
287
|
+
yMax: 5,
|
|
288
|
+
shapeSet: [
|
|
289
|
+
{
|
|
290
|
+
omdType: 'circle',
|
|
291
|
+
radius: 2,
|
|
292
|
+
color: '#FF6B6B'
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
omdType: 'rectangle',
|
|
296
|
+
width: 3,
|
|
297
|
+
height: 2,
|
|
298
|
+
color: '#4ECDC4'
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
omdType: 'regularPolygon',
|
|
302
|
+
sides: 6,
|
|
303
|
+
radius: 1.5,
|
|
304
|
+
color: '#45B7D1'
|
|
305
|
+
}
|
|
306
|
+
],
|
|
307
|
+
dotValues: [
|
|
308
|
+
[0, 0, "red"],
|
|
309
|
+
[2, 2, "blue"],
|
|
310
|
+
[-2, -2, "green"]
|
|
311
|
+
]
|
|
312
|
+
});
|
|
313
|
+
display.render(planeWithShapes);
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Tile Equation
|
|
317
|
+
|
|
318
|
+
```javascript
|
|
319
|
+
import { omdTileEquation } from '@teachinglab/omd';
|
|
320
|
+
|
|
321
|
+
const tileEq = new omdTileEquation();
|
|
322
|
+
tileEq.loadFromJSON({
|
|
323
|
+
left: ["x", "x", 3],
|
|
324
|
+
right: [11],
|
|
325
|
+
equation: "2x + 3 = 11",
|
|
326
|
+
tileSize: 30,
|
|
327
|
+
showLabels: true,
|
|
328
|
+
fontFamily: "Albert Sans"
|
|
329
|
+
});
|
|
330
|
+
display.render(tileEq);
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Custom Configuration
|
|
334
|
+
|
|
335
|
+
```javascript
|
|
336
|
+
import { omdConfigManager, omdDisplay } from '@teachinglab/omd';
|
|
337
|
+
|
|
338
|
+
// Set global configuration
|
|
339
|
+
omdConfigManager.setConfig({
|
|
340
|
+
defaultFontSize: 32,
|
|
341
|
+
defaultColor: '#2C3E50',
|
|
342
|
+
highlightColor: '#FFD700'
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
// Create display with custom options
|
|
346
|
+
const display = new omdDisplay(container, {
|
|
347
|
+
fontSize: 36,
|
|
348
|
+
centerContent: true,
|
|
349
|
+
fontFamily: 'Georgia'
|
|
350
|
+
});
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### Programmatic Expression Building
|
|
354
|
+
|
|
355
|
+
```javascript
|
|
356
|
+
function createPolynomial(coefficients) {
|
|
357
|
+
const termsAndOpers = [];
|
|
358
|
+
|
|
359
|
+
coefficients.forEach((coef, index) => {
|
|
360
|
+
const exponent = coefficients.length - index - 1;
|
|
361
|
+
|
|
362
|
+
if (index > 0 && coef >= 0) {
|
|
363
|
+
termsAndOpers.push({ omdType: "operator", operator: "+" });
|
|
364
|
+
} else if (coef < 0) {
|
|
365
|
+
termsAndOpers.push({ omdType: "operator", operator: "-" });
|
|
366
|
+
coef = Math.abs(coef);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (exponent === 0) {
|
|
370
|
+
termsAndOpers.push({ omdType: "number", value: coef });
|
|
371
|
+
} else {
|
|
372
|
+
termsAndOpers.push({
|
|
373
|
+
omdType: "term",
|
|
374
|
+
coefficient: coef,
|
|
375
|
+
variable: "x",
|
|
376
|
+
exponent: exponent
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
return { termsAndOpers };
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// Create x² + 3x - 4
|
|
385
|
+
const expr = new omdExpression();
|
|
386
|
+
expr.loadFromJSON(createPolynomial([1, 3, -4]));
|
|
387
|
+
display.render(expr);
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Interactive Canvas
|
|
391
|
+
|
|
392
|
+
```javascript
|
|
393
|
+
import { omdCanvas } from '@teachinglab/omd';
|
|
394
|
+
|
|
395
|
+
const canvas = new omdCanvas(container);
|
|
396
|
+
|
|
397
|
+
// Add multiple components
|
|
398
|
+
const eq1 = omdEquationNode.fromString('y = x^2');
|
|
399
|
+
const eq2 = omdEquationNode.fromString('y = 2x + 1');
|
|
400
|
+
|
|
401
|
+
canvas.addNode(eq1);
|
|
402
|
+
canvas.addNode(eq2);
|
|
403
|
+
|
|
404
|
+
// Enable dragging
|
|
405
|
+
canvas.enableDragging();
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## Complete Working Example
|
|
411
|
+
|
|
412
|
+
```html
|
|
413
|
+
<!DOCTYPE html>
|
|
414
|
+
<html lang="en">
|
|
415
|
+
<head>
|
|
416
|
+
<meta charset="UTF-8">
|
|
417
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
418
|
+
<title>OMD Complete Example</title>
|
|
419
|
+
<style>
|
|
420
|
+
body {
|
|
421
|
+
font-family: 'Albert Sans', sans-serif;
|
|
422
|
+
padding: 20px;
|
|
423
|
+
max-width: 1200px;
|
|
424
|
+
margin: 0 auto;
|
|
425
|
+
}
|
|
426
|
+
.container {
|
|
427
|
+
width: 100%;
|
|
428
|
+
height: 500px;
|
|
429
|
+
border: 2px solid #e0e0e0;
|
|
430
|
+
border-radius: 8px;
|
|
431
|
+
margin: 20px 0;
|
|
432
|
+
padding: 20px;
|
|
433
|
+
background: #fafafa;
|
|
434
|
+
}
|
|
435
|
+
h2 {
|
|
436
|
+
color: #2C3E50;
|
|
437
|
+
}
|
|
438
|
+
</style>
|
|
439
|
+
</head>
|
|
440
|
+
<body>
|
|
441
|
+
<h1>OMD Demonstration</h1>
|
|
442
|
+
|
|
443
|
+
<h2>Equation with Steps</h2>
|
|
444
|
+
<div id="equation-container" class="container"></div>
|
|
445
|
+
|
|
446
|
+
<h2>Coordinate Plane</h2>
|
|
447
|
+
<div id="plane-container" class="container"></div>
|
|
448
|
+
|
|
449
|
+
<h2>Visualizations</h2>
|
|
450
|
+
<div id="viz-container" class="container"></div>
|
|
451
|
+
|
|
452
|
+
<script type="module">
|
|
453
|
+
import {
|
|
454
|
+
omdDisplay,
|
|
455
|
+
omdEquationNode,
|
|
456
|
+
omdEquationStack,
|
|
457
|
+
omdCoordinatePlane,
|
|
458
|
+
omdNumberLine
|
|
459
|
+
} from '@teachinglab/omd';
|
|
460
|
+
|
|
461
|
+
// 1. Equation with steps
|
|
462
|
+
const eqDisplay = new omdDisplay(
|
|
463
|
+
document.getElementById('equation-container')
|
|
464
|
+
);
|
|
465
|
+
|
|
466
|
+
const steps = [
|
|
467
|
+
omdEquationNode.fromString('2x + 3 = 11'),
|
|
468
|
+
omdEquationNode.fromString('2x = 8'),
|
|
469
|
+
omdEquationNode.fromString('x = 4')
|
|
470
|
+
];
|
|
471
|
+
|
|
472
|
+
const stack = new omdEquationStack(steps, {
|
|
473
|
+
stepVisualizer: true
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
eqDisplay.render(stack);
|
|
477
|
+
|
|
478
|
+
// 2. Coordinate plane
|
|
479
|
+
const planeDisplay = new omdDisplay(
|
|
480
|
+
document.getElementById('plane-container')
|
|
481
|
+
);
|
|
482
|
+
|
|
483
|
+
const plane = new omdCoordinatePlane();
|
|
484
|
+
plane.loadFromJSON({
|
|
485
|
+
xMin: -10,
|
|
486
|
+
xMax: 10,
|
|
487
|
+
yMin: -10,
|
|
488
|
+
yMax: 10,
|
|
489
|
+
graphEquations: [
|
|
490
|
+
{ equation: 'y = x^2 - 4', color: '#e11d48', strokeWidth: 2 },
|
|
491
|
+
{ equation: 'y = 2x + 1', color: '#3B82F6', strokeWidth: 2 }
|
|
492
|
+
],
|
|
493
|
+
xLabel: "x",
|
|
494
|
+
yLabel: "y"
|
|
495
|
+
});
|
|
496
|
+
|
|
497
|
+
planeDisplay.render(plane);
|
|
498
|
+
|
|
499
|
+
// 3. Number line
|
|
500
|
+
const vizDisplay = new omdDisplay(
|
|
501
|
+
document.getElementById('viz-container')
|
|
502
|
+
);
|
|
503
|
+
|
|
504
|
+
const numberLine = new omdNumberLine();
|
|
505
|
+
numberLine.loadFromJSON({
|
|
506
|
+
min: 0,
|
|
507
|
+
max: 10,
|
|
508
|
+
dotValues: [2, 5, 8],
|
|
509
|
+
label: "Number Line Example"
|
|
510
|
+
});
|
|
511
|
+
|
|
512
|
+
vizDisplay.render(numberLine);
|
|
513
|
+
</script>
|
|
514
|
+
</body>
|
|
515
|
+
</html>
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## Next Steps
|
|
521
|
+
|
|
522
|
+
- **[Getting Started](./getting-started.md)** - Installation and setup
|
|
523
|
+
- **[Visualizations Guide](./visualizations.md)** - All visual components
|
|
524
|
+
- **[Equations Guide](./equations.md)** - Equation and expression details
|
|
525
|
+
- **[JSON Schemas](../json-schemas.md)** - Complete reference
|