Проверка попадания точки в заданную область

Дана точка на плоскости с координатами (х, у). Составить блок-схему алгоритма, который выдает сообщение "Да" если точка лежит внутри заштрихованной области, "Нет" – если точка лежит вне заштрихованной области, "На границе" – если точка лежит на границе заштрихованной области.


Заранее всем большое спасибо за помощь! 🙂

2. Уравнение прямой уже написано. Решением будет y>x и y Остальные ответы

гЕМША МБВПТБФПТОПК ТБВПФЩ СЧМСЕФУС РПМХЮЕОЙЕ РТБЛФЙЮЕУЛЙИ ОБЧЩЛПЧ Ч ТБВПФЕ У ХУМПЧОЩН ПРЕТБФПТПН Й ТБЪЧЕФЧМЕООЩНЙ БМЗПТЙФНБНЙ Ч СЪЩЛЕ C.

2. фЕНЩ ДМС РТЕДЧБТЙФЕМШОПК РТПТБВПФЛЙ

  • МПЗЙЮЕУЛЙЕ ПРЕТБГЙЙ
  • ХУМПЧОЩК ПРЕТБФПТ

3. ъБДБОЙС ДМС ЧЩРПМОЕОЙС

рПУФТПЙФШ РТПЗТБННХ, ЛПФПТБС ЧЧПДЙФ ЛППТДЙОБФЩ ФПЮЛЙ (x, y) Й ПРТЕДЕМСЕФ, РПРБДБЕФ МЙ ФПЮЛБ Ч ЪБЫФТЙИПЧБООХА ПВМБУФШ ОБ ТЙУХОЛЕ, ЛПФПТЩК УППФЧЕФУФЧХЕФ чБЫЕНХ ЧБТЙБОФХ. рПРБДБОЙЕ ОБ ЗТБОЙГХ ПВМБУФЙ УЮЙФБФШ РПРБДБОЙЕН Ч ПВМБУФШ.

В вычислительной геометрии известна задача об определении принадлежности точки многоугольнику. На плоскости даны многоугольник и точка. Требуется решить вопрос о принадлежности точки многоугольнику.

Многоугольник может быть как выпуклым, так и невыпуклым. Обычно предполагается, что многоугольник простой, т.е. без самопересечений, но задачу рассматривают и для не-простых многоугольников. В последнем случае разные способы определения принадлежности точки многоугольнику могут привести к разным результатам. Различают алгоритмы без предварительной обработки и алгоритмы с предварительной обработкой, в ходе которой создаются некоторые структуры данных, позволяющие в дальнейшем быстрее отвечать на множество запросов о принадлежности точек одному и тому же многоугольнику.

Читайте также  Самый дешевый монитор 240 герц

Алгоритм определяет точки границ многоугольника как точки, ему принадлежащие.

Содержание

Описание [ править ]

Для того чтобы все результаты вычислений в программе могли быть представлены целочисленными переменными (манипулирование данными целого типа повышает быстродействие программы и является естественным для приложений компьютерной графики), вычисления и сравнения площадей треугольников заменяются вычислениями и сравнениями их удвоенных площадей. Тем самым исключается погрешность округления при программной реализации всего алгоритма, в целом.

Аргументами функции, реализующей проверку принадлежности данной точки данному многоугольнику произвольного вида, являются

  • указатель на массив пар целочисленных координат вершин многоугольника, а именно, на массив структур вида
  • число вершин многоугольника;
  • целочисленное значение координаты X заданной точки;
  • целочисленное значение координаты Y заданной точки.

Функция возвращает 1, если точка принадлежит многоугольнику, иначе — 0.

Функция имеет следующий вид.

Очень быстрый алгоритм [ править ]

В основе алгоритма лежит идея подсчёта количества пересечений луча, исходящего из данной точки в направлении горизонтальной оси, со сторонами многоугольника. Если оно чётное, точка не принадлежит многоугольнику. В данном алгоритме луч направлен влево.

Замечание: Так как умножение быстрее деления, условие можно записать так:

Однако, стоит заметить, что данный алгоритм не эквивалентен предыдущему, поэтому его использование может привести к неправильным результатам.

Perl [ править ]

Delphi (Object Pascal) [ править ]

JavaScript [ править ]

Python 3 [ править ]

На Python программа несколько отличается от других языков в сторону компактности из-за особенностей адресации элементов массива. Не нужны дополнительные переменные. Не работает с многоугольниками вогнутого типа

Быстрый алгоритм для случая, когда луч пересекает одну или несколько вершин [ править ]

Функция Cross определяет, пересекает ли луч j-ое ребро многоугольника:

Фрагмент основной программы:

Если переменная count примет нечетное значение, то точка лежит внутри многоугольника. В противном случает точка лежит вне заданого многоугольника.

Читайте также  Самый мощный карманный фонарик

Замечание: В данной реализации алгоритма луч направлен вниз.

Ссылка на основную публикацию
Adblock
detector