Точка k принадлежит. Преобразование комплексного чертежа

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

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

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

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

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

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

Рис. 2.5. К построению проекций точки, принадлежащей плоскости

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Прямая принадлежит плоскости, если две ее точки принадлежат плоскости.

Эти два вполне очевидных предложения часто называют условиями принадлежности точки и прямой плоскости.

На рис. 3.6 плоскость общего положения задана треугольником АВС. Точки А, В, С принадлежат этой плоскости, так как являются вершинами треугольника из этой плоскости. Прямые (АВ), (ВС), (АС) принадлежат плоскости, так как по две их точки принадлежат плоскости. Точка N принадлежит (AC), D принадлежит (AB), E принадлежит (CD) и, значит, точки N и E принадлежат плоскости (DABC), тогда прямая (NE) принадлежит плоскости (DABC).

Если задана одна проекция точки L, например L 2 , и известно, что точка L принадлежит плоскости (DABC), то для нахождения второй проекции L 1 последовательно находим (A 2 L 2), K 2 , (A 1 K 1), L 1 .

Если условие принадлежности точки плоскости нарушено, то точка не принадлежит плоскости. На рис. 3.6 точка R не принадлежит плоскости (DABC), так как R 2 принадлежит (F 2 K 2), а R 1 не принадлежит (A 1 K 1).

На рис. 3.7 приведен комплексный чертеж горизонтально проецирующей плоскости (DCDE). Точки K и P принадлежат этой плоскости, так как P 1 и K 1 принадлежат прямой (D 1 C 1), являющейся горизонтальной проекцией плоскости (DCDE). Точка N не принадлежит плоскости, так как N 1 не принадлежит (D 1 C 1).

Все точки плоскости (DCDE) проецируются на П 1 в прямую (D 1 C 1). Это следует из того, что плоскость (DCDE) ^ П 1 . В этом же можно убедиться, если проделать для точки P (или любой другой точки) построения, которые были сделаны для точки L (рис. 3.6). Точка P 1 попадет на прямую (D 1 C 1). Таким образом, для того, чтобы определить принадлежность точки горизонтально проецирующей плоскости, фронтальная проекция (DC 2 D 2 E 2) не нужна. Поэтому в дальнейшем проецирующие плоскости будут задаваться только одной проекцией (прямой линией). На рис. 3.7 показана фронтально проецирующая плоскость S, заданная фронтальной проекцией S 2 , а также точки A Î S и B Ï S.

Взаимное положение точки и плоскости сводится к принадлежности или не принадлежности точки плоскости.

При решении многих задач приходится строить линии уровня, принадлежащие плоскостям общего и частного положения. На рис. 3.8 показаны горизонталь h и фронталь f, принадлежащие плоскости общего положения (DABC). Фронтальная проекция h 2 параллельна оси x, поэтому прямая h – горизонталь. Точки 1 и 2 прямой h принадлежат плоскости, поэтому прямая h принадлежит плоскости. Таким образом, прямая h – это горизонталь плоскости (DABC). Обычно порядок построения такой: h 2 ; 1 2 , 2 2 ; 1 1 , 2 1 ; (1 1 2 1) = h 1 . Фронталь f проведена через точку A. Порядок построения: f 1 // x, A 1 Î f 1 ; 3 1 , 3 2 ; (A 2 3 2) = f 2 .



На рис. 3.9 показаны проекции горизонтали и фронтали для фронтально проецирующей плоскости S и горизонтально проецирующей плоскости Г. В плоскости S горизонталь является фронтально проецирующей прямой и проходит через точку A (попытайтесь представить горизонталь как линию пересечения S и плоскости, проходящей через точку A параллельно П 1). Фронталь проходит через точку С. В плоскости Г горизонталь и фронталь проведены через одну точку D. Фронталь является горизонтально проецирующей прямой.

Из рассмотренных выше построений следует, что линию уровня в плоскости можно провести через любую точку этой плоскости.

Совпадение плоскостей можно трактовать как принадлежность одной плоскости другой. Если три точки одной плоскости принадлежат другой плоскости, то эти плоскости совпадают. Упомянутые три точки не должны лежать на одной прямой. На рис. 3.10 плоскость (DDNE) совпадает с плоскостью S(DABC), так как точки D, N, E принадлежат плоскости S(DABC).

Обратим внимание на то, что плоскость S, заданная DABC, теперь может быть задана DDNE. Любая плоскость может быть задана линиями уровня. Для этого необходимо через точку плоскости S(DABC) (например, через точку А) провести в плоскости горизонталь и фронталь, которые и будут задавать плоскость S (на рис. 3.10 построения не показаны). Последовательность построения горизонтали: h 2 // x (A 2 Î h 2); K 2 = h 2 Ç B 2 C 2 ; K 1 Î B 1 C 1 (K 2 K 1 ^ x); A 1 K 1 = h 1 . Последовательность построения фронтали: f 1 // x (A 1 Î f 1); L 1 = f 1 Ç B 1 C 1 ; L 2 Î B 2 C 2 (L 1 L 2 ^ x); A 2 L 2 = f 2 . Можно записать S(DABC) = S(h, f).

ПРЕОБРАЗОВАНИЕ КОМПЛЕКСНОГО ЧЕРТЕЖА

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

4.1. Метод замены плоскостей проекций

Метод замены плоскостей проекций состоит в том, что вместо одной из плоскостей проекций вводится новая плоскость, перпендикулярная к другой плоскости проекций. На рис. 4.1 показана пространственная схема получения комплексного чертежа точки А в системе (П 1 П 2). Точки А 1 и А 2 – горизонтальная и фронтальная проекции точки А, АА 1 А x А 2 – прямоугольник, плоскость которого перпендикулярна оси x (рис. 2.3).

Новая плоскость П 4 перпендикулярна П 1 . При проецировании точки А на П 4 получим новую проекцию А 4 , фигура АА 1 А 14 А 4 – прямоугольник, плоскость которого перпендикулярна новой оси x 14 = П 4 Ç П 1 . Для получения комплексного чертежа будем рассматривать фигуры, расположенные в плоскостях проекций. Поворотом вокруг оси x 14 совместим П 4 с П 1 , затем поворотом вокруг оси x совместим П 1 (и П 4) с П 2 (на рис. 4.1 направления движения плоскостей П 4 и П 1 показаны штриховыми линиями со стрелками). Полученный чертеж приведен на рис. 4.2. Прямые углы на рис. 4.1, 4.2 помечены дугой с точкой, равные отрезки помечены двумя штрихами (противоположные стороны прямоугольников на рис. 4.1). От комплексного чертежа точки А в системе (П 1 П 2) перешли к комплексному чертежу точки А в системе (П 1 П 4), заменили плоскость П 2 на плоскость П 4 , заменили А 2 на А 4 .

На основе этих построений сформулируем правило замены плоскостей проекций (правило получения новой проекции). Через незаменяемую проекцию проводим новую линию проекционной связи перпендикулярно новой оси, затем от новой оси по линии проекционной связи откладываем отрезок, длина которого равна расстоянию от заменяемой проекции до старой оси, полученная при этом точка и есть новая проекция. Направление новой оси будем брать произвольно. Новое начало координат указывать не будем.

На рис. 4.3 показан переход от комплексного чертежа в системе (П 1 П 2) к комплексному чертежу в системе (П 2 П 4), а затем еще один переход к комплексному чертежу в системе (П 4 П 5). Вместо плоскости П 1 введена плоскость П 4 , перпендикулярная П 2 , затем вместо П 2 введена плоскость П 5 , перпендикулярная П 4 . Используя правило замены плоскостей проекций, можно выполнить любое количество замен плоскостей проекций.

Задача. Даны три попарно не совпадающие и не лежащие на одной прямой точки A, B и C, заданные своими координатами. Определить принадлежит ли точка D(x_d,y_d) треугольнику ABC.
Сразу заметим, что задача легко обобщается для любого выпуклого многоугольника.

Тесты

В тестах нужно обязательно отразить следующие случаи:

  1. Точка строго вне треугольника
  2. Точка строго внутри треугольника
  3. Точка совпадает с одной из вершин треугольника
  4. Точка лежит на одной из сторон треугольника
  5. Точка лежит на продолжении одной из сторон треугольника
  6. Одна из сторон треугольника параллельна одной из осей координат
  7. Две стороны треугольника параллельны осям координат
xa ya xb yb xc yc xd yd Принадлежит?
-1 -1 1 -1 0 1 2 2 нет
-2 -2 1 -1 0 1 0 0 да
-1 -1 1 -1 0 1 0 1 да
-1 -1 1 -1 0 1 0.5 0 да
-1 -1 1 -1 0 1 1 3 нет
-1 -1 1 -1 0 1 0 0 да
0 0 2 0 0 2 1 1 да
0 0 2 0 0 2 5 5 нет

Плохое решение

В школьных учебниках такие задачи часто рекомендуют решать проверкой условия S_{ABC}=S_{ABD}+S_{BCD}+S_{CAD}. При компьютерной реализации это приводит к необходимости сравнения двух действительных чисел на равенство. Эта крайне неприятная операция может быть проделана только с определённой степенью достоверности. Т.е. придётся проверять не превышает ли некоторого «с потолка» выбранного малого числа абсолютное \left| S_{ABD}+S_{BCD}+S_{CAD}-S_{ABC} \right| < \varepsilon или относительное \left| 1-\frac{S_{ABD}+S_{BCD}+S_{CAD}}{S_{ABC}} \right| < \varepsilon отклонение. Оставим эти вопросы для курса численных методов и методов приближённых вычислений и не будем идти по этому пути.

Неплохое решение

Начнём с простого наблюдения:

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

Запишем уравнение прямой, проходящей, например, через точки A и B. Получим \left(x-x_A \right) \left(y_B-y_A \right)-\left(y-y_A \right) \left(x_B-x_A \right) = 0. Уравнение я записал в такой форме, чтобы не приходилось выполнять деление и переживать о нуле в знаменателе.

Теперь для любой точки \left(x;y \right) мы можем вычислить левую часть приведенного равенства. Для точек, лежащих на прямой мы должны получать ноль. В тоже время прямая разобьёт плоскость на две полуплоскости. Точки лежащие в одной полуплоскости будут давать положительные значения. А точки из другой полуплоскости — отрицательные.
Мы готовы проверить первое условие — принадлежит ли точка D \left(x_d,y_d \right) той же полуплоскости, что и точка C \left(x_c,y_c \right) относительно прямой \left(AB \right) ? Для этого подставим обе точки в левую часть приведенного выше уравнения прямой и убедимся, что получены значения одного и того же знака. А если одна из точек даст точно ноль? Это означает, что точка лежит на прямой. По условию задачи это может быть только точка D. Тогда она принадлежит треугольнику независимо от знака выражения, вычисленного для точки C.

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

Естественно, что нам придётся записать аналогичные условия для двух оставшихся сторон треугольника (или для всех оставшихся сторон выпуклого многоугольника).

Плохой код

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

Принадлежит ли точка треугольнику?

#include

int main ()

// читаем координаты точки A

// читаем координаты точки D

// читаем координаты точки C

// читаем координаты точки D

