public Arc(Point basePoint, Point endPoint, Line normalLine) { if (basePoint != endPoint && !new Direction(basePoint, endPoint).IsPerpendicularTo(normalLine.Direction)) { throw new GeometricException(); } var projected = basePoint.ProjectOntoLine(normalLine); if (projected == basePoint) { throw new GeometricException(); } this.BasePoint = basePoint; this.EndPoint = endPoint; this.CenterPoint = projected; this.NormalDirection = normalLine.Direction; }