matrepl/README.md
2021-03-04 21:40:06 +01:00

1.9 KiB
Raw Blame History

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)

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
  • variable declaration eg: a= ... vector(1,2,3,4) adds a vector, vector(1 2) as well. The start is now the origin. commas are not mandatory. I'm planning to add a more mathematical notation for vectors: [1 2]
    • > vector@0{x0:1, y0: 2, x:3, y:4}

  • 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)
  • method calls: a = vector(12,1)

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

  • properties
  • a.type

    > vector

  • property lookup 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.
  • enter the following:
    a = vector(0.5, 0.5)
    b = vector(-1, 1)
    c = "a+b"
    
  • and press enter. Then using the mouse pointer move 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()