printf (

(((xd - xa ) * (yb - ya ) - (yd - ya ) * (xb - xa ) ) * ((xc - xa ) * (yb - ya ) - (yc - ya ) * (xb - xa ) ) >= 0 ) &&

(((xd - xb ) * (yc - yb ) - (yd - yb ) * (xc - xb ) ) * ((xa - xb ) * (yc - yb ) - (ya - yb ) * (xc - xb ) ) >= 0 ) &&

(((xd - xc ) * (ya - yc ) - (yd - yc ) * (xa - xc ) ) * ((xb - xc ) * (ya - yc ) - (yb - yc ) * (xa - xc ) ) >= 0 ) ?

"yes" : "no" ) ;

return 0 ;

Приведенный код имеет существенные недостатки. Нам пришлось трижды записывать уравнение прямой проходящей через две точки и дважды подставлять в каждое из них координаты, чтобы проверить знак. Это значит, что нам пришлось шесть раз написать некоторую формулу с различными подстановками. При том подходе, что мы использовали имеем две проблемы. Во-первых, условие стало слишком сложным, чтобы его можно было легко воспринять. Во-вторых, и это гораздо хуже, такой код в \frac { 1-{ \left(1-p \right) }^{ 6 } }{ p } раз увеличивает вероятность совершить ошибку. Забавно, но это означает, что вероятность ошибки начинающего программиста увеличивается вдвое, а у опытного — в шесть раз. Хорошо, что опытные программисты не пишут такой код.

Неплохой код

Воспользуемся тем, что мы уже умеем создавать собственные функции для того, чтобы несколько сократить объём кода и сделать его более лёгким для восприятия.
Запишем условие на языке программирования С++:

Решение с использованием функций

#include

// Вычисляет положение точки D(xd,yd) относительно прямой AB

double g (double xa , double ya , double xb , double yb , double xd , double yd )

return (xd - xa ) * (yb - ya ) - (yd - ya ) * (xb - xa ) ;

// Лежат ли точки C и D с одной стороны прямой (AB)?

bool f (double xa , double ya , double xb , double yb , double xc , double yc , double xd , double yd )

return g (xa , ya , xb , yb , xc , yc ) * g (xa , ya , xb , yb , xd , yd ) >= 0 ;

int main ()

double xa , ya , xb , yb , xc , yc , xd , yd ;

scanf ("%lf%lf" , &xa , &ya ) ; // читаем координаты точки A

scanf ("%lf%lf" , &xb , &yb ) ; // читаем координаты точки B

scanf ("%lf%lf" , &xc , &yc ) ; // читаем координаты точки C

scanf ("%lf%lf" , &xd , &yd ) ; // читаем координаты точки D

printf (f (xa , ya , xb , yb , xc , yc , xd , yd ) && f (xb , yb , xc , yc , xa , ya , xd , yd ) &&

f (xc , yc , xa , ya , xb , yb , xd , yd ) ? "yes" : "no" ) ;

return 0 ;

Нажмите , чтобы выполнить этот код.
Трудно сказать, стал ли код боле понятным или лаконичным. Однако можно точно сказать, что в нём отсутствуют повторяющиеся алгоритмические блоки. Все участки кода написаны строго по одному разу. Это уменьшает вероятность ошибки.

Чеширский код

Этот код содержит пока не изученные вами конструкции. Из-за этого он может показаться немного загадочным. Но если продолжать грызть гранит науки, то всё легко освоите. Или можно подождать…


Возможно слишком смело называть это хорошим кодом, но мы сделаем ещё один шаг в нужном направлении. В прошлом коде мы избавились от повторов в кодировании алгоритма. Однако остались повторы в кодировании данных. Вы заметили, что у нас четыре пары переменных? Т.е. просматривается структура состоящая из пары координат x и y , которую стоит объединить и назвать «точкой». Такие структуры в программировании на Си описывают с помощью ключевого слова struct. Это полезная промежуточная структура перед переходом к объектно-ориентированному программированию при помощи классов.

Структура для кодирования точек

#include

struct point { double x , y ; } ;

struct point get ()



Понравилась статья? Поделитесь с друзьями!