public static iArc ArcFromPoints(iPointOnSpline p1, iPointOnSpline p2, iPointOnSpline p3) { double cX, cY, r; CercleFromPoints(p1, p2, p3, out cX, out cY, out r); return(new iArc(new iPoint(cX, cY), r, p1, p2, p3)); }
public static void CercleFromPoints2(iPointOnSpline p1, iPointOnSpline p2, iPointOnSpline p3, out double cX, out double cY, out double cZ, out double r) { try { MathCircArc arc = MathHelper.Mu.CreateCircArcBy3Points(p1.MathPoint(), p2.MathPoint(), p2.MathPoint()); arc.Center.GetPosition(out cX, out cY, out cZ); r = arc.Radius; } catch (Exception e) { Log.Write(e); cX = 0; cY = 0; cZ = 0; r = 0; } }
public static void CercleFromPoints(iPointOnSpline p1, iPointOnSpline p2, iPointOnSpline p3, out double cX, out double cY, out double r) { double offset = Math.Pow(p2.X, 2) + Math.Pow(p2.Y, 2); double bc = (Math.Pow(p1.X, 2) + Math.Pow(p1.Y, 2) - offset) / 2.0; double cd = (offset - Math.Pow(p3.X, 2) - Math.Pow(p3.Y, 2)) / 2.0; double det = (p1.X - p2.X) * (p2.Y - p3.Y) - (p2.X - p3.X) * (p1.Y - p2.Y); //if (Math.Abs(det) < 0.0000000001) { throw new Exception("Les points sont alignés"); } double idet = 1 / det; cX = (bc * (p2.Y - p3.Y) - cd * (p1.Y - p2.Y)) * idet; cY = (cd * (p1.X - p2.X) - bc * (p2.X - p3.X)) * idet; r = Math.Sqrt(Math.Pow(p2.X - cX, 2) + Math.Pow(p2.Y - cY, 2)); }
public double DistanceDe3D(iPointOnSpline pt) { return(Math.Sqrt(Math.Pow(pt.X - X, 2) + Math.Pow(pt.Y - Y, 2) + Math.Pow(pt.Z - Z, 2))); }
public double DistanceDe2D(iPointOnSpline pt) { return(Math.Abs(pt.DistanceDe2D(Centre) - Rayon)); }
public iArc(iPoint centre, double rayon, iPointOnSpline p1, iPointOnSpline p2, iPointOnSpline p3) { Centre = centre; Rayon = rayon; P1 = p1; P2 = p2; P3 = p3; }
public iLine(iPointOnSpline p1, iPointOnSpline p2) { P1 = p1; P2 = p2; }
public static MathPoint MathPoint(this iPointOnSpline pt) { return(Mu.CreatePoint(pt.X, pt.Y, pt.Z)); }