Меню
Главная
Авторизация/Регистрация
 
Главная arrow Техника arrow ИНЖЕНЕРНАЯ 3D-КОМПЬЮТЕРНАЯ ГРАФИКА
Посмотреть оригинал

Аналитические поверхности

AutoCAD позволяет [10, 12] создать поверхность, точки которой имеют х, у, z — координаты, определяемые аналитическими выражениями:

гдcfx,fy,f2 некоторые функции независимых параметров и, v.

Формирование поверхности можно представить как деформирование равномерной ортогональной шьсетки (рис. 25.6, а, 25.7, а). Сетку растягивают, сжимают, изгибают так, чтобы се узловые точки приняли положение, задаваемое функциями fx, fy, fz. Расчеты координат узлов и все построения выполняются автоматически программой 25.1. Созданную поверхность можно исследовать, например, построив ее разнообразные сечения, включить в состав solid-модели детали или архитектурного объекта.

Схема построения поверхности z =f(x, у)

Рис. 25.6. Схема построения поверхности z =f(x, у):

а — координатная сетка и, ^-параметров; б — граничные параметры поверхности

Схема построения параметрической поверхности

Рис. 25.7. Схема построения параметрической поверхности:

а — координатная сетка и, ^-параметров; б — граничные параметры

Явное и параметрическое задание поверхности

