ГЛАВА 7. Элементы компьютерной графики в начертательной геометрии и черчении


Компьютерная графика - это совокупность средств и приёмов для автоматизации создания, хранения и воспроизведения графической информации с помощью ЭВМ. Она является одной из быстро развивающихся областей применения вычислительной техники. Системы автоматизированного проектирования (САПР) освобождают конструктора от рутиной работы по созданию чертежей, резко повышают производительность труда. В настоящее время существуют большое количество САПР различной сложности и назначения. Значительное распространение получила система автоматизации чертёжно-графических работ AutoCAD различных версий. AutoCAD является не только графическим редактором, но и мощной средой программирования. Это даёт широкие возможности для разработки САПР, специализированных на конкретную предметную область. В настоящие время в проектных организациях и конструкторских бюро создаются и используются прикладные параметрические программы. Поэтому возникла проблема подготовки инженеров-конструкторов-программистов. При изучении в техническом вузе дисциплины "Инженерная и машинная графика" фактически происходит первое приобщение студентов к инженерной деятельности. С появлением раздела "Машинная графика" на первом курсе начинается изучение возможности САПР. Студенты знакомятся со структурой меню системы, осваивают команды, выполняя чертежи деталей, сборочные чертежи, схемы.

 

 

Возможности системы AutoCAD

Автоматизация проектирования - неотъемлемая составляющая современного научно-технического прогресса. САПР - процесс проектирования с использованием сложных средств машинной графики, снабженных специальными пакетами программного обеспечения.

Достоинства автоматизации проектирования:

1. Сокращение сроков проектирования;

2. Повышение качества и точности чертежей;

3. Возможность многократного использования чертежа;

4. Специальные чертежные средства (графопостроители, принтеры, плоттеры);

5. Интеграция проектирования с другими видами деятельности;

6. Сокращение числа ИТР, занятых проектом, т.к. повышается производительность их труда.

Средства САПР можно сгруппировать по видам обеспечения автоматизированного проектирования:

1. Математическое обеспечение САПР - это совокупность алгоритмов, математических моделей и методов.

Элементы математического обеспечения САПР чрезвычайно разнообразны.

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

Программное обеспечение делится на общесистемное и специальное (прикладное). (Пакеты Прикладного Программирования).

3. Аппаратное (техническое) обеспечение - комплекс технических средств.

4. Информационное обеспечение - это базы данных, которыми пользуются проектировщики в процессе проектирования (нормативно--справочная документация, исходные и результирующие данные и т.п.). Различают специальные способы ведения информационного фонда САПР: использование файловой системы, построение библиотек, использование банков данных, создание информационных программ адаптеров.

5. Лингвистическое обеспечение САПР - его основу составляют совокупность языков программирования.

6. Методическое обеспечение - это документы, регламентирующие порядок эксплуатации САПР.

7. Организационное обеспечение - различные положения, инструкции.

Основные возможности системы Автокад:

- быстрая генерация рисунка;

- редактирование чертежа с целью исправления ошибок или внесения изменений;

- создание библиотек графических фрагментов;

- структурное представление чертежа как совокупности простых и сложных объектов, совокупности слоев;

- возможность разработки собственных команд и функций с помощью языка программирования Auto LISP;

- удобный вывод чертежей и их фрагментов на устройства получения твердой копии.

Изучение системы AutoCAD можно разбить на следующие этапы:

      AutoCAD      
               
         
Графический редактор Работа с внешними устройствами Режим работы Адаптация к прикладной области
               

 

1. Графический редактор поддерживает:

- рисование чертежа;

- редактирование чертежа;

- установку свойств примитивов (тип линии, цвет);

- работу с экраном (увеличить/уменьшить, освежить изображение).

2. Работа с внешними устройствами - вывод на принтер, использование дигитайзера, мыши.

3. В Автокаде используются два режима работы: диалоговый и пакетный.

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

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

4. Автокад можно адаптировать к прикладной области. При необходимости - модифицировать типы линий, создать свои штриховки, создать конфигурированное меню, библиотеки стандартных элементов.

Автокад - это оболочка, которую можно начинить и приспособить к любой области проектирования.

После входа в графический редактор выглядит следующим образом:

Слой 0 Орто Шаг 0.000, 0.000 Автокад
Статусная строка. ГРАФИЧЕСКАЯ ЗОНА.     Команда: Зона диалога (подсказок) Блоки Дисплей Настрой. пек. Размер Редакт Рисуй

 

- Основная (центральная) часть отведена под графическую зону (вывод чертежа).

По этой части движется перекрестье, показывающее текущее значение координат точки (в центре перекрестья).

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

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

- Три строки в нижней части экрана используются для диалога: запросы, ввод команд и данных, подсказки.

- Верхняя строка:

1. Строка состояния - текущее состояние режимов, имя слоя, текущие координаты.

2. Вывод "падающего меню" при наведении на верхнюю строку перекрестья.

 

 

7.1.1. Манипулятор "Мышь"

Манипулятор "Мышь" используется для ускорения ввода команд и точек, выбора графических объектов.

"Мышь" имеет 2 или 3 кнопки: левая - указания, правая - ввода. Левой кнопкой можно:

- ввести точку в месте расположения перекрестья;

- выбрать графический примитив в месте расположения прицела;

