| 1234567891011121314151617181920212223242526272829303132 |
- function intersectRect (node, point) {
- const x = node.x
- const y = node.y
- // Rectangle intersection algorithm from:
- // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes
- const dx = point.x - x
- const dy = point.y - y
- let w = node.width / 2
- let h = node.height / 2
- let sx, sy
- if (Math.abs(dy) * w > Math.abs(dx) * h) {
- // Intersection is top or bottom of rect.
- if (dy < 0) {
- h = -h
- }
- sx = dy === 0 ? 0 : h * dx / dy
- sy = h
- } else {
- // Intersection is left or right of rect.
- if (dx < 0) {
- w = -w
- }
- sx = w
- sy = dx === 0 ? 0 : w * dy / dx
- }
- return {x: x + sx, y: y + sy}
- }
- export default intersectRect
|