Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
 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);
     }
 }