как узнать принадлежит ли точка плоскости

Принадлежность точки и прямой плоскости

Признаки принадлежности хорошо известны из курса планиметрии. Наша задача рассмотреть их применительно к проекциям геометрических объектов.

Точка принадлежит плоскости, если она принадлежит прямой, лежащей в этой плоскости.

Принадлежность прямой плоскости определяется по одному из двух признаков:

а) прямая проходит через две точки, лежащие в этой плоскости;

б) прямая проходит через точку и параллельна прямой, лежащим в этой плоскости.

Используя эти свойства, решим в качестве примера задачу. Пусть плоскость задана треугольником АВС. Требуется построить недостающую проекцию D1 точки D, принадлежащей этой плоскости. Последовательность построений следующая (рис. 2.5).

Через точку D2 проводим проекцию прямой d, лежащей в плоскости DАВС, пересекающую одну из сторон треугольника и точку А2. Тогда точка 12 принадлежит прямым А2D2 и C2В2. Следовательно, можно получить ее горизонтальную проекцию 11 на C1В1 по линии связи. Соединив точки 11 и А1, получаем горизонтальную проекцию d1. Ясно, что точка D1 принадлежит ей и лежит на линии проекционной связи с точкой D2.

Достаточно просто решаются задачи на определение принадлежности точки или прямой плоскости. На рис. 2.6 показан ход решения таких задач. Для наглядности изложения задачи плоскость задаем треугольником.

Рис. 2.6. Задачи на определение принадлежности точки и прямой плоскости.

Для того, чтобы определить принадлежит ли точка Е плоскости DАВС, проведем через ее фронтальную проекцию Е2 прямую а2. Считая, что прямая а принадлежит плоскости DАВС, построим ее горизонтальную проекцию а1 по точкам пересечения 1 и 2. Как видим (рис. 2.6, а), прямая а1 не проходит через точку Е1. Следовательно, точка Е ÏDАВС.

В задаче на принадлежность прямой в плоскости треугольника АВС (рис. 2.6, б), достаточно по одной из проекций прямой в2 построить другую в1* считая, что вÌDАВС. Как видим, в1* и в1 не совпадают. Следовательно, прямая в Ë DАВС.

Источник

Методы определения принадлежности точки многоугольнику

Недавно на хабре была статья, в которой описывалось как можно определить, где находится точка по отношению к многоугольнику: внутри или снаружи. Подобная проблема встречается в геометрическом моделировании и в компьютерной графике достаточно часто. А так как метод, описанный в статье, был несколько не оптимален, а в комментариях был небольшой хаос, возникла мысль написать эту статью. Итак, какие алгоритмы существуют в современной компьютерной графике, чтобы определить, принадлежит ли заданная точка многоугольнику или нет.

Прежде, чем начать, хочу сразу описать проблему. Хотя сама проблема проста: у нас задан набор точек и задан порядок, в котором эти точки соединяются. И задана точка, которую мы тестируем на принадлежность. Подразумевается, что у нас многоугольник замкнутый, и в общем случае ребра многоугольника не пересекаются друг с другом, то есть он избавлен от самопересечений. Ограничений на количество вершин нет, то есть легко может быть задан многоугольник с миллионом вершин. Мы надеемся, что пользователь не задаст нам непонятно что, но и гарантировать это тоже не можем. И еще один нюанс: так как мы работаем с компьютерной графикой, что означает, что мы используем арифметику с плавающей точкой, которая хотя и позволяет оперировать с числами достаточно точно, все равно не избавлена от ошибок.

Ну вроде определились с проблемой, давайте теперь посмотрим, какие методы решения существуют.

Метод 1. Трассировка лучей

Начну я с того, который считается наиболее популярным в мире графики и игр: трассировка лучей. Вкратце, алгоритм можно описать следующим образом:

Метод простой, но, к сожалению, в общем случае его лучше не применять. Причиной этого является случай, когда мы пересекаем лучом вершину многоугольника или ребро, которое частично совпадает с лучом. Иллюстрирую это на примере.

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

Посмотрим в другом направлении. Отправили луч в отрицательном направлении. Там тоже не очень хорошо – луч пересекает вершину внутри многоугольника. Тоже может оказаться что угодно. Вместо горизонтального направления взять вертикальное? Никто не гарантирует, что вы опять не пересечете вершину. В конкретно выбранном мной примере наверху точка подобрана таким образом, что пересечение ее с лучом, параллельным оси y и идущий сверху вниз тоже пересекает многоугольник в вершине.

Причем если вы думаете, что пересечение с вершиной – это плохо, смотрите что еще может произойти:

Здесь мы пересекаем луч с отрезком, который с этим лучом совпадает. Как быть в таком случае? А если не совпадает, а почти совпадает? А представьте себе, что в многоугольнике множество почти вырожденных ребер, как с таким пересекать?

Самое печальное во всей этой ситуации то, что нам вот кажется: «мне надо что-то очень простое для моих простых целей, меня такая ситуация не коснется». По закону Мерфи, к сожалению, именно такая ситуация возникает всякий раз когда ее совсем не ждешь. И поэтому я плавно перехожу ко второму методу.

Читайте также:  актеры фильма мушкетеры русский

Метод 2. Ближняя точка и ее нормаль

Вообще у этого метода есть страшное название angle weighted pseudo normals и связан он в понятием так называемых полей расстояний со знаком (signed distance fields). Но пугать лишний раз я никого не хочу, так что пусть будет просто ближняя точка и ее нормаль (то есть перпендикулярный вектор).

Алгоритм в данном случае такой:

Рассмотрим пример. Точка A1, ближайшая точка для нее находится на ребре. Если все делаем правильно, нормаль к ребру параллельна вектору от тестируемой точки до ближайшей. В случае точки A1, угол между векторами = 0. Или почти нуль, так как из-за операций с плавающей точкой все возможно. Меньше 90 градусов, тестируемая точка A1 – внутри. Протестируем точку A2. У нее ближайшая точка – вершина, нормаль к которой – усредненная нормаль ребер прилегающих к этой вершине. Считаем скалярное произведение двух векторов, должно быть отрицательным. Мы – снаружи.

Так, вроде бы с сутью метода разобрались. Что там с производительностью и проблемами, связанной с плавающей точкой?

Как и в случае трассировки точек, производительность – O(log n), если использовать деревья для хранения информации о ребрах. С вычислительной точки зрения метод, хотя и имеет подобную сложность, будет несколько помедленнее, чем трассировка. Прежде всего оттого, что расстояние между точкой и ребром чуть более дорогостоящая операция, чем пересечение двух линий. Неприятности, связанные с плавающей точкой, возникают в этом методе, как правило недалеко от ребер многоугольника. Причем чем мы ближе к ребру, тем больше вероятность неправильного определения знака. К счастью, чем мы ближе к ребру, тем меньше расстояние. То есть если мы, например, говорим, что если полученное расстояние меньше заранее заданного минимального (это может быть константа вроде DBL_EPSILON или FLT_EPSILON), то точка принадлежит ребру. А если она принадлежит ребру, то мы уже сами решаем, часть ли многоугольника его ребро или нет (как правило – часть).

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

Но в целом метод неплох, особенно если у нас на входе многоугольник с большим количеством вершин и ребер, а точек на принадлежность надо протестировать много. Если же точек мало, трассировка лучей нестабильна, а хочется чего-то более-менее надежного, то есть и третий способ.

Метод 3. Индекс точки относительно многоугольника

Этот метод известен довольно давно, но в основном остается теоретическим, по большей части потому, что он не так эффективен, как предыдущие два. Вот его суть «на пальцах». Возьмем единичную окружность с центром в тестируемой точке. Потом каждую вершину многоугольника спроецируем на эту окружность лучами, которые проходят через вершину и тестируемую точку. Как-то примерно так:

На рисунке точки P1, P2 и так далее – вершины многоугольника, а точки P1’, P2’ и так далее – их проекции на окружность. Теперь когда мы рассматриваем ребро многоугольника, по проекциям можно определить, происходит ли вращение против часовой стрелки или по часовой стрелке при переходе от одной вершины к другой. Вращение против часовой стрелки будем считать положительным поворотом, а вращение по часовой стрелке – отрицательным. Угол, который соответствует каждому ребру – это угол между сегментами окружности через проекции вершин этого ребра. Так как поворот у нас может быть положительный или отрицательный, то и угол может быть положительный или отрицательный.

Алгоритм в этом случае следующий:

Рассмотрим пример. Есть многоугольник, порядок которого установлен против часовой стрелки. Есть точка А, которую мы тестируем. Для тестирования сначала вычисляем угол между векторами AP1 и AP2. Векторное произведение этих же векторов смотрит на нас, значит прибавляем к сумме. Переходим дальше и считаем угол между AP2 и AP3. Векторное произведение смотрит на нас, полученный угол вычитаем. И так далее.

Для конкретно этого рисунка я все посчитал и вот что получилось:

(AP1, AP2)=74.13, (AP2, AP3)=51.58, (AP3, AP4)=89.99, (AP4, AP5)=126.47, (AP5, AP1)=120.99.
sum=74.13-51.58+89.99+126.47+120.99=360. 360/360=1 Точка – внутри.

(BP1, BP2)=44.78, (BP2, BP3)=89.11, (BP3, BP4)=130.93, (BP4, BP5)=52.97, (BP5, BP1)=33.63.
sum=-44.78+89.11-130.93+52.97+33.63=0. Точка – снаружи.

И традиционно опишем плюсы и минусы данного подхода. Начнем с минусов. Метод прост математически, но не так-то эффективен с точки зрения производительности. Во-первых, его алгоритмическая сложность O(n) и, как ни крути, а все ребра многоугольника придется перебрать. Во-вторых, для вычисления угла придётся воспользоваться операцией арккосинуса и двумя операциями взятия корня (формула скалярного произведения и связь его с углом тем в помощь, кто не понимает, почему). Эти операции очень недешевы с точки зрения скорости, и, к тому же, погрешности связанные с ними могут быть существенны. И в третьих, алгоритм напрямую не определяет точку, лежащую на ребре. Либо – снаружи, либо – внутри. Третьего не дано. Впрочем, последний недостаток легко определяется: если хотя бы один из углов равен (или почти равен) 180 градусам, это автоматически означает ребро.

Читайте также:  как узнать первого вступившего в группу вк

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

Чем бы хотелось закончить этот обзор? А тем, что методов для решения проблемы определения принадлежности точки многоугольнику существует не один и даже не два. Они служат для разных целей и некоторые более подходят в случаях, когда важна скорость, другие – когда важно качество. Ну и не забываем о том, что у нас непредсказуемые входные данные и мы работаем с компьютером, у которого арифметика с плавающей точкой подвержена погрешностям. Если нужна скорость и качество совершенно неважно – трассировка лучей в помощь. В большинстве реальных приложений скорее всего поможет метод ближней точки и нормали. Если же на первом месте – точность определения при непонятных входных данных, метод индекса точки должен помочь.

Если будут какие-то вопросы, задавайте. Как человек, занимающийся геометрией и подобными проблемами связанными с графикой, буду рад помочь чем смогу.

Источник

Признаки принадлежности точки и прямой плоскости

Для определения принадлежности точки и прямой плоскости, расположенной в пространстве, следует руководствоваться следующими ‘ положениями:

· точка принадлежит плоскости, если через нее можно провести линию, лежащую в плоскости;

· прямая принадлежит плоскости, если она имеет с плоскостью хотя бы две общие точки;

· прямая принадлежит плоскости, если она проходит через точку данной плоскости параллельно прямой, принадлежащей этой плоскости.

Через одну точку на плоскости можно провести бесконечное множество линий. Это могут быть произвольные линии и линии, занимающие особое положение по отношению к плоскостям проекций П1 П2, П3.Прямая, принадлежащая рассматриваемой плоскости, проведенная параллельно горизонтальной плоскости проекций, называется горизонталью плоскости.

Прямая, принадлежащая рассматриваемой плоскости, проведенная параллельно фронтальной плоскости проекций, называется фронталью плоскости.

Горизонталь и фронталь являются линиями уровня.

Горизонталь плоскости следует начинать строить с фронтальной проекции, т.к. она параллельна оси x, горизонтальная проекция горизонтали параллельна горизонтальному следу плоскости.

А так как все горизонтали плоскости параллельны между собой, можно считать горизонтальный след плоскости нулевой горизонталью (рис. 5.8).

К линии уровня относится и профильная прямая, лежащая в заданной плоскости и параллельная П3.

К главным линиям особого положения в плоскости, кроме линии уровня, относятся линии наибольшего наклонаплоскости к плоскости проекций.

Определение угла наклона плоскости

К плоскостям проекций

Источник

Принадлежность точки и прямой плоскости

Признаки принадлежности хорошо известны из курса планиметрии. Наша задача рассмотреть их применительно к проекциям геометрических объектов.

Точка принадлежит плоскости, если она принадлежит прямой, лежащей в этой плоскости.

Принадлежность прямой плоскости определяется по одному из двух признаков:

а) прямая проходит через две точки, лежащие в этой плоскости;

б) прямая проходит через точку и параллельна прямой, лежащим в этой плоскости.

Используя эти свойства, решим в качестве примера задачу. Пусть плоскость задана треугольником АВС. Требуется построить недостающую проекцию D1 точки D, принадлежащей этой плоскости. Последовательность построений следующая (рис. 2.5).

Через точку D2 проводим проекцию прямой d, лежащей в плоскости DАВС, пересекающую одну из сторон треугольника и точку А2. Тогда точка 12 принадлежит прямым А2D2 и C2В2. Следовательно, можно получить ее горизонтальную проекцию 11 на C1В1 по линии связи. Соединив точки 11 и А1, получаем горизонтальную проекцию d1. Ясно, что точка D1 принадлежит ей и лежит на линии проекционной связи с точкой D2.

Достаточно просто решаются задачи на определение принадлежности точки или прямой плоскости. На рис. 2.6 показан ход решения таких задач. Для наглядности изложения задачи плоскость задаем треугольником.

Рис. 2.6. Задачи на определение принадлежности точки и прямой плоскости.

Для того, чтобы определить принадлежит ли точка Е плоскости DАВС, проведем через ее фронтальную проекцию Е2 прямую а2. Считая, что прямая а принадлежит плоскости DАВС, построим ее горизонтальную проекцию а1 по точкам пересечения 1 и 2. Как видим (рис. 2.6, а), прямая а1 не проходит через точку Е1. Следовательно, точка Е ÏDАВС.

Читайте также:  как узнать какая зона земельного участка

В задаче на принадлежность прямой в плоскости треугольника АВС (рис. 2.6, б), достаточно по одной из проекций прямой в2 построить другую в1* считая, что вÌDАВС. Как видим, в1* и в1 не совпадают. Следовательно, прямая в Ë DАВС.

Линии уровня в плоскости

Определение линий уровня было дано ранее. Линии уровня, принадлежащие данной плоскости, называются главными. Эти линии (прямые) играют существенную роль при решении ряда задач начертательной геометрии.

Рассмотрим построение линий уровня в плоскости, заданной треугольником (рис. 2.7).

Рис. 2.7. Построение главных линий плоскости, заданной треугольником

Горизонталь плоскости DАВС начинаем с вычерчивания ее фронтальной проекции h2, которая, как известно, параллельна оси ОХ. Поскольку эта горизонталь принадлежит данной плоскости, то она проходит через две точки плоскости DАВС, а именно, точки А и 1. Имея их фронтальные проекции А2 и 12, по линии связи получим горизонтальные проекции (А1 уже есть) 11. Соединив точки А1 и 11, имеем горизонтальную проекцию h1 горизонтали плоскости DАВС. Профильная проекция h3 горизонтали плоскости DАВС будет параллельна оси ОХ по определению.

Фронталь плоскости DАВС строится аналогично (рис. 2.7) с той лишь разницей, что ее вычерчивание начинается с горизонтальной проекции f1, так как известно, что она параллельна оси ОХ. Профильная проекция f3 фронтали должна быть параллельна оси ОZ и пройти через проекции С3, 23 тех же точек С и 2.

Профильная линия плоскости DАВС имеет горизонтальную р1 и фронтальную р2 проекции, параллельные осям OY и OZ, а профильную проекцию р3 можно получить по фронтальной, используя точки пересечения В и 3 с D АВС.

При построении главных линий плоскости необходимо помнить лишь одно правило: для решения задачи всегда нужно получить две точки пересечения с данной плоскостью. Построение главных линий, лежащих в плоскости, заданной иным способом, ничуть не сложнее рассмотренного выше. На рис. 2.8 показано построение горизонтали и фронтали плоскости, заданной двумя пересекающимися прямыми а и в.

Рис. 2.8. Построение главных линий плоскости, заданной пересекающимися прямыми.

Источник

Принадлежность

В литературе задачи о принадлежности часто относят к позиционным задачам. Можно выделить три разновидности задач о принадлежности, из которых следует:

1.Определить, принадлежит ли данная точка линии, поверхности или плоскости.

2.По заданной проекции точки или линии определить вторую, а иногда и третью проекцию либо точки, принадлежащей
линии, плоскости или поверхности, либо линии, принадлежащей плоскости или поверхности.

3.Задать произвольную точку, принадлежащую заданной ли­нии, поверхности, плоскости, либо задать произвольную ли­нию, принадлежащую заданной поверхности или плоскости. Любая из разновидностей задач о принадлежности решается, в принципе, исходя из одних и тех же соображений. Рассмотрим подробнее возможные виды принадлежности и способы решения связанных с ними задач.

А. Принадлежность точки линии.

Основное положение в этом случае таково:

точка принадлежит прямой, если ее проекции принад­лежат одноименным проекциям этой прямой (рис. 17).

Б. Принадлежность точки поверхности.

Основное положение при решении задач для этого варианта принадлежности следующее:

точка принадлежит поверхности, если она принадле­жит какой-либо линии этой поверхности.

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

Пример 1. Определить, принадлежит ли точка С поверхности конуса (рис. 18).

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

Очевидно, что в нашей задаче точка С принадлежит поверхности, поскольку проекции точки принадлежат одноимённым проекциям линий, использованных для решения как при первом, так и при втором способе решения.

В. Принадлежность линии поверхности.

линия принадлежит поверхности, если все тс линии принадлежат заданной поверхности.

Это означает, что в данном случае принадлежности должна быть несколько раз решена задача о принадлежности точки поверхности.

Г. Принадлежность прямой плоскости

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

Пример 2. Задать произвольную точку К, принадлежащую плоскости, заданной двумя пересекающимися прямыми а и b (рис. 19).

Решение. Можно взять какую-либо точку К, провести через нее прямую m, про которую точно можно сказать, что она принадлежит заданной плоскости, а потом определить вторую проекцию первоначально заданной произволь­ной точки. Можно сразу провести произвольную прямую плоскости, а затем определить положение произвольной точки плоскости, задав соответствующие проекции этой точки, принадлежащие проведенной прямой.

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Источник

Советы мастера