简体   繁体   中英

How to find the radius of a circle given three points in 3d space C#

I have locations of three points along the circle. pt1(x1, y1,z1) , pt2(x2, y2, z2) , pt3(x3, y3,z3) . and want to find the radius of the circle. Already I have a function to compute radius in 2d space, which I am copying it here

public static double ComputeRadius(Location a, Location b, Location c)
        {
            double x1 = a.x;
            double y1 = a.y;
            double x2 = b.x;
            double y2 = b.y;
            double x3 = c.x;
            double y3 = c.y;
            double mr = (double)((y2 - y1) / (x2 - x1));
            double mt = (double)((y3 - y2) / (x3 - x2));

            double xc = (double)((mr * mt * (y3 - y1) + mr * (x2 + x3) - mt * (x1 + x2)) / (2 * (mr - mt)));

            double yc = (double)((-1 / mr) * (xc - (x1 + x2) / 2) + (y1 + y2) / 2);
            double d = (xc - x1) * (xc - x1) + (yc - y1) * (yc - y1);

            return Math.Sqrt(d);
        }

If you know the order of points pt1,pt2,pt3 along the circle then you can use graphical method:

  1. cast normal axises from middle of each line segment in the plane of circle

    your circle plane is defined by your 3 points. so the normal vector is

     n = (pt2-pt1) x (pt3-pt2) 

    where the x is cross product so you have 2 lines (pt1,pt2) and (pt2,pt3) in black. The mid points are easy

     p0=0.5*(pt1+pt2) p1=0.5*(pt2+pt3) 

    the axis directions can be obtained also by cross product

     dp0=(pt2-pt1) xn dp1=(pt3-pt2) xn 

    so you got 2 axises:

     pnt0(t)=p0+dp0*t pnt1(u)=p1+dp1*u 

    Where t,u are scalar parameters t,u=(-inf,+inf) it is just position in axis from the starting mid point ...

  2. the intersection is center of circle

    So find the intersection of 2 axises and call it pt0

  3. compute distance between center and any of your points

     r=|pt1-pt0| 

曲线半径

Sorry the image is for any curve (too lazy to repaint for circle as it is almost the same). If you do not know the order of points then the 2 points that are most distant to each other are the outer points ... In case they are equidistant the order does not matter any is OK

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM