code: function(v) {
              var v0 = v.x;
              var v1 = v.y;
              var v2 = 0;
              var v3 = 1;
              var x = v0 * this.elements[0] + v1 * this.elements[1] + v2 * this.elements[2] + v3 * this.elements[3];
              var y = v0 * this.elements[4] + v1 * this.elements[5] + v2 * this.elements[6] + v3 * this.elements[7];
              var z = v0 * this.elements[8] + v1 * this.elements[9] + v2 * this.elements[10] + v3 * this.elements[11];
              var w = v0 * this.elements[12] + v1 * this.elements[13] + v2 * this.elements[14] + v3 * this.elements[15];
              // scale such that fourth element becomes 1:
              if (w != 1) {
                  var invw = 1.0 / w;
                  x *= invw;
                  y *= invw;
                  z *= invw;
              }
              return new CSG.Vector2D(x, y);
          }
docs: Right multiply the matrix by a CSG.Vector2D (interpreted as 2 row, 1 column) (result = M*v) Fourth element is taken as 1