39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
|
import * as GA from "./ga";
|
||
|
import { Line, Direction, Point, Transform } from "./ga";
|
||
|
import * as GADirection from "./gadirections";
|
||
|
|
||
|
/**
|
||
|
* TODO: docs
|
||
|
*/
|
||
|
|
||
|
export function rotation(pivot: Point, angle: number): Transform {
|
||
|
return GA.add(GA.mul(pivot, Math.sin(angle / 2)), Math.cos(angle / 2));
|
||
|
}
|
||
|
|
||
|
export function translation(direction: Direction): Transform {
|
||
|
return [1, 0, 0, 0, -(0.5 * direction[5]), 0.5 * direction[4], 0, 0];
|
||
|
}
|
||
|
|
||
|
export function translationOrthogonal(
|
||
|
direction: Direction,
|
||
|
distance: number,
|
||
|
): Transform {
|
||
|
const scale = 0.5 * distance;
|
||
|
return [1, 0, 0, 0, scale * direction[4], scale * direction[5], 0, 0];
|
||
|
}
|
||
|
|
||
|
export function translationAlong(line: Line, distance: number): Transform {
|
||
|
return GA.add(GA.mul(GADirection.orthogonalToLine(line), 0.5 * distance), 1);
|
||
|
}
|
||
|
|
||
|
export function compose(motor1: Transform, motor2: Transform): Transform {
|
||
|
return GA.mul(motor2, motor1);
|
||
|
}
|
||
|
|
||
|
export function apply(
|
||
|
motor: Transform,
|
||
|
nvector: Point | Direction | Line,
|
||
|
): Point | Direction | Line {
|
||
|
return GA.normalized(GA.mul(GA.mul(motor, nvector), GA.reverse(motor)));
|
||
|
}
|