Поверхности

 
Рис. Главная панель перехода на задание той или иной поверхности (после Текстуры... появилась уже новая команда команда Тень...)

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

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


Рис. Переход на задание линейчатых поверхностей

На рис.  показан переход на панель «Линейчатые поверхности», где на ее панели показаны  команды: «Создать… линейчатую поверхность», «Из линии и плоскости», «Развертка».
 
 

Создать…

После выполнения этой команды входим в панель
 


Рис. Параметры задания линейчатой поверхности

Линейчатая поверхность формируется по двум линиям u0 и u1, которые должны быть заданы ранее и присутствовать в главной структуре и структуре панели задания "линейчатой поверхности".
Число сечений — это число выводимых линий при построении. На самом деле, число сечений по v достаточно — 2 (остальные v-сечения  не влияют на поверхность). Поместить имена линий (надо сначала щелкнуть в окно, куда помещаем имя линии, а потом по имени линии в структуре) — система автоматически формирует поверхность. Если поверхность из-за неправильного направления линий получается не та, то линию нужно реверсировать (см. команду в панели «Линии»).

  

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

Из линии и пл-сти (из линии и плоскости)

Такая линейчатая поверхность формируется между линией и плоскостью. Причем точки от линии проецирутся на плоскость под прямым углом.  На практике грани объектов — это обычно линейчатые поверхности или поверхности вращения и только потом уже сложные: квадратичные, кубичные и прочие.  В этом плане в системе «Вектор» реализован подход формирования поверхности между линией и произвольной плоскостью.
На рис. показан неординарный пример башни,  у которой верхняя образующая задана в виде "пилы".
Используя ее в качестве образующей линии, а основание в качестве второй плоскости (грани), можно получить форму одной командой.

Рис. Башня как линейчатая поверхность: "Линия-плоскость"
 
Ограничения: поверхность формируется только ортогонально плоскости, в более общем случае направление проецирования к плоскости может быть произвольным.
 
Еще одно полезное качество здесь то, что участки образующей линии могут быть ортогональными к плоскости, — сложная задача проектирования вертикального борта судна. Если задавать не ортогональное проецирование, а из центра, то можно формировать конические поверхности: на входе задаются линия, плоскость и вершина конуса. Именно через такие конические поверхности в системе Форан формируется фальшборт — носовые, кормовые его части. В системе "Вектор" эту проблему можно решить через обобщенный конус и цилиндр (см. дальше). Для линейчатых поверхностей есть способ построения разверток.
 

Развертка...

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

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

Вращения...

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

На первой рисунке смоделирована как раз такая ситуация: линия-образующая есть, а в локальной структуре ее имении - нет  Поэтому пришлось в глобальную структуру и образующую вытащить из группы.

а)                                             б)
 
Рис. Задание поверхности вращения

Как только в панели задания «Поверхности» вы указали образующую, автоматически появляется  изображение поверхности. Далее вы можете изменить другие параметры, например, строить не всю круговую поверхность, а только ее часть, можете изменить число выводимых сечений по u или v, поменять внутренность, изменить освещенность (это уже в другом месте).
Существенным параметром является формирование поверхности по узлам, он при задании поверхностей присутствует, но не везде действует. Для «Линейчатых поверхностей» и «Вращения» этот параметр работает.
 

  
 Рис. Построение линейчатой поверхности по узлам и ее части.

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

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


Рис. Панель формирования параметров квадратичной поверхности

