示例#1
0
        /// <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);
        }
示例#2
0
        /// <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));
        }