- ввести команду из экранного или падающего меню в месте "подсветки".

Правая кнопка имеет функции клавиши "ENTER":

- производит ввод ответов на запросы:.

- прекращает выполнение циклических команд;.

- вызывает повторный запуск предыдущей команды в ответ на запрос "Команда".

 

 

Функциональные клавиши.

F1 - переключение текст./графического экрана;

F6 - вкл./выкл. динамического отображения координат;

F7 - вкл./выкл. режима "сетка", "Освежи" (двойное нажатие);

F8 - вкл./выкл. режима "Орто";

F9 - вкл./выкл. режима "Шаг";

- сочетание клавиши CTRL + С - прерывает текущую команду, возвращая на запрос "Команда";

- сочетание клавиши CTRL + Х - очищает строку ввода.

Включенные режимы отображаются в строке состояния. Команды управления режимами содержатся в экранном меню в группе НАСТРОЙ, в падающем меню - в группе РЕЖИМЫ РИСОВАНИЯ.

 

 

Система координат

В Автокаде для задания положения точек используется фиксированная система декартовых координат, называемая МИРОВОЙ СИСТЕМОЙ КООРДИНАТ (МСК), которая является общей для всех созданных при помощи Автокада рисунков.

Мировая система координат не может быть изменена пользователем, она является абсолютной.

В рамках МСК можно ввести дополнительную декартову систему координат в любой точке, так называемую ПОЛЬЗОВАТЕЛЬСКУЮ СИСТЕМУ КООРДИНАТ (ПСК).

Начало координат находится на рисунке обычно в левом нижнем углу. Оси ПСК могут быть повернуты под любым углом. Удачный выбор ПСК позволяет сравнительно легко решать сложные (пространственные) задачи.

Для ориентации в различных системах координат используется специальное условное обозначение - пиктограмма. Она располагается на экране в левом нижнем углу и указывает направление осей x и y текущей системы координат, также некоторую дополнительную информацию:

- буква "М" присутствует на стрелке y если текущая ПСК совпадает с МСК;

- знак "+" показывает, что пиктограмма находится в начале ПСК;

- в пиктограмме присутствует квадрат, если ось z направлена на наблюдателя, в противном случае его нет.

Пиктограмма "сломанный карандаш" появляется, если направление взгляда параллельно плоскости XY. Знак можно отключить командой ЗНАКПСК — НАСТРОЙ.

 

 

Меню команд

Экранное меню команд самого верхнего уровня включает в себя следующие пункты:

АВТОКАД - постоянный пункт меню (неисчезающий), возвращающий на экран команды верхнего уровня;

***** - часто встречающиеся команды;

ФОРМАТ: - установка размеров рисунка;

БЛОКИ - группа команд по созданию и использованию блоков;

ДИСПЛЕЙ - команды по управлению изображением, перерисовке рисунка;

НАСТРОЙ - команды по установке режимов и условий выполнения чертежа;

РАЗМЕР: - команда для простановки размеров;

РИСУЙ - группа команд по рисованию графических примитивов;

РЕДАКТ - группа команд по редактированию чертежа;

СПРАВКИ - обслуживающие команды;

СЛОИ: - команда управления слоями;

УТИЛИТЫ - служебные команды;

ЧЕРТИ - команды вывода рисунка на устройство получения твердой копии;

3-М - команды построения трехмерных объектов.

В состав различных экранных подменю могут входить пункты:

ПРЕДМЕНЮ - включение предыдущего экранного меню.

РИСУЙ, РЕДАК - быстрое включение команд данной группы.

ДАЛЕЕ - включение следующей страницы подменю.

ПРЕДЫДУЩЕЕ - включение предыдущей страницы подменю.

Пункты меню расположены в алфавитном порядке.

При вызове команды требуется ввести дополнительную информацию: размеры, координаты точек, количество и др.

В некоторых случаях Автокад дает подсказку, которая выделяется скобками типа "< >".

Если тип вводимых данных отличается от ожидаемого, то выводится следующее сообщение:.

- "Неверная точка";

- "Неверное ключевое слово";

- "Требуется численное значение расстояния или 2 точки".

На запросы можно отвечать различными способами.

 

 

Указание точек

Точка является наиболее часто вводимым типом данных. Точка определяется координатами X, Y, Z, хотя часто третью координату Z можно не вводить.

Точки можно задавать:

1. Вводя абсолютные координаты с клавиатуры;

2. Вводя относительные координаты с клавиатуры;

3. Указав точку на экране устройством указания, мышью;

4. Указав точку на экране с помощью курсорных клавиш.

Пример введения точки: 3.5, 25.7, 4.75, если координату Z опустить, то ей будет присвоено значение текущего уровня: 3.5, 25.7 (точка в дробном виде: 3-1/2, 25-7/10, 4-3/4).

 

Относительные координаты.

Если требуется задать точку в виде смещения от последней введенной точки, то надо ввести символ @, а затем приращение по осям x, y, z.

Полярные координаты.

Точку можно задать, введя расстояние от нее до начала (координат) текущей ПСК и угла в плоскости xy, разделенных знаком "<". Например: 10.5 < 60

 

 

Слои, цвета типы линий

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

Свойства слоев:

1. Границы чертежа, единицы измерения, система координат едины для всех слоев рисунка;

