No description
Find a file
Sander Hautvast b412b11941 fixed test
2021-03-09 17:22:26 +01:00
cypress fixed test 2021-03-09 17:22:26 +01:00
src fixed test 2021-03-09 17:22:26 +01:00
.eslintrc.js Added webpack, eslint and first cypress test. Improved file structure and added imports 2021-02-15 18:11:52 +01:00
.gitignore Added webpack, eslint and first cypress test. Improved file structure and added imports 2021-02-15 18:11:52 +01:00
cypress.json Added webpack, eslint and first cypress test. Improved file structure and added imports 2021-02-15 18:11:52 +01:00
package-lock.json added webpack html plugin 2021-03-05 11:38:47 +01:00
package.json added webpack html plugin 2021-03-05 11:38:47 +01:00
README.md commas remain mandatory for separating values. Will do spaces later 2021-03-09 15:31:20 +01:00
screenshot.png added defaults for the origin 2021-02-18 22:44:28 +01:00
webpack.config.js fix for undefined, back to production mode 2021-03-05 19:43:38 +01:00

MatRepl

  • is a Matrix
  • and a repl: ReadEvalPrint Loop, where Print is doing operations on vectors and matrices in a graphic environment
  • written in vanilla javascript (ES6)
  • see live at https://matrepl.net

add 2 vectors

The repl has the following syntax (It's work in progress, new capabilities will be added)

  • arithmetic expressions:

    • add(+), subtract(-), divide(/), multiply(*) on scalars, vectors and matrices.
  • variable declaration eg: a = 1 + 2

  • remove(x) removes bindings (when it's an object (eg vector), removes it from the matrix)

  • remove(@n) removes an object using it's assigned index (n is a number)

    • By the way, values can be bound to a name (assigned to a variable), but you can always also refer to them using their id, using : @n
    • so a = vector(1,1)

    > vector@0{x0:0, y0: 1, x:1, y:1}

    • and then @0

    > vector@0{x0:0, y0: 1, x:1, y:1}

  • method calls: a = vector(12, 1) works as well. The start is now the origin.

    > vector@0{x0:0, y0: 2, x:12, y:1}

    vector(-1 -1) != vector(-1-1) and the latter would mean vector(-2) which is not legal.

  • arrays: [i0, i1, i2, ... in] creates an array.

    • [i0, i1] is special: it is a shorthand for creating a 2-dimensional vector. I'll have to think of another way to create an array of length 2...
  • properties

    • a = [1,2]
    • a.type

    > vector

    • a.x+1

    > 13

  • drag vectors using the mouse pointer. You can change the vector arrows visually

  • lazy evaluation. The difference between c = a+b and c = "a+b" is that the latter assigns to c a parsed expression that can always be evaluated later. When you apply lazy evaluation and later update a, the value for c will be reevaluated automatically. Combined with vector dragging, this way you can get an intuition for vector addition. Want to do the same for matrix multiplication and basis change.

  • Example: enter the following, like in the screenshot:

    a = vector(0.5, 0.5)
    b = vector(-1, 1)
    c = "a + b"
    
  • and press enter. Then using the mouse pointer move vector a or b. Or try: a = 2 * a This updates vector a to twice it's size. And, because c is defined lazily, it is updated as well!

To run locally

  • make sure you have node/npm
  • cmdline: npm run start
  • and enter help()