Поверхности ориентированные на художественное конструирование

Поверхности определяют границы тела, задание которых является часто трудоемким процессом. При художественном моделировании, главной задачей является обеспечить легкость задания поверхностей, их необычность и эстетичность. Сочетание: 1) задания линий в CorelDraw и 2) генерирование поверхностей по линиям в системе "Вектор" дает пользователю удобный инструмент моделирования художественных форм. При этом не исключается возможность задания форм технических объектов, их раскрой и воспроизводство. Все зависит от того, как будут подготовлены исходные данные и от навыков работы пользователя в системе.

В основе создания поверхности лежат линии: образующие (их набор - сечения), направляющие или просто набор точек - плазовая таблица (например, как это принято представлять поверхность корпуса судна в судостроении).
Задание поверхности подобно заданию линий, только на порядок выше. Так уравнение отрезка прямой определяется по линейному закону:
pi=(1-t)*p1 + t*p2
0 <  t < 1,
где (1-t)  и t при р1 и р2 - весовые функции, обеспечивающие при t=0 - значение текущей точки в р1, а при t=1 - значение текущей точки в р2

Аналогично можно рассуждать и о поверхности, построенной между двумя линиями:
Li= (1-v)*U0+v*U1

Линии, в свою очеред, представляют точками, соединенных отрезками. Говорят поверхность задана, если двум ее координатам соответствует третья (при явном задании координат), или двум безразмерным параметрам (обычно это u,v), соответствует точка на поверхности (три ее координаты).

Не останавливаясь на классических вариантах задания поверхности (см. начертательную и аналитическую геометрии), рассмотрим способы задания поверхностей в системе "Арт-Вектор", как на базовом уровне, так и через МК.

Поверхности вращения задаются одной образующая); линейчатая поверхность - через две образующие. Образующие могут быть заданы, как непосредственно через меню системы, так и  импортированы из формата .dxf, созданные в CorelDraw или AutoCad.

На рис. 1  видно, как задается поверхность вращения.

а)                                                                             б)                                                с)
             
                                                                        Рис. 1
Образующая кривая была импортирована из формата .dxf.  Есть  условие: линия импортируется в группу и, чтобы ее использовать в качестве образующей, надо из группы "вытащить" на верхний уровень (см. структуру на рис. 1, а). Сечения могут быть заданы по узлам (ставится галочка), что позволяет задавать различные валики, у которых образующая - ломаная линия.
 
Во второй версии системы "Вектор" поверхность может быть задана каркасом, или окрашена и освещена по выбору пользователя или преобразована в сетку полилиний, с которыми можно выполнять всевозможные художественные и конформные преобразования.
 
   

Линейчатые поверхности

   
Рис. 2
На рис. 2 показано, как задается линейчатая поверхность по двум образующим, заданных в системе - одна квадратичная кривая, другая - кривая Безье. Как и с поверхностью вращения, сечения могут проходить по узловым точкам, что также является полезным.


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

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

For v=0 To 1  Step  0.1
        Set pi = p((1-v)*p00.x+v*p10.x,(1-v)*p00.y+v*p10.y,(1-v)*p00.z+v*p10.z)
        Set pj = p((1-v)*p01.x+v*p11.x,(1-v)*p01.y+v*p11.y,(1-v)*p01.z+v*p11.z)
                For u=0 To 1  Step  0.1
                        Set K = p((1-u)*pi.x+u*pj.x,(1-u)*pi.y+u*pj.y,(1-u)*pi.z+u*pj.z)
                        Ngpoint.ss  K
                Next
Next


Поверхности Кунса

Из приведенной программы можно заметить, что прямая рi-рj "пробегает" своим концами по боковым  направляющим линиям, а точка К, в свою очередь, по этим линиям и зависит от образующих р00-р01 и р10-р11.  Причем, решение будет адекватным, если направляющие и образующие поменять местами.

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

r(u,v)= r1(u,v)+r2(u,v) - rkp(u,v)
где
r1(u,v) - вектор на линейчатой поверхности u0-u1
r2(u,v) - вектор на линейчатая поверхности v0-v1
rkp(u,v) - вектор любой точки на косой плоскости.

Задание линейчатой поверхности по двум импортируемым линиям в системе "Вектор"  можно выполнить с помощью МК.


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