2. Каждый слой имеет имя. (Пример: 0, 1, Оси, Штриховка.) Имя присваивать осмысленное. Длина имени до 31 символа. Первые 8 слоев отображаются в верхней части экрана в статусной строке (для текущего слоя). Любой слой можно переименовать;

3. Текущим является слой, на котором в данный момент отрисовываются примитивы;

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

5. Слои можно удалять (если не нужны или пустые) командой УДАЛИ.

Рекомендуется перед началом нового рисунка первоначально создать слои, выполнить НАСТРОЙ (единицы, лимиты), загрузить необходимые типы линий.

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

Все свойства слоев позволяет изменять команда СЛОЙ в экранном меню и РЕЖИМЫ — УСТАНОВКА СЛОЕВ - в падающем. При использовании падающего меню появляется таблица списка слоев (диалоговое меню), что обеспечивает наглядность и удобство переключения слоев, изменение состояния цветов и типов линий с помощью экранной указки (стрелки).

Команда СЛОЙ экранного меню имеет несколько опций:

? - распечатать список существующих слоев с цветами и типами линий;

СОЗДАТЬ - создать новый слой и сделать его текущим, т.е. задать его имя (оно появится в статусной строке);

УСТАНОВИ - установить новый текущий слой, уже ранее созданный;

ВКЛ/ОТКЛ - вкл./откл. слоя видим./невид. Замороженный слой не может быть выключен, сначала его надо разморозить;

ЗАМОРОЗ/РАЗМОРОЗ - примитивы слоя невидимы и не будут регенерироваться;

ЦВЕТ - задание номера цвета;

ТИШ1ИН - задание типа линии.

Примитивы можно переносить со слоя на слой командой ИЗМЕНИ с опцией СЛОЙ.


Примеры компьютерного решения графических

Пример: Программа чертежа вала по заданным параметрам: диаметру и длине ступени.


(defun dtr (a) (* pi (/ a 180.0)))

 

(defun c:ВАЛ(/ d l priz p0 p1 p2 p3 p4 p5 p6 p7

b0 b1 b2 b3 q1 q2 base otv)

(if (tblsearch "LAYER" "вал")

(command "слой" "Устан" "вал" "")

(command "слой" "Созд" "вал" "Цвет" "2" "вал" "" "")

)

(if (not (tblsearch "Layer" "размер"))

(command "слой" "Новый" "размер" "Цвет" "4" "размер" "" "")

)

(setq priz 1)

(setq priz_r 1)

(prompt "\n Рисуем вал: ")

(initget 1)

(setq p1 (getpoint "\n Укажите стартовую точку на оси: "))

(setq base p1)

(initget 1)

(setq d (getreal "\n Введи диаметр 1-й ступени: "))

(initget 1)

(setq l (getreal "\n Введи длину 1-й ступени: "))

(setq p2 (polar p1 (dtr 90) (- (/ d 2) (* d 0.1))))

(setq p3 (list (+ (car p1) (* d 0.1)) (+ (cadr p1) (/ d 2))))

(setq p4 (list (+ (car p1) l) (cadr p3)))

(setq p5 (polar p4 (dtr 270) d))

(setq p6 (polar p5 (dtr 180) (- l (* d 0.1))))

(setq p7 (list (- (car p6) (* d 0.1)) (+ (cadr p6) (* d 0.1))))

(setq b1 (list (+ (car p3) 10) (cadr p3))

b2 (polar b1 (dtr 270) d)

q1 (list (car p7) (- (cadr p6) 10))

)

(command "плиния" p1 p2 p3 p4 p5 p6 p7 "з")

(command "отрезок" p3 p6 "")

(command "слой" "У" "размер" "")

(command "размер" "вер" b1 b2 b2 (strcat "%%C" (rtos d))

"гор" p7 p5 q1 "" "ВЫХОД")

(command "слой" "У" "вал" "")

(while priz

(setq p1 (polar p1 (dtr 0) l))

(initget 1)

(setq d (getreal "\n Введи диаметр ступени: "))

(initget 1)

(setq l (getreal "\n Введи длину ступени: "))

(setq p2 (polar p1 (dtr 90) (/ d 2))

p3 (polar p2 (dtr 0) l)

p4 (polar p3 (dtr 270) d)

p5 (polar p4 (dtr 180) l)

b1 (list (+ (car p2) 10) (cadr p2))

b2 (polar b1 (dtr 270) d)

q2 (polar q1 (dtr 270) 10)

)

(command "плиния" p1 p2 p3 p4 p5 "з")

(if (< (cadr p4) (+ (cadr q2) 10))

(setq q2 (list (car q2) (- (cadr p4) 10) 0.0))

)

(setq q1 q2)

(command "слой" "У" "размер" "")

(command "размер" "вер" b1 b2 b2 (strcat "%%C" (rtos d))

"гор" base p4 q2 "" "ВЫХОД")

(command "слой" "У" "вал" "")

(initget "Последняя_ступень")

(setq otv (getkword "\n Последняя_ступень <Следующая>: "))

(if (= otv "Последняя_ступень" )

(progn

(setq p1 (polar p1 (dtr 0) l))

(initget 1)

(setq d (getreal "\n Введи диаметр последней ступени: "))

(initget 1)

(setq l (getreal "\n Введи длину последней ступени: "))

(setq priz nill)

(setq p2 (polar p1 (dtr 90) (/ d 2))

p3 (polar p2 (dtr 0) (- l (* d 0.1)))

p4 (list (+ (car p3) (* d 0.1)) (- (cadr p3) (* d 0.1)) 0.0)

p5 (polar p4 (dtr 270) (- d (* d 0.2)))

p6 (list (- (car p5) (* d 0.1)) (- (cadr p5) (* d 0.1)) 0.0)

p7 (polar p6 (dtr 180) (- l (* d 0.1)))

b1 (list (+ (car p2) 10) (cadr p2) 0.0)

b2 (polar b1 (dtr 270) d)

q2 (polar q1 (dtr 270) 10)

b3 (polar p4 (dtr 270) (/ (- d (* d 0.2)) 2))

p0 (polar base (dtr 180) 5)

b0 (polar b3 (dtr 0) 5)

)

(command "плиния" p1 p2 p3 p4 p5 p6 p7 "з"

"отрезок" p3 p6 ""

)

(if (tblsearch "LTYPE" "CENTRE")

(command "типлин" "У" "CENTRE" "")

(command "типлин" "З" "CENTRE" "" "У" "CENTRE" "")

)

(command "отрезок" p0 b0 "")

(command "типлин" "У" "послою" "")

(if (< (cadr p6) (+ (cadr q2) 10))

(setq q2 (list (car q2) (- (cadr p6) 10) 0.0))

)

(command "слой" "У" "размер" "")

(command "размер" "вер" b1 b2 b2 (strcat "%%c" (rtos d))

"гор" base p5 q2 "" "ВЫХОД")

(command "слой" "У" "вал" "")

) ; progn

) ;if

) ;while

(princ)

)

 

