public ArcInterpolation(Point3D origin, float radius, Point3D end, bool clockwise) { _origin = origin; _end = end; _clockwise = clockwise; _radius = radius; _plane = GetPlane(origin, end); _centers = CalculateCenters(origin, end, radius, _plane); _offset = RoundOffsets(CalculateOffsets(origin, _centers)); _angles = RoundAngles(CalculateAngles(origin, end, _centers, _plane)); if (!_clockwise && _angles.StartingAngle >= _angles.EndAngle) { _angles.EndAngle += 360; } }
public ArcInterpolation(Point3D origin, ArcCenters centers, Point3D end, bool clockwise) { _origin = origin; _centers = centers ?? throw new ArgumentNullException(paramName: nameof(centers)); _end = end; _clockwise = clockwise; _plane = GetPlane(); _radius = CalculateRadius(_plane); _offset = CalculateOffsets(origin, centers); _angles = CalculateAngles(origin, end, centers, _plane); if (!_clockwise && _angles.StartingAngle >= _angles.EndAngle) { _angles.EndAngle += 360; } }
private ArcAngles CalculateAngles(Point3D start, Point3D end, ArcCenters centers, Plane plane) { ArcAngles result; double catetA, catetB, angleStart, angleEnd; switch (plane) { case Plane.XY: catetA = start.X - (centers.I.Value + start.X); catetB = start.Y - (centers.J.Value + start.Y); angleStart = Math.Atan2(catetB, catetA) * (180 / Math.PI); catetA = end.X - (centers.I.Value + start.X); catetB = end.Y - (centers.J.Value + start.Y); angleEnd = Math.Atan2(catetB, catetA) * (180 / Math.PI); break; case Plane.XZ: catetA = start.X - (centers.I.Value + start.X); catetB = start.Z - (centers.K.Value + start.Z); angleStart = Math.Atan2(catetB, catetA) * (180 / Math.PI); catetA = end.X - (centers.I.Value + start.X); catetB = end.Z - (centers.K.Value + start.Z); angleEnd = Math.Atan2(catetB, catetA) * (180 / Math.PI); break; case Plane.YZ: catetA = start.Y - (centers.J.Value + start.Y); catetB = start.Z - (centers.K.Value + start.Z); angleStart = Math.Atan2(catetB, catetA) * (180 / Math.PI); catetA = end.Y - (centers.J.Value + start.Y); catetB = end.Z - (centers.K.Value + start.Z); angleEnd = Math.Atan2(catetB, catetA) * (180 / Math.PI); break; case Plane.Unknown: default: throw new InvalidOperationException(ResourcesStrings.UnknownPlane); } result = new ArcAngles(angleStart, angleEnd); return(result); }
private ArcAngles RoundAngles(ArcAngles arcAngles) { arcAngles.StartingAngle = Math.Round(arcAngles.StartingAngle, 3); arcAngles.EndAngle = Math.Round(arcAngles.EndAngle, 3); return(arcAngles); }