Итак, поверхность Кунса (МК здесь) получается следующим образом:
    +      = 
В системе "Вектор" можно создать МК, которая будет работать с полилиниям, заданными в структуре, что позволяет генерировать поверхность Кунса по любым заданным линиям (задавать линии непосредственно внутри системы, импортировать линии, (их преобразовывать). Однако импортируемые линии являются все равно плоскими. В этом случае предлагается другой подход формирования поверхностей - квадратичный: через 4 линии контура, и характеристическую точку и параметр управления. Можно пойти еще дальше - задание кубической поверхности, также через 4 линии контура и 4 характеристические точки. Характеристические точки,  в принципе тоже самое, что при задании в CorelDraw кривых Безье.

Квадратичные поверхности

Для задач художественного моделирования импортируемые линии, и соответственно, поверхности часто необходимо выгнуть в направлении экранной оси z ( к нам или от нас). Для этих целей создан универсальный подход, в котором на серединах кривых линиях контура задаются высоты, и характеристическая точка (Х.Т.) для всей поверхности, которая  позволяет управлять поверхностью. Для более тонкого управления поверхностью, используется параметр выпуклости/уплощения поверхности. Кроме того,  лини v0 и v1 могут не задаваться. Реверс линий означает считывание в них точек в обратном порядке. Разброс точек - это степень специальной неточности задания узловых точек (для художественных задач, например, при паркетировании или преобразование картину в кубистическую манеру письма). Условие паркетирования задается в состоянии "Поверхности". Также и реверс линии выведен в состоянии "Линии".

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

 
Алгоритм задания такой поверхности Ноу Хау. Ниже показаны различные варианты поверхностей, полученных по квадратичному закону по уже известным (см. Кунс) линиям контура.

     
   
Примеры квадратичных поверхностей, полученных с помощью МК
 
   
Квадратичные поверхности (с Х.Т.), полученных через меню системы "Арт-Вектор
    
Примеры применения  поверхностей Кунса (без Х.Т.)
      
Примеры квадратичных поверхностей (с Х.Т.)


Полиповерхности - плазовые поверхности

По аналогии полилинии - линия состоящая из множества отрезков, может быть и полиповерхность - поверхность состоящая из множества линий, между которыми проходят линейчатые поверхности. Такими поверхностями обычно представляют поверхность корпуса судна. Так теоретический чертеж состоит из 20 поперечных линий - шпангоутов, плазовый чертеж  может содержать 200 и более линий шпангоутов. В художественном  конструировании, допустим, 200 линий не нужно, а вот 3-4 линии, вплоть до 10-20 потребуется, например, для моделирования барельефа лица человека, его фигуры.
Диалог на примере задания судовой поверхности следующий:

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

   

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

  

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


Моделирование судовых поверхностей на примерах

Пример 1. Смоделировать гондолу катамарана из нескольких окружностей с изменяющимся диаметром и
положением по вертикали и горизонтали.
Решение.
1) Окружности от кормы к носу задаем в CorelDraw, с изменяющимся диаметром и положением по вертикали, располагая их на проекции "Корпус", так чтобы они шли последовательно от носа к корме.
 
Рис. 1                                                    Рис. 2
2) Выделяем шпангоуты (окружности) и сначала преобразовываем их в кривые, а затем экспортируем в файл в формате .dxf.
3) Импортируем файл в "Арт-Вектор" и смотрим, все ли получилось как надо. Линии будут находится в одной группе, и лежать в одной плоскости. Чтобы задать шпангоуты их не в группе и раскидать вдоль гондолы, удобнее воспользоваться МК.
<raft.vbs>
Import "E:\OXK\Teor_ship\Gand1.dxf",1
nsh = 6 ' число линий
s=1  ' шаг
For m=0 To nsh Step 1
    CurrObjNmb = m
    obj.origin(2) = sh
    obj.SetH
    sh=sh+s
Next
Рис.2  - результат работы вышеприведенной МК
4) Формирование поверхности происходит по семи сечениям. Можно сразу всю поверхность представить в виде полиповерхности, или по участкам, построенным по двум, трем или четырем линиям-сечениям.
 
а)                                                              б)
  
Рис.3. а) полиповерхность, б) по 4-м и трем шпангоутам-сечениям.
 
а)                                б)                                      с)
  
Рис.4. а) два участка, б) три участка, каждый через три сечения, с) три участка: по три, три и два сечения

Рис. 5. Комплексный чертеж и аксонометрия

И все же правильны пословицы: "Отличное враг хорошего" или "От добра не ищут добра". Зачем проектировать гондолу катамарана через 7 сечений, когда достаточно  4 и даже три, тем более система "Арт-Вектор" предоставляет такие возможности. Ниже построены такие поверхности.

 
Рис.6. Поверхность через концевые и среднее сечения
Рис.7. Поверхность через концевые, третье и шестое сечения-шпангоуты
 
 
Рис.8. Поверхность через концевые, третье и пятое сечения-шпангоуты
 
Рис.9. И наконец поверхность через концевые, третье и пятое сечения-шпангоуты

Сглаживание полиповерохности

Из приведенных примеров видно, что проектирование требует гладкого спряжения не только через три и четыре сечения, но и более - до 20. Механизм гладкого сопряжения полиповерхности более чем через 4 сечения может быть решен подобно полилиниям (см. здесь). Гладкость и управление гладкостью можно решить с помощью квадратичных и кубических функций. Рассмотрим несколько примеров на уровне реализации этого подхода с помощью МК.
Пример. 1. Пусть заданы 3 сечения. Требуется построить  МК поверхность так чтобы она проходила через начальное и конечное сечение, а второе были характеристическим.
 
Рис. 10
Пример. 2. Пусть заданы 4 сечения. Требуется построить МК поверхность так чтобы она проходила через начальное и конечное сечение, а второе и третье были характеристическими. Построение таких поверхностей (см. рис.10 и МК) задача не сложная.


Пусть теперь это будет полиповерхность. Начальное и конечное сечение квадратичной поверхности будем формировать (см. МК ) на середине линейчатых, подобно тому, как это делалось на линиях при квадратичном сглаживании.
  
Рис. 11. Два участка сглаживания полиповерхности

Поверхнстью сглаживания можно управлять. Рис. 11, б - здесь парамер уравнения близок 1 и фактически поверхность проходит через заданные сечения. Рис. 11, в - здесь парамер уравнения близок s=-3 и  поверхности получились фантастические. Вообще, проектируемые поверхности таким метотом, не проходят черех свои сечения, но зато они получаются гладкими даже по второй производной.  Разрыв по первой и даже второй производной заметен для глаз, поэтому такой способ наиболее подходит лдля ОХК, где важнымм являются эстетические качества.


Генерирование поверхности корпуса судна по его плазовой таблице

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

Пример 2. Сгенерировать поверхность судна, используя его шпангоуты. Задача подобна предыдущей. Трудности могут возникнуть чисто из-за упущений: кривые расположены не в той последовательности и перепутаны концы с началом. Носовая и кормовая часть линии борта, также задаются в CorelDraw, но в МК они поворачиваются и сдвигаются.

  




Пример 3. Используя упрощенное представление серии ватерлиний, заданных в CorelDraw, сгенерировать по ним поверхность.
На рис. серия линий (преобразованных из прямоугольников: в кривые и соответственно манипуляцией точками), полученных простыми операциями: дублирования и сжатия, представлена в "Арт-Вектор" своими проекциями.
 
МК формирования ватерлиний в пространстве - проста. Недостаток такого подхода - нет участия в формирования поверхности - нулевого батокса.

Моделирование поверхностей по линиям контура, заданными двумя проекциями или по одной проекции и их высоте (координаты z)

 В практике художественного конструирования такая задача может возникнуть часто. Например, смоделировать футболку, которая бы держала форму спортсмена.  Поверхность Кунса и квадратичная позволяют проектировать линии по четырем линиям контура. Выбрать такие 4-ре линии на футболке можно по-разному. На рис. ниже показан такой прием - лини u0,u1 v0,v1. Чтобы учесть форму рук, торса, надо передать их форму в линии u0  u1 через вторые проекции (U0xz, U1xz).
 
Рис. Входные данные в СorelDraw
На рис. ниже показаны результаты моделирования  футболки на основе квадратичной поверхности с ее характеристической точкой, построенной на линиях контура, из которых две линии пространственные (построены по двум проекция), а две (v0 и v1) - тоже пространственные, но заданные своей одной проекцией и высотой на их середине. Здесь также можно поверхность разбивать на треугольники, 4-угольники, закрашивать их по методу случайных чисел, вносить в сетку погрешность задания узловых точек, менять число ячеек, к линиям сетки применять художественные и конформные преобразования.
   
Примеры, полученные с помощью МК
     
Рис. Примеры, полученные через базовые операции системы
Выводы: Можно довольно легко моделировать сложные формы. Видна тенденция, что одной Х.Т. недостаточно, нужно вводить кубическую поверхность с четырьмя Х.Т (алгоритм создан и отработан, нужна реализация).

 Трубы

Скругление у труб может быть 3-х видов (см. рис.).
а)                           b)                         c)
                           
Требуется написать программу задания таких трубчатых поверхностей.
1-й тип (рис. а). Линией соединения здесь будет эллипс, у которого малая ось равна полудиаметру труб, а вторая ось - величина неизвестная. В общем случае неизвестен и наклон осей.

Можно предложить решение: искать не эллипс, а кривую (полилинию). Алгоритм нахождения точки кривой: это пересечение образующих цилиндра с биссекторной плоскостью. Чтобы построить биссекторную плоскость (см. текст МК здесь), надо от точки р2 по этим осевым линия отложить равные расстояния (получены т. р21,р22). Отрезок, соединяющий середину отрезка р21-р22 (т.К) с т. Р2, даст след биссекторной плоскости на плоскости p1-p2-p3. Задавая на следе точку, и строя от нее перпендикуляр к плоскости  p1-p2-p3, получим три точки, определяющих биссекторную плоскость. Далее (рис. б) перебирая образующие на том или ином цилиндре, и отыскивая точки пересечения их с биссекторной плоскостью найдем искомый массив точек, определяющий искомый эллипс.

  

2-й тип. Здесь гладкое сопряжение выполняем по дуге окружности (квадратичной кривой). Алгоритм решения задачи такой (см. также текст МК). Вначале определяются узловые точки и в них в ту и другую сторону откладываются отрезки, равные, например, диаметру трубы. Через эти две точки проводим квадратичную кривую, у которой характеристической точкой будет узел. В системе "Вектор" есть возможность перебора точек на такой кривой (правда, надо для этого ее сделать сначала полилинией), и вычисления в этих точках касательных, которые используются для построения окружности в 3-мерном пространстве. На втором рис. показан результат скругления трубы в пяти узловых точках (МК).
  
Радиус трубы здесь можно уменьшать, однако увеличивать уже нельзя.
Для реализации в системе "Вектор" меню диалога может быть таким: задается образующая (осевая трубы ) в виде ломаной линии, радиус трубы, тип сглаживания и радиус сглаживания. По умолчанию он равен диаметру трубы.

Грань-объект - трехмерное тело по двум граням

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

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

Решение.  Расчет точек трехмерного тела будет зависеть от трех параметров: u,v,t, в связи с чем, требуется организовать три цикла (МК). Проблемой реализации данного подхода в системе "Вектор"  -  является, для хранения массива точек такого структурированного объекта, еще недостаточные ресурсы персональных компьютеров. Однако такой подход моделирования несомненно является перспективным.


Обобщенные конус и цилиндр

Как уже было, сказано, для художника важным является дружественный интерфейс системы: легко задавать линии (CorelDraw - позволяет это делать самым наилучшим способом) и так же легко - поверхности.
В этом плане можно предложить еще два объекта - обобщенный цилиндр, и обобщенный усеченный конус. В принципе, эти объекты в системе "Вектор и так не сложно задать. В первом случае нужно, например, сдублировать образующую и сдвинуть ее в заданном направлении. Для усеченного же конуса направляющую надо сдублировать, сдвинуть в направлении вершины конуса и изменить ее масштаб. Однако лучше это все автоматизировать через меню.
   
На уровне МК для задания обобщенного цилиндра есть метод:
LinPov.Nu = "22"
LinPov.Nv = "22"
linpov.Cyl  p1,  h,  N,  n99
где:
p1 - точка привязки (пока просто пустышка),
h - высота,
N - вектор нормали,
n99 - номер полилинии  образующей обобщенный цилиндр.

Метода задания обобщенного конуса нет, однако это нетрудно сделать с помощью МК.

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