/// <summary> /// Нахождение уравнение прямых, ограничивающих документ на исправленном изображении. /// </summary> /// <param name="points">Список особых точек на исправленном изображении</param> private static List <EquationLine> MakeEquationsLines(List <Point> points) { var result = new List <EquationLine>(); for (int i = 0; i < 3; i++) { var eqLine = new EquationLine(points[i], points[i + 1], TypeEquation.TwoPoint); result.Add(eqLine); } var eqLine4 = new EquationLine(points[3], points[0], TypeEquation.TwoPoint); result.Add(eqLine4); return(result); }
/// <summary> /// Поиск точки пересечения 2 прямых(Особой точки). /// </summary> /// <param name="equation1">Уравнение 1ой прямой</param> /// <param name="equation2">Уравнение 2ой прямой</param> private static Tuple <Point, bool> SearchIntersection(EquationLine equation1, EquationLine equation2) { var a1 = equation1.A; var a2 = equation2.A; var b1 = equation1.B; var b2 = equation2.B; var c1 = -equation1.C; var c2 = -equation2.C; if (Math.Abs(a1 * b2 - b1 * a2) < epsilon) { return(Tuple.Create(new Point(0, 0), false)); } var x = (c1 - c2 * b1 / b2) / (a1 - a2 * b1 / b2); var y = (c2 - x * a2) / b2; return(Tuple.Create(new Point((int)x, (int)y), true)); }