Пример: Программа выполнения эпюра точки по заданным координатам.


;ЭПЮР ТОЧКИ

(defun dtr (a) ;функция перевода градусов в радианы

( * pi (/ a 180.0))

)

 

(defun c:ЭТОЧКИ (/ b1 ot len s1 s2 s3 s4 x y z p1 p2 p3 p4 p5 p6 p7 n1 n2 m1 m2 m3 m4 d1 d2 d3 o1 o2 t)

 

(prompt "\n Рисуем эпюр точки")

(initget 1)

(setq ot (getstring "\n Введите обозначение точки:") ;ввод необходимых значений

x (getreal "\n Введите координату X точки:")

y (getreal "\n Введите координату Y точки:")

z (getreal "\n Введите координату Z точки:")

b1 (getpoint "\n Укажите точку начала координат:")

)

 

(setq len (+ 10 (max (abs x) (abs y) (abs z)))) ;высчитываются длина и координаты концов оси в зависимости от координат точки и точки начала отсчета

(setq s1 (polar b1 (dtr 0.0) len)

s2 (polar b1 (dtr 90.0) len)

s3 (polar b1 (dtr 180.0) len)

s4 (polar b1 (dtr 270.0) len)

)

 

(setq n1 (car b1) ;перевод координат точки из нашей СК в базовую

n2 (cadr b1)

m1 (- (car b1) x)

m2 (- (cadr b1) y)

m3 (+ (cadr b1) z)

m4 (+ (car b1) y)

)

(setq p1 (list m1 m2)

p2 (list m1 m3)

p3 (list m4 m3)

p4 (list n1 m2)

p5 (list m4 n2)

p6 (list n1 m3)

p7 (list m1 n2)

)

 

(if (>= x 0) (setq d1 "+") (setq d1 "-")) ;определение октанта

(if (>= y 0) (setq d2 "+") (setq d2 "-"))

(if (>= z 0) (setq d3 "+") (setq d3 "-"))

(setq o1 (strcat d1 d2 d3))

(cond ((= o1 "+++") (setq o2 "1 OKTAHT"))

((= o1 "+-+") (setq o2 "2 OKTAHT"))

((= o1 "+--") (setq o2 "3 OKTAHT"))

((= o1 "++-") (setq o2 "4 OKTAHT"))

((= o1 "-++") (setq o2 "5 OKTAHT"))

((= o1 "--+") (setq o2 "6 OKTAHT"))

((= o1 "---") (setq o2 "7 OKTAHT"))

((= o1 "-+-") (setq o2 "8 OKTAHT"))

(t nil)

)

 

(command "отрезок" s1 s3 "") ;вывод на экран осей, проекций точки и текстового сопровождения

(command "отрезок" s2 s4 "")

(command "отрезок" p1 p2 "")

(command "отрезок" p2 p3 "")

(command "отрезок" p1 p4 "")

(command "отрезок" p3 p5 "")

(command "отрезок" p2 p6 "")

(command "отрезок" p2 p7 "")

(command "кольцо" 0 2 p1 p2 p3 "")

(command "текст" "ВПИ" (list (+ m1 3) (+ m2 5)) (list (+ m1 7) (+ m2 5)) 5 (strcase (strcat ot "1"))) ;обозначение проекций точки всегда выводится справа вверху от самой проекции

(command "текст" "ВПИ" (list (+ m1 3) (+ m3 5)) (list (+ m1 7) (+ m3 5)) 5 (strcase (strcat ot "2")))

(command "текст" "ВПИ" (list (+ m4 3) (+ m3 5)) (list (+ m4 7) (+ m3 5)) 5 (strcase (strcat ot "3")))

(command "текст" "ВПИ" (polar b1 (dtr 0.0) (+ 5 len)) (polar b1 (dtr 0.0) (+ 20 len)) 5 "y(-x)")

(command "текст" "ВПИ" (polar b1 (dtr 90.0) (+ 5 len)) (polar (list (+ 20 (car b1)) (cadr b1)) (dtr 90.0) (+ 5 len)) 5 "z(-y)")

(command "текст" "ВПИ" (polar b1 (dtr 180.0) (+ 20 len)) (polar b1 (dtr 180.0) (+ 5 len)) 5 "x(-y)")

(command "текст" "ВПИ" (polar b1 (dtr 270.0) (+ 8 len)) (polar (list (+ 20 (car b1)) (cadr b1)) (dtr 270.0) (+ 8 len)) 5 "y(-z)")

(command "текст" "ВПИ" (polar (polar b1 (dtr 0.0) len) (dtr 90.0) (+ 5 len)) (polar (polar b1 (dtr 0.0) (+ 25 len)) (dtr 90.0) (+ 5 len)) 6 (strcase (strcat ot "(" (rtos x) ";" (rtos y) ";" (rtos z) ")")))

(command "текст" "ВПИ" (polar (polar b1 (dtr 180.0) (+ 25 len)) (dtr 90.0) (+ 5 len)) (polar (polar b1 (dtr 180.0) len) (dtr 90.0) (+ 5 len)) 6 o2)

(princ)

)

 

