intersect-ellipse.js 516 B

123456789101112131415161718192021222324
  1. function intersectEllipse (node, rx, ry, point) {
  2. // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html
  3. const cx = node.x
  4. const cy = node.y
  5. const px = cx - point.x
  6. const py = cy - point.y
  7. const det = Math.sqrt(rx * rx * py * py + ry * ry * px * px)
  8. let dx = Math.abs(rx * ry * px / det)
  9. if (point.x < cx) {
  10. dx = -dx
  11. }
  12. let dy = Math.abs(rx * ry * py / det)
  13. if (point.y < cy) {
  14. dy = -dy
  15. }
  16. return {x: cx + dx, y: cy + dy}
  17. }
  18. export default intersectEllipse