A JavaScript function that returns the x,y points of intersection between two circles?

前端 未结 1 1392
轻奢々
轻奢々 2020-11-30 03:34

\"enter

I got the (x,y) center location of two circles and their radius but I need to

相关标签:
1条回答
  • 2020-11-30 03:58

    Translated the C function on the site to JavaScript:

    function intersection(x0, y0, r0, x1, y1, r1) {
            var a, dx, dy, d, h, rx, ry;
            var x2, y2;
    
            /* dx and dy are the vertical and horizontal distances between
             * the circle centers.
             */
            dx = x1 - x0;
            dy = y1 - y0;
    
            /* Determine the straight-line distance between the centers. */
            d = Math.sqrt((dy*dy) + (dx*dx));
    
            /* Check for solvability. */
            if (d > (r0 + r1)) {
                /* no solution. circles do not intersect. */
                return false;
            }
            if (d < Math.abs(r0 - r1)) {
                /* no solution. one circle is contained in the other */
                return false;
            }
    
            /* 'point 2' is the point where the line through the circle
             * intersection points crosses the line between the circle
             * centers.  
             */
    
            /* Determine the distance from point 0 to point 2. */
            a = ((r0*r0) - (r1*r1) + (d*d)) / (2.0 * d) ;
    
            /* Determine the coordinates of point 2. */
            x2 = x0 + (dx * a/d);
            y2 = y0 + (dy * a/d);
    
            /* Determine the distance from point 2 to either of the
             * intersection points.
             */
            h = Math.sqrt((r0*r0) - (a*a));
    
            /* Now determine the offsets of the intersection points from
             * point 2.
             */
            rx = -dy * (h/d);
            ry = dx * (h/d);
    
            /* Determine the absolute intersection points. */
            var xi = x2 + rx;
            var xi_prime = x2 - rx;
            var yi = y2 + ry;
            var yi_prime = y2 - ry;
    
            return [xi, xi_prime, yi, yi_prime];
        }
    
    0 讨论(0)
提交回复
热议问题