Поверхность в общем случае формируется по квадратичному закону - по двум направляющим и двум образующим. Еще можно задавать точку управления и параметр управления (действует только в случае, если используется точка управления, если хоть у одной из точек изменена нулевая координата.
Возьмем самый простой случай. Заданы два отрезка, которые используем в качестве образующих u0 и u1 — это минимальное условие задание линий. Эти два отрезка лежат в плоскости xy. Можно через эти линии построить поверхность, «оторвав» от плоскости по всем 4-м сторонам, задав для этого высоты средних точек. На рис. все они равны 2.

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

 
 
Рис. Квадратичная поверхность через тот же контур, что и на рисунке выше, но уже через среднюю точку  и с коэффициентом полноты.
 


Полиповерхность

  
Рис. Полиповерхности по сечениям заданными вращением вокруг оси.

Здесь формирование поверхности происходит по набору сечений, подобно тому, как полилиния  формируется по точкам. Чтобы не повторять построение линейчатой поверхности  по двум линиям, оно начинается по трем, причем не по линейному закону, а квадратичному,  по четырем – по кубическому закону.


Рис. Панель задания параметров полиповерхности

Далее по 5-и сечениям поверхность строится линейчатой. Так получилось, что построить линейчатую поверхность  по 3 и 4-м сечениям через «Полиповерхность» невозможно.  На рис. образующие линии-окружности были заданы в диалоге с указанием соответствующих координат центров окружностей по высоте, т.е. линии разбросаны по высоте при их задании, их можно разбросать по высоте с заданным шагом автоматически (см. панель «Линии»), но только, если они в группе и полилинии.
Итак, заданы три линии (не в группе), разбросанные в пространстве. Вводя их последовательно в окно «U линия № следующая», получим поверхность через три сечения по квадратичной зависимости.
 

  
Рис. Полиповерхность по 5 сечениям не сглаженная

Зададим  5 сечений, поместим  их в группу и также зададим полиповерхность. Линии по высоте заданы естественно друг от друга последовательно.  Чтобы поверхность построить, нужно  в команде «Линии из группы» поставить флажок. В этом случае группы становятся видимыми. Поместив соответствующее название, получим линейчатую поверхность по пяти сечениям  в виде «мясорубки».
 
Через панель задания полиповерхности (вход из структуры)  можно редактировать –изменять число выводимых u и v сечений,  менять внутреннюю часть поверхности на внешнюю. Каркас можно получить или из структуры (локально для данного объекта), или панели «Вид».
Полиповерхность - мощный инструмент для представления поверхности корпуса судна, когда сечений по шпангоутам задается до 200. Причем все сечения можно сложить  на одну плоскость (сканировать с одной плоскости), а затем разбросать в пространстве на заданный шаг  - шпацию.
 

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

 
Также как и для  полилинии,  для полиповерхности  имеется 4 типа сглаживания:
- по квадратичному закону,
- кубическому – Безье,
- по заданному радиуса  (используется, главным образом,  в изогнутых трубах)
- интерполяционный – по  заданным сечениям (в принципе, закон сглаживания здесь кубический).
Сглаживание важно для  судовых поверхностей, заданных на плазе. Там важен каждый миллиметр при длине судна  в сотни метров, и на экране ПК  вряд ли это можно проследить. Для этого используются  большие плоттеры, а для расчетов – мощные станции с параллельными вычислениями так называемые транспьютеры. Поэтому возьмем простой пример. Пусть сечения  разбросаны в пространстве по кругу. Чтобы  через них получить замкнутую поверхность, надо чтобы она замыкалась на  нулевое сечение.

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

Итак, начинаем формировать поверхность. Через три введенных линии появляется одна фигура, через четыре – другая.
 
  
Рис. Поверхности через три, четыре и пять сечений
 
Подкорректировав  число сечений: u =9, а  v = 4  - получим правильное 6-гранное тело.


 
Далее, применяя сглаживание, получаем самые разнообразные по форме фигуры.

  
 

Обобщенный цилиндр

 
Рис. Панель задания параметров обобщенного цилиндра

Уникальным здесь является то, что обобщенный цилиндр можно делать не из одной линии, а из группы  На рис. группа состоит из двух окружностей. Зададим им направляющий вектор, который определяет направление обобщенного цилиндра и высоту цилиндра вдоль его направления.
Проверим, что получится при импортировании из CorelDraw линий, допустим двух пятиугольников. Получили то, что и требовалось.  При таких поверхностях должен стоять флажок «Сечения по узлам  U».

 

Обобщенный конус


Рис.

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

Пусть в CorelDraw заданы два прямоугольника. Построим их как обобщенные конусы к точке схода (0,0,-10). Высота обобщенного конуса  равна 6.
 
  
Построили два обобщенных конуса. Что дальше? Где перевоплощения,  художественные эффекты?  Смотрим дальше. Делаем преобразования линий поверхности в полилинии, а уже с ними твори, что хочешь.  Такой пример показан на рис. справа.
 

Обобщенная труба

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

 Рис. Задание трубы

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

XY поверхности

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

Для этих  целей и были введены аналитические поверхности. Планируется в следующей версии системы, дать возможность пользователю самому добавлять  новые варианты аналитических поверхностей. Пока их собрано – 172. Какие-то поверхности  могут быть неудачными, поэтому для  выбора нужной поверхности предусмотрен  их автоматический   перебор  и автоматическая запись в формате .bmp  с последующей анимацией.
 
 
  Рис. Панель задания параметров аналитических поверхностей

Тип аналитической поверхности задается  в строке  «Тип рельефа». «Начало» и «Правый верхний угол» определяют область задания прямоугольной сетки, «Число U-сечений»,   «Число V-сечений», соответственно сетку аналитической поверхности. Внутренность –параметр уже известный.
Ракурс поверхности не меняем; проекция ее  будет просто ортогональная  сетка.
  
Рис. Аналитические поверхности

Чтобы нанести сетку на аналитическую поверхность, нужно преобразовать (выполнить команду) «Поверхность ->  полилиния». В зависимости от  поставленных задач сетка будет усиливать рельеф или сама станет объектом.

 
Рис. Сетка на рельефе.

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

В состоянии  «XY-поверхности»  есть возможность  быстрого просмотра аналитических поверхностей в диапазоне от 1 до 172 или в каком-либо интервале. При этом рисунки выводятся на экран или в файл  в формате .bmp., создавая затем баннеры или другие какие динамические заставки. Многие примеры таких преобразований даны  на сайте  http://vm.msun.ru в разделе «Выставки»

 
Рис. Панель задания параметров  при переборе аналитических поверхностей
 

Фон –> XY-поверхность

В этом случае растровая картинка-фон  в зависимости от высоты каждой точки преобразовывается в аналитическую поверхность-рельеф. Здесь из-за  одной окраски поверхности  формы  не всегда вырисовываются, как хотелось бы. Однако применяя для этого аналитические поверхности другого цвета, эти формы выступают уже рельефнее. Кроме того, эту поверхность можно преобразовать  в полилинии и выполнять с ними   различные преобразования. Если при распознавании  поверхности (Фон – полилинии) задается  количество линий через количество пикселей, то здесь количество  сечений по  u  и v. В том случае, если u и v равны нулю, сканирование  будет идти подряд, значит количество сечений равно нулю (надо будет по умолчанию задать сетку хотя бы 10 на 10).
 

 Сложение XY поверхностей

Эта операция возможна для аналитических поверхностей. Еcли сейчас аналитических поверхностей – 172, то за счет этой команды аналитические поверхности можно разнообразить. При складывании старые поверхности  удаляются, поэтому, если складываемые поверхности надо сохранить, их перед этим надо продублировать. Кроме того, не забывайте  задавать начало и конец (правый верхний угол),  задаваемой после сложения поверхности, иначе ничего не будет. Надо будет  по умолчанию задать область, хотя бы 10 на 10.

 
 

Фигуры: треугольник, параллелограмм

На панель «Фигуры» раздела «Поверхности»  вынесены «Треугольник» и «Параллелограмм», которые задаются в том и другом случае тремя точками. Есть возможность менять цвет треугольника как при задании, так и через общую структуру. Во второй версии системы параметр задания линий  по u и v не задействован, он работает при  задании фигуры через МК.


Рис. Панель задания фигуры: "Треугольник"

Новые положения точек можно задать:
- вводя координаты точек,
- или курсором левой кнопки мыши.

Во втором случае курсором мыши надо щелкнуть по надписи  «Т.1» (точка 1). После этого курсор перепрыгнет на поле, на первую точку треугольника, и далее, не отпуская  кнопку, передвигать точку в нужное положение. Аналогично можно поступить с другими  точками. Чтобы изменить высоты  точек, можно задать их координаты цифрами или с помощью мыши: при нажатых Ctrl  и левой кнопки координата z увеличивается; при нажатых Shift  и левой кнопки мыши - координата z уменьшается.   Скорость изменения координаты  по z можно регулировать (надо щелкнуть правой кнопкой мыши по названию той или другой).
 

Художественная линейчатая поверхность

и художественная поверхность вращения

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

Здесь по двум образующим полилиниям  строится линейчатая поверхность. А далее для семейства U-линий задается художественный прием: столько-то шагов вперед, столько-то  назад, подобно художественным полилиниям (см. «Линии»).
Все это можно выполнить и по-другому с помощью других команд: сначала  преобразовать поверхность в  группу полилиний  (см. следующую команду: «Поверхность -> Полилиния»),  а потом группу полилиний  в состоянии «Линии» преобразовать в художественные. На рис. справа показана художественная поверхность вращения.
 

Поверхность -> Полилиния

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

 
Рис. Преобразование сетки поверхности в группу полилиний.

Поверхность -> Паркет

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

Рис. Панель задания паркета той или иной поверхности (на рис. поверхности вращения)


Рис. Паркет на поверхности вращения после некоторых преобразований

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

Текстура…

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

 
Рис. Выбор картины в качестве текстуры на сферу, обозначенную (выделенную) в общей структуре

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

Тень...

Тень строится от поверхностей: линейчатой, квадратичной, вращения и др. на заданную плоскость (треугольник или параллелограмм). Перед тем как построить тень от заданной поврхности на заданную плоскость, нужно задать источник света (см. Вид ->Освещение).

Затем в панели "Тень" указываем: источник тени  - поверхность,  и указываем плоскость (треугольник или параллелограмм), на что падает тень.

 

При преобразовании источник света остается неизменно в одном месте, поэтому при преобразованиях (в том числе и масштабировании) поверхности, тень будет изменяться. Поэтому надо выполнять не преобразования объектов, а преобразования сцены (см. Вид -> Координаты -> Преобразования сцены), так, чтобы источник света не изменялся, в этом случае тень тоже не будет меняться.

Кроме того, пока невозможно (отдельно от поверхности) менять яркостьтени
Цвет тени меняется за счет изменения цвета плоскости, на которую тень падает.
Не редактируется очерк тени (например, увеличить гладкость контура).
 
   

1) "Затенённость" меняется параметром "доля рассеянного света" в  меню Источника освещения. Там же и его положение.
2) При изменении положения "источника тени", "приёмника тени", Источника освещения тень меняется автоматически.
1) Брать не произвольный вектор проектирования на плоскость, а  вектор, начало которого совпадает с источником освещения.
2) Т. к. источник освещения у нас - точечный, то нужна не параллельная проекция а перспективная (центральная?).
3) Надо "бросать" тень на ВСЕ объекты в сцене, а не только на ПЛОСКОСТИ.
4) Тень должна иметь цвет не объекта, который её "бросает", а  объекта, на который она "падает". Только яркость её должна быть меньше.