Если функции/*, fy, определяющие поверхность, заданы равенствами х = и, у = v, то третья функция —}г становится явно заданнной функцией двух пере- менныхг =/(*, #)• Сетка и, ^-параметров преобразуется в равную ей сетку ^ «/-параметров.

Например, гиперболический параболоид при х = и. у = v определяется уравнением: z = а - (х - а) ? (у - а). Построение (рис. 25.6, в) выполнено при а = 2. Отсек поверхности ограничен значениями: Xmin = Fmin = 1; Xmax = Утах = 3. Дискретность каркаса, т.е. количество рядов пи и строк nv сети, определена значениями пи = nv= 10.

При параметрическом задании поверхности все координаты ее точек являются функциями параметров и, v. Примером является эвольвентный геликоид, ранее рассмотренный как кинематическая поверхность (см. п. 20.4). Сейчас (см. рис. 25.7) он представлен как параметрически заданная аналитическая поверхность, определенная уравнениями [27, с. 20]:

где т = ~la2 + b2.

Параметры сети (см. рис. 25.7, а): количество поясов пи = 5, количество образующих nv = 30. Граничные значения: —100 < и < 100 (это задает длину образующей, равной 200); 0 < v < 2тг (строится один виток направляющей гели- сы). Параметр а является радиусом направляющей гелисы, b — шаг гелисы. Поверхность построена при а = 30, b = 10 (рис. 25.7, б).

Программа построения аналитической поверхности

Программа 25.1 строит оба вида поверхностей, как явно заданные, так и параметрические. Функция fp1 содержит уравнения/,., fy, fz создаваемой поверхности, по ним и по и, г:-координатам узлов сети fp 1 рассчитывает х, у, z-коор- динаты узлов. Граничные значения сети, параметры ее дискретности и постоянные параметры уравнений поверхности задаются в функции getdata.

Функция list mesh рассчитывает и, ^-координаты всех узлов сети и передает их функции fp1 для определения х, у, z-координат узлов. Координаты заносятся в список mesh.

Чтобы обеспечить наглядность визуализации, список mesh переопределяется с целью масштабирования поверхности по 2-координате. Если задать коэффициент kz = nil, то масштабирование не выполняется и поверхность строится но истинным значениям 2-координат. Иначе отсек поверхности вписывается в параллелепипед, высота которого Я (см. рис. 25.6, б, 25.7, б) задается по отношению к длине L = (Х|пах - Xmin): Н = kz-L. Коэффициент масштабирования kz подбирается экспериментально. При kz = 0 поверхность вырождается в плоскость. При kz = 1 высота параллелепипеда устанавливается равной его длине L.

Функция mesh_1 генерирует сеть по списку mes/г-координат ее узловых точек. Она основана на команде 3DMESH (ЗОСЕТЬ). Имеется ограничение на количество узлов сети. Каждое из значений пи, nv не должно превышать 256. Более широкие возможности генерирования сети дают модули [10, с. 189, 215].

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

Программа 25.1

  • 111 Построение поверхности, заданной уравнением z = f(x,y)
  • (defun fpl (u v / z) поверхность (1)
  • (setq x u

у v

z (+ (/ <* x (sin (1+ y))> (1+ (abs y))) (/ (* у (cos (1+ x))) (1+ (abs x)))) )

(list x у z) ;_хоординаты uv-узла сети

)

lll==== Ввод данных для поверхностей (1) и (2)

  • (defun getdata ( )
  • (setq umin —10. umax 10.

nu 50 дискретность сети по u—координате vmin —10. vmax 10.

nv 50 ; дискретность сети no v—координате kz 0.7 ;_коэфф. массштабирования по z—координате

;;;========Создать список узлов сети

(defun list_mesh (шпах umin vmax vmin nu nv kz / i j k mesh meshl pt stepu stepv

и v xmax xmin zmax zmin)

(setq stepu (/ (— umax umin) (1— пи)) ;_шаг no параметру и

stepv (/ (— vmax vmin) (1— nv)) ;_шаг по параметру v

i 0 ;_счетчик по и

)

  • (repeat пи ;_цикл по и
  • (setq j 0) ;_счетчик no v (repeat nv ;_цикл no v
  • (setq и (+ umin (* i stepu))

v (+ vmin (* j stepv))

mesh (cons (fpl и v) mesh) ;_включить узел в список сети j (1+ 3)

)

)

(setq i (1+ i))

)

;;/‘Масштабирование сети по z-координате (if kz (setq

;;упорядочить список mesh по убыванию z—координаты

meshl (vl—sort mesh (function (lambda (el e2) (> (caddr el) (caddr e2))))) zmax (caddr (car meshl)) zmin (caddr (last meshl))

;;упорядочить список mesh по убыванию x—координаты meshl (vl—sort mesh (function (lambda (el e2) (> (car el) (car e2)))))

xmax (car (car meshl)) xmin (car (last meshl))

k (/ (* kz (— xmax xmin)) (— zmax zmin))

mesh (mapcar '(lambda (pt) (list (car pt) (cadr pt) (* k (caddr pt)))) mesh)

)

)

(reverse mesh);_возвращаемый список сети

)

;;;======Модуль генерирования сети mesh, заданной на прямоугольной сетке nu*nv.

  • (defun mesh_l (mesh nu nv )
  • (command "_3dmesh" nu nv)
  • (foreach p mesh (command p))

)

;;;======Главная функция

  • (defun c:fp (/ umax umin vmax vmin nu nv kz)
  • (command "_undo" "_m") ;_поставить метку (setvar "cmdecho" 0) ;_отключить эхо—вывод (setvar "osmode" 0) ;_отключить объектную привязку (getdata) ;_ввод данных: umax umin vmax vmin nu nv kz
  • (setq mesh (list_mesh umax umin vmax vmin nu nv kz)) /„составить список сети (mesh_l mesh nu nv) /„сгенерировать полигональную сеть )
  • (defun c:mu ( ) (command "_undo" "_b")) /„отмена построений до метки (princ "п Для построения набери (c:fp) ") ;_сообщение при загрузке программы

Для построения поверхности наберите текст программы (о работе с lisp-программами см. и. 8.8), выполните отладку, загрузите программу и введите с командной строки имя главной функции fp.

Для других поверхностей необходимо составить уравнения fx,fy,fz на языке AutoLisp и внести их в функцию Jр1. Уравнение может быть сколь угодно сложным, однако в любом случае избегайте точек, в которых функция не определена, например точек деления на ноль. В функции getdata необходимо задать границы области определения umin, umax, vmin, vmax, параметры nu, nv, определяющие дискретность сети по направлениям соответственно и, v, коэффициент kz масштабирования функции по высоте и постоянные параметры, входящие в уравнения поверхности.

 
Посмотреть оригинал
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Предыдущая   СОДЕРЖАНИЕ   Следующая >
 

Популярные страницы