static float PLdistance(Point3D c, Point3D a, Point3D b) { Point3D ab = b - a; Point3D ac = c - a; float f = Point3D.dotsProduct(ab, ac); if (f + FloatCmp.EPS < 0) { return(Point3D.distance(c, a)); } float d = Point3D.dotsProduct(ab, ab); if (f > d) { return(Point3D.distance(c, b)); } f = f / d; Point3D D = a + f * ab; // c在ab线段上的投影点 return(Point3D.distance(c, D)); }
public static bool CircleIntersect(Circle c1, Circle c2) { /*float distance=(float)Math.Sqrt((c1.c.coord[0]-c2.c.coord[0])*(c1.c.coord[0]-c2.c.coord[0]) +(c1.c.coord[1]-c2.c.coord[1])*(c1.c.coord[1]-c2.c.coord[1]) +(c1.c.coord[2]-c2.c.coord[2])*(c1.c.coord[2]-c2.c.coord[2]));*/ if (Point3D.distance(c1.c, c2.c) <= c1.r + c2.r) { return(true); } else { return(false); } }