Свойства источника освещения:
  Объект - Light
  Свойства:
           - MaxLightD = 10        '() - дальняя граница освещения
           - HalfMaxLightD =20   '() - убывание света на половину
           - DispersPart = 0.5     '() - доля рассеянного света (от 0 до 1)
           - P(i) - координаты источника
 
  Примеры:

  Light.DispersPart = 0.5 ' - половина рассеянного света
 
Установить источник в т. с коор-ми (10,20,30) в МСК
  Light.P(0) = 10
  Light.P(1) = 20
  Light.P(2) = 30

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

' МК: построение тени

' Тень

h=5  ' расстояние до источкика овещения по оси z

Set p1 = P(0,0,-10)
Set p2 = P(5,0,-10)
Set p3 = P(0,5,-10)
 

Krug.ss p(0,0,0), 1, p(0,0,1)
n1 = LastNmb
Krug.ss p(0,0,0), 0.1, p(0,0,1)
n2 = LastNmb
LinPov.BaseNmbU0 = n1
LinPov.BaseNmbU1 = n2
LinPov.Nu = "10"
LinPov.Nv = "10"
' LinPov.CutThrowNodes = True
LinPov.SaveInDoc
LinPov.Draw
n5 = LastNmb
Set K1=PerSlinePlane (p1,p2,p3, p(0,0,h), p(1,0,0))
Otrezok.ss p(0,0,h), K1

Set K2=PerSlinePlane (p1,p2,p3, p(0,0,h), p(-1,0,0))
Otrezok.ss p(0,0,h), K2

Set K3=PerSlinePlane (p1,p2,p3,p(0,0,h), p(0,1,0))
Otrezok.ss p(0,0,h), K3

Set K4=PerSlinePlane (p1,p2,p3,p(0,0,h), p(0,-1,0))
Otrezok.ss p(0,0,h), K4

Ngpoint.ss k1
Ngpoint.ss k2
Ngpoint.ss k3
Ngpoint.ss k4

Parall.ss k1, k4, k3
n6 = LastNmb

Light.P(0) = 0
Light.P(1) = 0
Light.P(2) = 5

Light.MaxLightD = 10         '  убывание света на половину
Light.HalfMaxLightD =20      ' дальняя граница освещения
Light.DispersPart = 0.5      ' половина рассеянного

' Trian.ss p1, p2, p3
' 1) номер пов-ти -- источника тени
' 2) номер плос-ти (треуг. илипаралл.), куда падает тень
 n = CreateShadow(n5, n6)