Пример: Программа выполнения эпюра прямой по заданным координатам.

;ЭПЮР ПРЯМОЙ

(defun dtr (a) ;функция перевода градусов в радианы

( * pi (/ a 180.0))

)

 

(defun c:ЭПРЯМОЙ (/ b1 len ot1 ot2 s1 s2 s3 s4 x1 y1 z1 x2 y2 z2 p1 p2 p3 p4 p5 p6 p7 p12 p22 p32 p42 p52 p62 p72 n1 n2 m1 m2 m3 m4 m12 m22 m32 m42)


 

(prompt "\n Рисуем эпюр прямой") ;ввод необходимых значений

(initget 1)

(setq ot1 (getstring "\n Введите обозначение 1-ой точки:")

x1 (getreal "\n Введите координату X 1-ой точки:")

y1 (getreal "\n Введите координату Y 1-ой точки:")

z1 (getreal "\n Введите координату Z 1-ой точки:")

ot2 (getstring "\n Введите обозначение 2-ой точки:")

x2 (getreal "\n Введите координату X 2-ой точки:")

y2 (getreal "\n Введите координату Y 2-ой точки:")

z2 (getreal "\n Введите координату Z 2-ой точки:")

b1 (getpoint "\n Укажите точку начала координат:")

)

 

(setq len (+ 10 (max (abs x1) (abs y1) (abs z1) (abs x2) (abs y2) (abs z2)))) ;высчитываются длина и координаты концов оси в зависимости от координат точек и точки начала отсчета

(setq s1 (polar b1 (dtr 0.0) len)

s2 (polar b1 (dtr 90.0) len)

s3 (polar b1 (dtr 180.0) len)

s4 (polar b1 (dtr 270.0) len)

)

 

(setq n1 (car b1) ;перевод координат точек из нашей СК в базовую

n2 (cadr b1)

)

(setq m1 (- n1 x1)

m2 (- n2 y1)

m3 (+ n2 z1)

m4 (+ n1 y1)

m12 (- n1 x2)

m22 (- n2 y2)

m32 (+ n2 z2)

m42 (+ n1 y2)

)

(setq p1 (list m1 m2)

p2 (list m1 m3)

p3 (list m4 m3)

p4 (list n1 m2)

p5 (list m4 n2)

p6 (list n1 m3)

p7 (list m1 n2)

p12 (list m12 m22)

p22 (list m12 m32)

p32 (list m42 m32)

p42 (list n1 m22)

p52 (list m42 n2)

p62 (list n1 m32)

p72 (list m12 n2)

)

 

(command "отрезок" s1 s3 "") ;вывод на экран осей, проекций точек и прямой, а также текстового сопровождения

(command "отрезок" s2 s4 "")

(command "отрезок" p1 p2 "")

(command "отрезок" p2 p3 "")

(command "отрезок" p1 p4 "")

(command "отрезок" p3 p5 "")

(command "отрезок" p2 p6 "")

(command "отрезок" p2 p7 "")

(command "отрезок" p12 p22 "")

(command "отрезок" p22 p32 "")

(command "отрезок" p12 p42 "")

(command "отрезок" p32 p52 "")

(command "отрезок" p22 p62 "")

(command "отрезок" p22 p72 "")

(command "плиния" p1 "Ш" 1 1 p12 "")

(command "плиния" p2 "Ш" 1 1 p22 "")

(command "плиния" p3 "Ш" 1 1 p32 "")

(command "кольцо" 0 2 p1 p2 p3 "")

(command "кольцо" 0 2 p12 p22 p32 "")

(command "текст" "ВПИ" (list (- m1 7) (+ m2 5)) (list (- m1 3) (+ m2 5)) 5 (strcase (strcat ot1 "1"))) ;обозначение проекций 1-ой точки всегда выводится слева вверху от самой проекции

(command "текст" "ВПИ" (list (- m1 7) (+ m3 5)) (list (- m1 3) (+ m3 5)) 5 (strcase (strcat ot1 "2")))

(command "текст" "ВПИ" (list (- m4 7) (+ m3 5)) (list (- m4 3) (+ m3 5)) 5 (strcase (strcat ot1 "3")))

(command "текст" "ВПИ" (list (+ m12 3) (- m22 7)) (list (+ m12 7) (- m22 7)) 5 (strcase (strcat ot2 "1"))) ;обозначение проекций 2-ой точки всегда выводится справа внизу от самой проекции

(command "текст" "ВПИ" (list (+ m12 3) (- m32 7)) (list (+ m12 7) (- m32 7)) 5 (strcase (strcat ot2 "2")))

(command "текст" "ВПИ" (list (+ m42 3) (- m32 7)) (list (+ m42 7) (- m32 7)) 5 (strcase (strcat ot2 "3")))

(command "текст" "ВПИ" (polar b1 (dtr 0.0) (+ 5 len)) (polar b1 (dtr 0.0) (+ 20 len)) 5 "y(-x)")

(command "текст" "ВПИ" (polar b1 (dtr 90.0) (+ 5 len)) (polar (list (+ 20 (car b1)) (cadr b1)) (dtr 90.0) (+ 5 len)) 5 "z(-y)")

(command "текст" "ВПИ" (polar b1 (dtr 180.0) (+ 20 len)) (polar b1 (dtr 180.0) (+ 5 len)) 5 "x(-y)")

(command "текст" "ВПИ" (polar b1 (dtr 270.0) (+ 9 len)) (polar (list (+ 20 (car b1)) (cadr b1)) (dtr 270.0) (+ 9 len)) 5 "y(-z)")

(command "текст" "ВПИ" (polar (polar b1 (dtr 0.0) len) (dtr 90.0) (+ 5 len)) (polar (polar b1 (dtr 0.0) (+ 25 len)) (dtr 90.0) (+ 5 len)) 6 (strcase (strcat ot2 "(" (rtos x2) ";" (rtos y2) ";" (rtos z2) ")")))

(command "текст" "ВПИ" (polar (polar b1 (dtr 180.0) (+ 25 len)) (dtr 90.0) (+ 5 len)) (polar (polar b1 (dtr 180.0) len) (dtr 90.0) (+ 5 len)) 6 (strcase (strcat ot1 "(" (rtos x1) ";" (rtos y1) ";" (rtos z1) ")")))

(princ)

)

 

