@foblex/flow
Version:
An Angular library designed to simplify the creation and manipulation of dynamic flow. Provides components for flows, nodes, and connections, automating node manipulation and inter-node connections.
19 lines • 3.84 kB
JavaScript
export function calculateDifferenceAfterRotation(position, rotation, pivot) {
const { x: newX, y: newY } = calculatePositionAfterRotation(position, rotation, pivot);
const dx = newX - position.x;
const dy = newY - position.y;
return { x: dx, y: dy };
}
export function calculatePositionAfterRotation(position, rotation, pivot) {
const translatedX = position.x - pivot.x;
const translatedY = position.y - pivot.y;
const theta = rotation * Math.PI / 180;
const cosTheta = Math.cos(theta);
const sinTheta = Math.sin(theta);
const rotatedX = translatedX * cosTheta - translatedY * sinTheta;
const rotatedY = translatedX * sinTheta + translatedY * cosTheta;
const newX = rotatedX + pivot.x;
const newY = rotatedY + pivot.y;
return { x: newX, y: newY };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLWRpZmZlcmVuY2UtYWZ0ZXItcm90YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2YtZHJhZ2dhYmxlL2Ytbm9kZS1yb3RhdGUvY2FsY3VsYXRlLWRpZmZlcmVuY2UtYWZ0ZXItcm90YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLGdDQUFnQyxDQUM5QyxRQUFrQyxFQUNsQyxRQUFnQixFQUNoQixLQUErQjtJQUcvQixNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsOEJBQThCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV2RixNQUFNLEVBQUUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLEVBQUUsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUU3QixPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsUUFBa0MsRUFDbEMsUUFBZ0IsRUFDaEIsS0FBK0I7SUFFL0IsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUV6QyxNQUFNLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFFdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpDLE1BQU0sUUFBUSxHQUFHLFdBQVcsR0FBRyxRQUFRLEdBQUcsV0FBVyxHQUFHLFFBQVEsQ0FBQztJQUNqRSxNQUFNLFFBQVEsR0FBRyxXQUFXLEdBQUcsUUFBUSxHQUFHLFdBQVcsR0FBRyxRQUFRLENBQUM7SUFFakUsTUFBTSxJQUFJLEdBQUcsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFaEMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRGlmZmVyZW5jZUFmdGVyUm90YXRpb24oXG4gIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXG4gIHJvdGF0aW9uOiBudW1iZXIsXG4gIHBpdm90OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1cbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG5cbiAgY29uc3QgeyB4OiBuZXdYLCB5OiBuZXdZIH0gPSBjYWxjdWxhdGVQb3NpdGlvbkFmdGVyUm90YXRpb24ocG9zaXRpb24sIHJvdGF0aW9uLCBwaXZvdCk7XG5cbiAgY29uc3QgZHggPSBuZXdYIC0gcG9zaXRpb24ueDtcbiAgY29uc3QgZHkgPSBuZXdZIC0gcG9zaXRpb24ueTtcblxuICByZXR1cm4geyB4OiBkeCwgeTogZHkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVBvc2l0aW9uQWZ0ZXJSb3RhdGlvbihcbiAgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSxcbiAgcm90YXRpb246IG51bWJlcixcbiAgcGl2b3Q6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfVxuKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHtcbiAgY29uc3QgdHJhbnNsYXRlZFggPSBwb3NpdGlvbi54IC0gcGl2b3QueDtcbiAgY29uc3QgdHJhbnNsYXRlZFkgPSBwb3NpdGlvbi55IC0gcGl2b3QueTtcblxuICBjb25zdCB0aGV0YSA9IHJvdGF0aW9uICogTWF0aC5QSSAvIDE4MDtcblxuICBjb25zdCBjb3NUaGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgY29uc3Qgc2luVGhldGEgPSBNYXRoLnNpbih0aGV0YSk7XG5cbiAgY29uc3Qgcm90YXRlZFggPSB0cmFuc2xhdGVkWCAqIGNvc1RoZXRhIC0gdHJhbnNsYXRlZFkgKiBzaW5UaGV0YTtcbiAgY29uc3Qgcm90YXRlZFkgPSB0cmFuc2xhdGVkWCAqIHNpblRoZXRhICsgdHJhbnNsYXRlZFkgKiBjb3NUaGV0YTtcblxuICBjb25zdCBuZXdYID0gcm90YXRlZFggKyBwaXZvdC54O1xuICBjb25zdCBuZXdZID0gcm90YXRlZFkgKyBwaXZvdC55O1xuXG4gIHJldHVybiB7IHg6IG5ld1gsIHk6IG5ld1kgfTtcbn1cblxuIl19