translated = {
let x0 = triangle[0].x,
y0 = triangle[0].y,
dx1 = triangle[1].x - x0,
dx2 = triangle[2].x - x0,
dy1 = triangle[1].y - y0,
dy2 = triangle[2].y - y0,
a = 1 / (dx1 * dy2 - dx2 * dy1),
b = 1 / (dx2 * dy1 - dx1 * dy2),
psi = [
[a * dy2, -a * dx2],
[b * dy1, -b * dx1]
];
let forward = (x, y) => {
let vx = x - x0,
vy = y - y0;
return {
x: psi[0][0] * vx + psi[0][1] * vy,
y: psi[1][0] * vx + psi[1][1] * vy
};
};
let backward = (x, y) => {
let vx = dx1 * x + dx2 * y,
vy = dy1 * x + dy2 * y;
return {
bx: vx + x0,
by: vy + y0
};
};
let nodes = [];
triangle.map(({ x, y, i }) => {
nodes.push(
Object.assign(
{ i, type: "triangle", class: "translated", color: "red" },
forward(x, y)
)
);
});
let obj;
points.map((pnt) => {
obj = Object.assign(
{ i: pnt.i, type: "point", class: "translated" },
forward(pnt.x, pnt.y)
);
nodes.push(obj);
Object.assign(pnt, backward(obj.x, obj.y));
});
return nodes;
}