Exemple #1
0
        public Arc(Vec startPt, Vec endPt, Vec ptOnArc)
        {
            Vec midPt1 = Vec.Multiply(Vec.Sum(endPt, ptOnArc), 0.5);
            Vec midPt2 = Vec.Multiply(Vec.Sum(startPt, ptOnArc), 0.5);

            Vec seg1 = Vec.Difference(ptOnArc, startPt);
            Vec seg2 = Vec.Difference(endPt, ptOnArc);

            Vec planeZ = Vec.Cross(seg1, seg2);

            Vec rad1 = Vec.Cross(planeZ, seg1);
            Vec rad2 = Vec.Cross(planeZ, seg2);

            Vec center = Vec.IntersectLines(midPt1, rad1, midPt2, rad2);
            Vec planeX = Vec.Difference(startPt, center);
            Vec planeY = Vec.Cross(planeZ, planeX);

            _plane      = new Plane(center, planeX, planeY, planeZ);
            _radius     = Vec.Difference(center, startPt).Length;
            _startAngle = 0;
            _endAngle   = 2 * Vec.AngleBetween(rad1, rad2);
        }