constraint-solver-js
Version:
2D rigid body constraint solver written in typescript.
56 lines (55 loc) • 2.27 kB
JavaScript
import { addVectors, rotateVector, substractVectors } from "./vector-utils.js";
/**
* Translate a a position (x,y) from the global
* coordinate system, to a relative coordinate system
* @param {{x: number, y: number}} globalPos global position to translate
* @param {{x: number, y: number}} relCordOrigin position of the relative
* coordinate system
* @param {number} relCordRot rotation of the relative coordinate system in
* radians.
*
* @returns {{x: number, y: number}} position in the relative coordinate system
*/
export function globalToRelativePos(globalPos, relCordOrigin, relCordRot) {
const translatedPos = substractVectors(globalPos, relCordOrigin);
const translatedRotatedPos = rotateVector(translatedPos, -relCordRot);
return translatedRotatedPos;
}
/**
* Translate a position (x,y) from a relative coordinate system
* to the global coordinate system.
* @param {{x: number, y: number}} relPos relative position to translate
* @param {{x: number, y: number}} relCordOrigin position of the relatieve
* coordinate system
* @param {number} relCordRot rotation of the relative coordinate system in
* radians.
*
* @returns {{x: number, y: number}} position in the global coordinate system
*/
export function relativeToGlobalPos(relPos, relCordOrigin, relCordRot = 0) {
const rotPos = rotateVector(relPos, relCordRot);
const translatedRotatedPos = addVectors(rotPos, relCordOrigin);
return translatedRotatedPos;
}
/**
* Translate a vector (x,y) from a relative coordinate system to the
* global coordinate system.
* @param relVector Relative vector
* @param relCordRot Rotation of the relative coordinate system in radians.
* @returns vector in global coordinate system
*/
export function relativeToGlobalVector(relVector, relCordRot) {
const rotVec = rotateVector(relVector, relCordRot);
return rotVec;
}
/**
* Translate a vector (x,y) from the global coordinate system to a relative
* coordinate system
* @param relVector Global vector
* @param relCordRot Rotation of the relative coordinate system in radians.
* @returns vector in relative coordinate system.
*/
export function globalToRelativeVec(vector, relCordRot) {
const rotVec = rotateVector(vector, -relCordRot);
return rotVec;
}