Exemple #1
0
        public bool MyPointBelong(MyPoint D)
        {
            bool result = false;
            // Найдем 3 треугольника, который получатся при добавлении точки.
            MyTriangle first = new MyTriangle(A, B, D);
            MyTriangle second = new MyTriangle(B, C, D);
            MyTriangle third = new MyTriangle(A, C, D);

            // А теперь немного заморочек со случаем, когда 3 точки лежат на 1 линии, и это уже фиговый треугольник.
            if (!first.is_correct() || !second.is_correct() || !third.is_correct())
            {
                if (!first.is_correct() && !D.is_between(A, B))
                    return false;
                if (!first.is_correct() && D.is_between(A, B))
                    return true;
                if (!second.is_correct() && !D.is_between(D, C))
                    return false;
                if (!second.is_correct() && D.is_between(D, C))
                    return true;
                if (!third.is_correct() && !D.is_between(A, C))
                    return false;
                if (!third.is_correct() && D.is_between(A, C))
                    return true;
            }

            double s1 = square;
            double s2 = first.square + second.square + third.square;
            double dif = s1 - s2;
            if (dif < 0)
                dif *= -1;
            // Ну если сумма площадей равна, то все хорошо
            if (dif < coefficient_error)
            {
                result = true;
            }

            return result;
        }