public Point[] IntersectLinePoints(Line line) { double a = Math.Pow(line.A, 2) + Math.Pow(line.B, 2); double b = 2 * (line.A * line.C - Center.X * Math.Pow(line.B, 2) + Center.Y * line.A * line.B); double c = Math.Pow(line.B * Center.X, 2) + Math.Pow(line.C, 2) + 2 * Center.Y * line.B * line.C + Math.Pow(Center.Y * line.B, 2) - Math.Pow(Radius * line.B, 2); List<Point> result = new List<Point>(); foreach (double X in Calculating.QuadraticEquation(a, b, c)) { double lineY = line.GetY(X); foreach (double Y in this.GetY(X)) { if (Calculating.DoubleEquals(Y, lineY)) { result.Add(new Point(X, Y)); } } } return result.ToArray(); }