Видео:4.3 Вид треугольника. "Поколение Python": курс для начинающих. Курс StepikСкачать
Python Basic — 1: Упражнение 40 с решением
Напишите программу на Python, чтобы проверить, находится ли точка (x, y) в треугольнике или нет. Существует треугольник, образованный тремя точками.
Входные данные :
x1, y1, x2, y2, x3, y3, xp, yp, разделенные одним пробелом.
Пример решения :
Код Python:
Блок — схема:
Редактор кода Python:
Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.
Каков уровень сложности этого упражнения?
Видео:#26. Треугольник Паскаля как пример работы вложенных циклов | Python для начинающихСкачать
Определение принадлежности точки треугольнику
Дано: у нас есть треугольник, нам известны только координаты его вершин. У нас есть точка, нам известны её координаты.
Что нужно узнать: нужно установить принадлежность точки треугольнику.
В данной статье разбирается несколько разных методов определения принадлежности точки треугольнику.
Видео:Алгоритмы. Попадание точки в треугольникСкачать
Метод сравнения площадей
В данном методе сначала находятся площади 3-х треугольников, которые образует данная точка с каждой стороной треугольника. В нашем случае(рис. 1) это треугольники ABP, BCP, CAP и их площади s1, s2, s3 соответственно.
Затем находится площадь самого треугольника ABC.
Найденный площади сравниваются — если сумма 3-х площадей равна площади всего треугольника, то значит точка принадлежит треугольнику. При сравнении, как правило, задаётся погрешность.
Так как у нас известны только координаты точек, то все площади, находятся по формуле Герона, от обильности операций которой становится ясно, почему этот метод очень трудоёмкий.
Простейшая реализация алгоритма:
Атрибуты функции: aAx, aAy, aBx, aBy, aCx, aCy — координаты точек A, B, C треугольника; aPx, aPy — координаты точки, принадлежность которой надо определить.
Видео:Попадание точки в заданную область. Два сектора. Уроки программирования на С++.Скачать
Метод относительности
Данный метод заключается в следующем. Сначала выбирается ориентация движения по вершинам треугольника(по часовой или против часовой стрелке). Я выбираю по часовой. На рисунке 2 выбранная ориентация движения(по часовой) показана стрелками. По данной ориентации проходим все стороны треугольника, рассматривая их как прямые, и рассчитываем по какую сторону от текущей прямой лежит наша точка. Не трудно догадаться, что если точка для всех прямых, при нашей ориентации, лежит с правой стороны, то значит точка принадлежит треугольнику, а если хоть для какой-то прямой она лежит с левой стороны, то значит условие принадлежности не выполняется.
На рисунке 2 продемонстрирована ситуация, когда точка только для одной прямой AB лежит по левую сторону, а значит не принадлежит треугольнику.
Видео:Определяем тип треугольника в PythonСкачать
Всё относительно!
Тут надо кое что пояснить, весьма не маловажное, что может сыграть роль в оптимизации и выборе алгоритма. Обратите внимание, что в приведённом коде есть закомментированные блоки кода с комментариями «для строгой ориентации», в то время как рабочий код универсален — он предназначен для любой ориентации. Т.е. представленный код определит принадлежность точки для любого заданного треугольника. В моей тестирующей программе треугольники как раз таки строятся по random()-у координат вершин, а ориентация идёт по вершинам(A>B>C>A). Для рисунка 2 — это по часовой стрелки, но для рисунка 3 — это против часовой.
Так вот, в случае рисунка 3 точка должна лежать по левую сторону векторов, чтобы принадлежать треугольнику.
Вот тут и получается важный момент! Если вы уверены, что в вашем проекте все треугольники будут ориентированы по часовой стрелке(а т.е. вершина C будет всегда правее вектора AB), то вам можно закомментировать блок универсального решения и раскомментировать блок «для строгой ориентации по часовой» и данный алгоритм упрощается аж на 3 логических операции!
Видео:4.2 Принадлежность 1. "Поколение Python": курс для начинающих. Курс StepikСкачать
Векторный метод
Третий метод который я освещаю для меня самый интересный.
Идея его применения зарождается если взглянуть на треугольник как на половинку параллелограмма…
Данный метод я сначала проверил на бумаге. После всех оптимизаций формул, как всё сошлось, я реализовал его в коде, где он показал себя вполне успешным и результативным. Аж эффективнее 2-х предыдущих методов :]
1) одну вершину треугольника помещаем в координаты (0;0);
2) две стороны, выходящие из этой вершины, представляем как вектора.
Таким образом из всего этого появляется система простых условий нахождения точки P между векторами b и c.(рис. 4)
Рис. 4.
Видео:4.2 Принадлежность 3. "Поколение Python": курс для начинающих. Курс StepikСкачать
Принадлежность точки треугольнику python
Принадлежность произвольной точки полигону
Определение принадлежности точки произвольному полигону по координатам
В вычислительной геометрии известна задача об определении принадлежности точки полигону. На плоскости даны полигон и точка. Требуется решить вопрос о принадлежности точки полигону.
Полигон может быть, как выпуклым, так и невыпуклым. Обычно предполагается, что полигон простой, т.е. без самопересечений, но задачу рассматривают и для непростых полигонов. В последнем случае разные способы определения принадлежности точки полигону могут привести к разным результатам. Различают алгоритмы без предварительной обработки и алгоритмы с предварительной обработкой, в ходе которой создаются некоторые структуры данных, позволяющие в дальнейшем быстрее отвечать на множество запросов о принадлежности точек одному и тому же полигону.
Метод сравнения площадей
Вычисления и сравнения площадей треугольников заменяются вычислениями и сравнениями их удвоенных площадей. Тем самым исключается погрешность округления при программной реализации всего алгоритма, в целом.
В данном методе сначала находятся площади трёх треугольников, которые образует произвольная точка с каждой стороной треугольника.
Затем находится площадь самого полигона. Найденные площади сравниваются — если сумма трёх площадей равна площади всего полигона, то значит точка принадлежит полигону.
- ввод координат точки в виде кортежей вида (x, y);
- определить принадлежности точки полигону;
Входные данные | Выходные данные |
True | |
True | |
False | |
True | |
True | |
True | |
True | |
False | |
False | |
False | |
True | |
True |
Полученный мною опыт
- Опыт работы с языком Python 3;
- Обработка исключений при неправильном вводе входных параметров;
- Вспомнил школьный курс геометрии.
Видео:33 Задача: Принадлежит ли точка кругу с центром в начале координат?Скачать
About
Определение принадлежности точки произвольному полигону по координатам
💡 Видео
Алгоритмы. Попадание точки в кругСкачать
ПРОГА для 6 ЗАДАНИЯ на PYTHON, которая сама СЧИТАЕТ ТОЧКИ! | ЕГЭ по информатике 2023Скачать
Алгоритмы Поиска Пути на Python. Алгоритм А*, Дейкстры, Поиск в ширину [ Pygame ]Скачать
4.2 Неравенство треугольника. "Поколение Python": курс для начинающих. Курс StepikСкачать
4.3 Пересечение отрезков. "Поколение Python": курс для начинающих. Курс StepikСкачать
Определение принадлежности точки x отрезку [a,b] на языке программирования Паскаль с условиемСкачать
Программирование на С++. Урок 11. Попадает ли точка в заштрихованную область 2.Скачать
Определить принадлежность точки Д310Скачать
Точка пересечения медиан в треугольникеСкачать
Решение простых задач на python | Площадь и периметр прямоугольного треугольникаСкачать
Программирование на С++. Урок 10. Попадает ли точка в заштрихованную областьСкачать
Попадание точки в заданную область. Круг в круге. Уроки программирования на С++.Скачать