Пример: Программа для принятия позиционной задачи по определению точки пересечения прямой с плоскостью. Координаты точки пересечения выводятся на чертёж, указываются её проекции. Прямая и плоскость определяются введёнными с клавиатуры координатами точек, их определяющих.


;ПЕРЕСЕЧЕНИЕ ПРЯМОЙ И ПЛОСКОСТИ

 

(defun dtr (a) ;функция перевода градусов в радианы

( * pi (/ a 180.0))

)

 

(defun c:ПЕРЕСЕЧ (/ b1 len s1 s2 s3 s4 x y z x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 x5 y5 z5 p1 p2 p3 p4 p5 p6 p7 p12 p22 p32 p42 p52 p62 p72 p23 p33 p43 p53 p63 p73 p24 p34 p44 p54 p64 p74 p25 p35 p45 p55 p65 p75 n1 n2 m1 m2 m3 m4 m12 m22 m32 m42 m13 m23

mm4 m24 m34 m44 m15 m25 m35 m45 vivod apl bpl cpl apl2 bpl2 cpl2 apl3 bpl3 cpl3 apr bpr cpr k1 k2 k3 k4)

 

(prompt "\n Рисуем пересечение прямой и плоскости") ;ввод необходимых значений

(initget 1)

(setq x1 (getreal "\n Введите координату X 1-ой точки плоскости:")

y1 (getreal "\n Введите координату Y 1-ой точки плоскости:")

z1 (getreal "\n Введите координату Z 1-ой точки плоскости:")

x2 (getreal "\n Введите координату X 2-ой точки плоскости:")

y2 (getreal "\n Введите координату Y 2-ой точки плоскости:")

z2 (getreal "\n Введите координату Z 2-ой точки плоскости:")

x3 (getreal "\n Введите координату X 3-ей точки плоскости:")

y3 (getreal "\n Введите координату Y 3-ей точки плоскости:")

z3 (getreal "\n Введите координату Z 3-ей точки плоскости:")

x4 (getreal "\n Введите координату X 1-ой точки прямой:")

y4 (getreal "\n Введите координату Y 1-ой точки прямой:")

z4 (getreal "\n Введите координату Z 1-ой точки прямой:")

x5 (getreal "\n Введите координату X 2-ой точки прямой:")

y5 (getreal "\n Введите координату Y 2-ой точки прямой:")

z5 (getreal "\n Введите координату Z 2-ой точки прямой:")

b1 (getpoint "\n Укажите точку начала координат:")

)

 

(setq len (+ 10 (max (abs x1) (abs y1) (abs z1) (abs x2) (abs y2) (abs z2) (abs x3) (abs y3) (abs z3) (abs x4) (abs y4) (abs z4) (abs x5) (abs y5) (abs z5))))

 

(setq s1 (polar b1 (dtr 0.0) len)

s2 (polar b1 (dtr 90.0) len)

s3 (polar b1 (dtr 180.0) len)

s4 (polar b1 (dtr 270.0) len)

)

 

(setq n1 (car b1) ;перевод координат точек из нашей СК в базовую

n2 (cadr b1)

)

(setq m1 (- n1 x1)

m2 (- n2 y1)

m3 (+ n2 z1)

m4 (+ n1 y1)

 

m12 (- n1 x2)

m22 (- n2 y2)

m32 (+ n2 z2)

m42 (+ n1 y2)

 

m13 (- n1 x3)

m23 (- n2 y3)

m33 (+ n2 z3)

m43 (+ n1 y3)

 

m14 (- n1 x4)

m24 (- n2 y4)

m34 (+ n2 z4)

m44 (+ n1 y4)

 

m15 (- n1 x5)

m25 (- n2 y5)

m35 (+ n2 z5)

m45 (+ n1 y5)

)

 

(setq p1 (list m1 m2)

p2 (list m1 m3)

p3 (list m4 m3)

p4 (list n1 m2)

p5 (list m4 n2)

p6 (list n1 m3)

p7 (list m1 n2)

 

p12 (list m12 m22)

p22 (list m12 m32)

p32 (list m42 m32)

p42 (list n1 m22)

p52 (list m42 n2)

p62 (list n1 m32)

p72 (list m12 n2)

 

p13 (list m13 m23)

p23 (list m13 m33)

p33 (list m43 m33)

p43 (list n1 m23)

p53 (list m43 n2)

p63 (list n1 m33)

p73 (list m13 n2)

 

p14 (list m14 m24)

p24 (list m14 m34)

p34 (list m44 m34)

p44 (list n1 m24)

p54 (list m44 n2)

p64 (list n1 m34)

p74 (list m14 n2)

 

p15 (list m15 m25)

p25 (list m15 m35)

p35 (list m45 m35)

p45 (list n1 m25)

p55 (list m45 n2)

p65 (list n1 m35)

p75 (list m15 n2)

)

 

(setq apr (- x5 x4)

bpr (- y5 y4)

cpr (- z5 z4)

apl2 (- x2 x1)

bpl2 (- y2 y1)

cpl2 (- z2 z1)

apl3 (- x3 x1)

bpl3 (- y3 y1)

cpl3 (- z3 z1)

)

 

(setq apl (- (* bpl2 cpl3) (* cpl2 bpl3))

bpl (- (* cpl2 apl3) (* apl2 cpl3))

cpl (- (* apl2 bpl3) (* bpl2 apl3))

)

 

(setq dpl (- 0 (+ (* apl x1) (* bpl y1) (* cpl z1))))

 

(if (= (+ (* apl apr) (* bpl bpr) (* cpl cpr)) 0)

(if (/= (+ (* apl x5) (* bpl y5) (* cpl z5) dpl) 0) (setq vivod " Параллельность ")

(if (= (+ (* apl x5) (* bpl y5) (* cpl z5) dpl) 0)

(if (= (+ (* apl x4) (* bpl y4) (* cpl z4) dpl) 0) (setq vivod " Совпадение ")

(if (= (* apl bpr cpr) (* bpl apr cpr) (* cpl apr bpr))

(progn

(setq vivod " Перпендикулярность в т.A ")

(setq par (/ (- 0 (* apl x4) (* bpl y4) (* cpl z4) dpl) (+ (* apl apr) (* bpl bpr) (* cpl cpr))))

(setq x (+ x4 (* apr par))

y (+ y4 (* bpr par))

z (+ z4 (* cpr par)))

)

)

)

(if (= (* apl bpr cpr) (* bpl apr cpr) (* cpl apr bpr))

(progn

(setq vivod " Перпендикулярность в т.A ")

(setq par (/ (- 0 (* apl x4) (* bpl y4) (* cpl z4) dpl) (+ (* apl apr) (* bpl bpr) (* cpl cpr))))

(setq x (+ x4 (* apr par))

y (+ y4 (* bpr par))

z (+ z4 (* cpr par)))

)

)

)

)

(if (= (* apl bpr cpr) (* bpl apr cpr) (* cpl apr bpr))

(progn

(setq vivod " Перпендикулярность в т.A ")

(setq par (/ (- 0 (* apl x4) (* bpl y4) (* cpl z4) dpl) (+ (* apl apr) (* bpl bpr) (* cpl cpr))))

(setq x (+ x4 (* apr par))

y (+ y4 (* bpr par))

z (+ z4 (* cpr par)))

)

)

)

 

(if (= vivod nil)

(progn

(setq vivod " Пересечение в т.A ")

(setq par (/ (- 0 (* apl x4) (* bpl y4) (* cpl z4) dpl) (+ (* apl apr) (* bpl bpr) (* cpl cpr))))

(setq x (+ x4 (* apr par))

y (+ y4 (* bpr par))

z (+ z4 (* cpr par)))

)

)

 

(setq k1 (- (car b1) x)

k2 (- (cadr b1) y)

k3 (+ (cadr b1) z)

k4 (+ (car b1) y)

)

 

(command "отрезок" s1 s3 "") ;вывод на экран осей, проекций точек и прямой, а также текстового сопровождения

(command "отрезок" s2 s4 "")

(command "отрезок" p1 p2 "")

(command "отрезок" p2 p3 "")

(command "отрезок" p1 p4 "")

(command "отрезок" p3 p5 "")

(command "отрезок" p2 p6 "")

(command "отрезок" p2 p7 "")

 

(command "отрезок" p12 p22 "")

(command "отрезок" p22 p32 "")

(command "отрезок" p12 p42 "")

(command "отрезок" p32 p52 "")

(command "отрезок" p22 p62 "")

(command "отрезок" p22 p72 "")

 

(command "отрезок" p13 p23 "")

(command "отрезок" p23 p33 "")

(command "отрезок" p13 p43 "")

(command "отрезок" p33 p53 "")

(command "отрезок" p23 p63 "")

(command "отрезок" p23 p73 "")

 

(command "отрезок" p14 p24 "")

(command "отрезок" p24 p34 "")

(command "отрезок" p14 p44 "")

(command "отрезок" p34 p54 "")

(command "отрезок" p24 p64 "")

(command "отрезок" p24 p74 "")

 

(command "отрезок" p15 p25 "")

(command "отрезок" p25 p35 "")

(command "отрезок" p15 p45 "")

(command "отрезок" p35 p55 "")

(command "отрезок" p25 p65 "")

(command "отрезок" p25 p75 "")

 

(command "плиния" p1 "Ш" 1 1 p12 "")

(command "плиния" p2 "Ш" 1 1 p22 "")

(command "плиния" p3 "Ш" 1 1 p32 "")

(command "плиния" p1 "Ш" 1 1 p13 "")

(command "плиния" p2 "Ш" 1 1 p23 "")

(command "плиния" p3 "Ш" 1 1 p33 "")

(command "плиния" p12 "Ш" 1 1 p13 "")

(command "плиния" p22 "Ш" 1 1 p23 "")

(command "плиния" p32 "Ш" 1 1 p33 "")

(command "кольцо" 0 2 p1 p2 p3 "")

(command "кольцо" 0 2 p12 p22 p32 "")

(command "кольцо" 0 2 p13 p23 p33 "")

 

(command "текст" "ВПИ" (polar b1 (dtr 0.0) (+ 5 len)) (polar b1 (dtr 0.0) (+ 20 len)) 5 "y(-x)")

(command "текст" "ВПИ" (polar b1 (dtr 90.0) (+ 5 len)) (polar (list (+ 20 (car b1)) (cadr b1)) (dtr 90.0) (+ 5 len)) 5 "z(-y)")

(command "текст" "ВПИ" (polar b1 (dtr 180.0) (+ 20 len)) (polar b1 (dtr 180.0) (+ 5 len)) 5 "x(-y)")

(command "текст" "ВПИ" (polar b1 (dtr 270.0) (+ 9 len)) (polar (list (+ 20 (car b1)) (cadr b1)) (dtr 270.0) (+ 9 len)) 5 "y(-z)")

;(command "текст" "ВПИ" (polar (polar b1 (dtr 180.0) (+ 25 len)) (dtr 90.0) (+ 5 len)) (polar (polar b1 (dtr 180.0) len) (dtr 90.0) (+ 5 len)) 6 vivod)

 

(command "слой" "Н" "1" "Ц" "5" "1" "У" "1" "")

(command "плиния" p14 "Ш" 1 1 p15 "")

(command "плиния" p24 "Ш" 1 1 p25 "")

(command "плиния" p34 "Ш" 1 1 p35 "")

(command "кольцо" 0 2 p14 p24 p34 "")

(command "кольцо" 0 2 p15 p25 p35 "")

 

(command "слой" "Н" "2" "Ц" "6" "2" "У" "2" "")

(command "кольцо" 0 2 (list k1 k2) (list k1 k3) (list k4 k3) "")

(command "текст" "ВПИ" (list (+ k1 3) (+ k2 5)) (list (+ k1 7) (+ k2 5)) 5 "A1")

(command "текст" "ВПИ" (list (+ k1 3) (+ k3 5)) (list (+ k1 7) (+ k3 5)) 5 "A2")

(command "текст" "ВПИ" (list (+ k4 3) (+ k3 5)) (list (+ k4 7) (+ k3 5)) 5 "A3")

(command "текст" "ВПИ" (polar (polar b1 (dtr 0.0) (- len 5)) (dtr 90.0) (+ 5 len)) (polar (polar b1 (dtr 0.0) (+ 30 len)) (dtr 90.0) (+ 5 len)) 6 (strcase (strcat "A" "(" (rtos x 2 2) ";" (rtos y 2 2) ";" (rtos z 2 2) ")")))

 

(command "слой" "У" "0" "")

 

(print vivod)

(princ)

)


Список литературы

1. Бубешников А.В. Начертательная геометрия – М., 1985.

2. Кречко Ю.А. AutoCAD: программирование и адаптация – М., 1995.

3. Кречко Ю.А., Полищук В.В. AutoCAD – М., 1994.

4. Крыков Н.М. Начертательная геометрия – М., 1990.

5. Локтев О.В. Краткий курс начертательной геометрии – М., 1985.

6. Павлова А.А. Начертательная геометрия – М., 1999.

7. Тарасов Б.Ф. Методы изображения в строительстве – Л., 1987.

 









Последнее изменение этой страницы: 2016-12-27; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь