mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-10-08 16:49:38 +02:00
31 lines
588 B
JavaScript
31 lines
588 B
JavaScript
/**
|
|
* @param node
|
|
* @param rx
|
|
* @param ry
|
|
* @param point
|
|
*/
|
|
function intersectEllipse(node, rx, ry, point) {
|
|
// Formulae from: https://mathworld.wolfram.com/Ellipse-LineIntersection.html
|
|
|
|
var cx = node.x;
|
|
var cy = node.y;
|
|
|
|
var px = cx - point.x;
|
|
var py = cy - point.y;
|
|
|
|
var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);
|
|
|
|
var dx = Math.abs((rx * ry * px) / det);
|
|
if (point.x < cx) {
|
|
dx = -dx;
|
|
}
|
|
var dy = Math.abs((rx * ry * py) / det);
|
|
if (point.y < cy) {
|
|
dy = -dy;
|
|
}
|
|
|
|
return { x: cx + dx, y: cy + dy };
|
|
}
|
|
|
|
export default intersectEllipse;
|