Перспектива как вид и как перспективные преобразования

 

I. Перспектива как вид

Введение

Всякий облик предмета – есть форма некоторого содержания
Изображение – это сравнение, соотношение объекта-модели и его зрительного образа.
Таким образом, образ не копия модели. Тогда что?
Копия – будь она наклонена, искажена перспективно – не меняет своей сущности. Следовательно, с позиций содержания, всякая ориентация ничуть не лучше какой-либо другой. Художник следит за достижением желаемого (упорядоченного) эффекта.
Ромбы на рис.1 упорядочены по отношению направляющих линий, и поэтому они выглядят параллельными.

Рис.1

Центры прямоугольников (рис.2) не выявляют какой-либо ясности, поэтому возникает путаница.

Рис.2
Наклонные плоские куски создают динамизм. Кубисты для создания динамики (экспрессии) композиции использовали груды наклонных плоскостей (прямоугольников, ромбов).
Метод египтян – выбор для предмета или сочетания предметов той или иной проекции (или их сочетаний), которая лучше всего соответствует об объекте в целом. В свое время полученные таким образом рисунки расценивались как низкопробные, детские. Когда же подобный метод в наше время был взят на вооружение некоторыми художниками, заговорили и о художественной ценности египетских и детских рисунков. В чем же суть этого метода? Египтяне и дети стараются избегать ракурсных (перспективных) изображений. Египтяне избегали изображения плеча человека – туловище у них всегда повернуто. Однако оказывает не из-за того, что они не умели рисовать, или были трудности в изображения, я из-за того, что такое изображение говорило больше о человеке, для предания выразительности фигуры.
Пример – изобразить стул, чтобы изображение его было выразительным, передавала его функциональные и геометрические параметры. Рисуя с этих позиций, эти изображения могут быть самыми неожиданными (см. рисунки).

  Рис.3

В одном и том же изображении египтяне принимали различные проекции – симметрию плеч и грудной клетки изображали во фронтальной проекции, а в профильном изображении лица давали фронтальную проекцию глаз и не потому они так рисовали, что у них не было выбора, а потому, что они предпочитали это другим способам изображения.
Худ. эффект зависит не от того как он изображен, а от восприятия в целом. Метод копирования объекта с той или иной точки зрения для египтян был не приемлем, у них был выработан свой стандарт. У современного же зрителя выработан свой и после того как он освобождается от этого мешающего ему предубеждения, будет довольно трудно воспринимать египетские картины как «нереальные».
Конечно, проще пойти по пути фотографического восприятия – перспективы – тем более, здесь все известно.

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

  Рис. 4 

Египтянин про современное изображение сказал бы так: «Картина – запутанная и неверная. Форма пруда искажена, деверья не симметричны, некоторые попадают в воду». Современный же художник у египтянина заметил бы, что у него пруд нарисован с птичьего полета и для нас этот вид не характерен. Для египтян на первом месте стояли такие факторы как симметрия, цельное представление (если это квадрат, то квадрат и должен быть).
Своеобразие перспективного изображения состоит в том, что, изображая предметы неправильно, заставляем их воспринимать правильно. Два подхода – современный и египтян, дающие разные результаты, различны. Египтяне некоторые свойства изображают реально: квадрат - квадратом и т.д. – для них этих свойства ценны, а современный человек изображает с позиций видения, а не свойств объекта, и тем более свойств духовных. Поэтому нельзя утверждать, что искусство, отказывающееся от перспективных законов изображения, многое теряет. А применение же тех и других методов может привести и иным выразительным эффектам.
Задача искусства изображение объекта в простоте, цельности и выразительности. Египтяне, отказываясь от перспективы, находили эти свойства в другом, в частности, в объединении (частичном совпадении или наложении).

Может быть три случая:

a) не связанные между собой,

б) расположенные в разных перспективных плоскостях,
в) как совпадающие.
  Рис. 5
Эффект гармония или дисгармония являются более сильным, когда отдельные тона (фигуры) соединяются в один аккорд, а не проигрываются и какой-то последовательности. Поэтому предпочтение и у более сжатой модели. Единство, достигаемое благодаря частичному совпадению, имеет своеобразную особенность. Оно ослабевает целостность и завершенность части, а то и всех участвующих частей, но зато делает завершенной всю сцену. Достигается здесь не просто «связь», то есть обмен энергией между независимыми объектами, а совместное объединение, взаимопроникновение посредством обоюдного видоизменения. Отказываясь от точности сопоставления, художник совершенствует более утонченное и более яркое понимание человеческого общения. Он показывает напряжение между противоречиями форм. Шкала значений на рис. царя Сетоса и богини Изис идет от переднего плана - к заднему. Здесь как бы нарушены визуальные правила изображения как каждой отдельной части (фигуры), так и всей композиции, но в тоже время цельность является сильной (сравните с композицией «Двух борющихся людей» картины Рубенса).
   Рис. 6 
 
Однако перспективные сокращения ценны сами по себе и активно (умышленно) использоваться при построении композиции, которые могут применяться глобально ко всей картине, или локально с несколькими центрами.
Рис. 7
 

Перспектива, как средство визуализации

Центр перспективы – это с одной стороны ключ к образованию, с другой, - это копирование реальной действительности, что,  как известно, всегда будет выглядеть несовершенным.
Центральная перспектива появилась, когда появилось стекло и особенно, когда появилась гравюра на дереве – работа стала механической, и все бросились резать. Совсем недавно было повальное увлечение линогравюрой – тоже все резали. Сейчас компьютерная графика – все, кто мало-мальски освоил CorelDraw, PaintBrush считают себя художниками. Однако настоящих художественных работ, выполненных с помощью компьютерной графики - мало. В творчестве нужно ставить другие задачи – не изобразительные, а художественные. Система «Арт-Вектор» развивается в этом направлении. Центральная проекция – это формальный подход реализации действительности. Рисовальщик пристально смотрит одним глазом сквозь маленькое отверстие, которое обеспечивает неизменную точку наблюдения и на стекле шаг за шагом прочерчивает все линии контура.
Конечно, дальнейшая проработка картины зависит от мастерства и опыта художника, который в передачи тональности (в гравюре через штрихи), может выдать такой спектр экспрессии, что это не всегда под силу и маститому художнику. Пример: работы Альберта Дюрера. В истории искусства такой способ копирования, был признан не творческим и был предан анафеме (считалось, что новый способ уничтожает свободу творчества, как в восприятии, так и в воображении). На самом-то деле, это не так. Механическое копирование полезно для постановки руки, как на стадии обучения, так и в процессе разработки композиции на принципах центральной перспективы. И как было уже сказано центральная перспектива – это новый ключ для решения композиционных задач. Здесь автоматически появляется ритм (убывание по размерам), центр композиции и многое, еще чего, что символизирует наш мир.

Символизм сфокусированного мира

Центральная перспектива ценна, как средство изображения и выразительности. Да центральная перспектива и искажает представление об объекте по его пропорциям, и постигается намного сложней, однако с опытом это человеком постигается, и перспективные картинки человек воспринимает уже реалистично.
В изобразительном искусстве явно выраженная центральная перспектива создает явный образ мира, имеющего свой центр. В плоскостной картине этот центр тоже есть, но он скрыт, находится как бы в подтексте. И если художник умеет его ввести и донести его существование до зрителя, то это как раз тот момент, когда начинается искусство. Центральная перспектива бьет по зрителю на первом слое восприятия – явном, чем небезуспешно пользуются многие художники,
ранее Ренессанса, позднее С.Дали. 
Пространство сходится в направлении центра. Изометрическое пространоство гомогенно. Оно не дает каких-либо предпочтений тому или иному месторасположению. Фокусирующая перспектива устанавливает основание, из которого излучается вся активность рисунка и на которое указывает все окружающее.
У Леонардо да Винчи в Тайной вечери» центр рамы, сюжета совпадает с центром всего пространства. Линии потолка и стен сходятся в направлении Христа. В результате достигается полная гармония, симметрия, стабильность, устойчивость и минимум глубины.
Сравним это с изображением на рис. 8 ниже. Здесь происходит сталкивание двух моделей: первой - это плоской передней рамы, второй – фокусирующих квадратов и линий к центру, не совпадающим с центром рамы. Здесь наблюдается высокая напряженность.
 
Рис. 8
Прямоугольная рама устанавливает центр, который игнорируется пространственной системой, а радиальная симметрия
отвергается рамой. И все же разрешение разрешения конфликта достигнуто. Сильное сжатие, с одной стороны,
уравновешивается большой большой площадью свободного, «дышащего» пространства – с другой. В отличии от мира, где закон целого гармонично детерминирует все, вплоть до мельчайших деталей, здесь мы имеем образ другого мира, в котором жизненный центр со своими потребностями, требованиями, ценностями бросает вызов закону целого, и наоборот. Тема такой композиции есть поиск более сложного закона, который позволяет нескольким противоположным способам существования развиваться независимо друг от друга. Цена такого единства и гармонии возросла. В образ реальной действительности был введен драматический конфликт, что не удовлетворял богословов, увидевших в таком подходе подкоп под устои церкви, проповедающей гармонию и симметрию мира (Земля в центре вселенной). Будоражащий диссонанс, который мы обычно считаем основной темой в произведения современного искусства, прозвучал впервые именно здесь.
Художник Тинторетто в свое варианте «Тайной вечери» спустя 60 лет после Л. да Винчи пошел своим путем. Фокусная
точка комнаты, установленная линиями стола, пола, потолка, находится в правом верхнем углу. Центральная же фигура Христа находится в центре листа. Здесь закон вселенной (уходящий в бесконечность) потерял свою ценность. Он существует на равных с образом Христа.
Таким образом, можно сказать, что центральная перспектива способствует более богатой композиции. Двумерное
представление о пространстве, характерное для Древнего Египта, в сущности говоря, ограничивает основные оси
горизонтальным и вертикальным направлением. Перспектива же добавляет наклонные линии, что в совокупности с
нагромождением фигур и предметов запутывает композиции, однако подчеркивание линиями центральной перспективы производит мощный динамический эффект. Сжатие воспринимается не только как свершившийся факт, но как постепенное развитие.
На рис. 8 в начале уменьшение размеров протекает с небольшой скоростью, далее же, по мере того как глаз движется в сторону центра, линии, расположены по соседству, приближаются друг к другу все быстрее и быстрее до тех пор, пока не достигается почти невыносимая степень сжатия. Это эффект взволнованности любили художники Ренессанса. На офортах Пиранези фасады зданий, вдоль длинных улиц, засасывались пространственным фокусом с захватывающим дух крещендо. Любил сильные сокращения Ван Гог. Поль Сезан избегал их, и даже заменял их вертикальными и горизонтальными
линиями.

Передача бесконечности

Изометрическая перспектива углы равны и уходящие линии параллельны - один способов показать бесконечность. В этом случае возникает ощущение, что объект прорывается за границы рамки, которая проходит как бы сквозь них. Чем не идея выставить картину, выходящую за раму!! У китайских художников бесконечность находится внутри картины, как конечная цель зрительной линии, которая для глаза остается недосягаемой. Фокус у них образовывался не в одной точку, а на линии, правда, какой?
Художники средневековья маскировали центр (церковь делать активным центр бесконечности не позволяла) - вставляли гору, фигуру на месте центра, или располагали центр за границей картины.
Однако этот центр есть и он активен. В современном понимании он как веревка вьющееся во ременное пространство, в которое происходит необратимое засасывание событий, происходит новое понимание перспективы и событийного процесса.

 

Перспектива на фотографии

Фокусирование зависит главным образом от трех факторов: угла схождения, степени видимости искаженного объекта и расстояния зрителя до картины. Опыт фотографии дал много нового. Угол схождения зависит от расстояния, на котором находится фотоаппарат от снимаемого объекта. Чем ближе находится объект, тем большей будет разница в размерах.
Отсюда громадные ступни наг и ладони рук на снимках, сделанных с близкого расстояния, и круто поднимающиеся контуры зданий.
Железнодорожные пути будут более впечатляющими, когда они показаны целиком на протяжении всего зрительного поля. В фотоаппарате глубина восприятия зависит от фокусного расстояния – чем оно короче, тем дальше видим – достигаем максимум перспективы. Широкоугольные объективы создают эффект, что стены круто сходятся, объекты, находящиеся рядом с объективом, намного больше чуть удаленных, человек, сделавший шаг к объективу моментально возрастает до исполина.

Конвергенция (сокращение) зависит и от угла, по которым снимается объект. Фигура человека, под острым углом снизу  превращается в монумент. Таким образом, перспективные искажения могут быть разными, что служит в художественных целях полезным и закономерным инструментом.


Алгоритмы построения перспективных изображений

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

Рис. 10 


Построение перспективы помещения

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

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

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

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

На рис. 11 дано построение фронтальной перспективы интерьера (ширина 5 м, высота 4 м и глубина 5 м) с помощью перспективного масштаба.

  Рис.11

1. Передняя совмещена с картинной плоскостью.
2. Основание картины делят на пять равных частей, тогда одно деление на картине будет масштабом одного метра.
3. Высота линии горизонта 1,6 м. Точка Р будет в центре, так как перспектива фронтальная.
Точки дальности находятся на расстоянии: PD1 = PD2 = 2,5 м.
4. Из точек 0 и 5, взятых на масштабе широты, проводят прямые в точку Р. Расстояние между этими линиями, даст перспективу широты интерьера.
5. Для построения боковых стенок на одной из вертикальных границ картины складывают четыре единицы, равные четырем отрезкам на масштабе широт, и точку 4 соединяют с точкой Р.
Расстояние между линиями 0Р и 4Р будет перспективой высоты интерьера. Аналогично строят и правую сторону.
6. Для построения глубины интерьера на масштабе широт берут пять единиц, соответствующие пяти метрам глубины интерьера, и из точки 5 проводят линию в дистанционную точку D1. Пересечение этой линии с линией 0Р даст глубину интерьера 0-5' - 5 м в перспективе. Из точки 5' проводят горизонтальную и вертикальную линии противоположной стены до пересечения с соответствующими линиями масштаба широт и высот.
7. Пользуясь перспективным масштабом, приступают к построению дверного проема правой стены (ширина двери равна 1 м, высота 2,5 м и удалена от картины на 1 м). Для этого из точки D2 проводят линии в точки 3, 4, взятые на масштабе широт и отмечают точки пересечения 3 и 4 на линии 5Р.
Определяют перспективу высоты дверей. Для этого на масштабе высот из точек 2 и 5 проводят в точку Р линии, которые отсекут на вертикалях, проведенных из точке 3 и 4, перспективу отрезков, равных высоте дверей.
Для показа в дверном проеме толщины стенки (равной 0,5 м) на линии основания картины, как масштабе широт, строят отметку 5,5 и через нее проводят линию 5,5Р.
Полоса 5Р ? 5, 5Р является перспективой широты стенки. Дальнейшее построение видимых линий видно из рис. 1.
8. На левой стене строят оконный проем, расположенный на расстоянии 0,5 м от картины и 0,8 м - от пола (ширина окна равна 1,5 м, а высота верхнего края от пола 2,5 м).
Построение окна выполнено аналогично построению дверного проема.

Содержание задания
Построить перспективу помещения и объектов в нем  по размерам в заданном варианте (табл. 1).

1. Габариты помещения: а (ширина) ? м; б (высота) ? м; в (глубина) ? м.
2. Оконный проем расположен на левой стене, на расстоянии: а (от задней стен-ки) ? м; б (от пола) ? м.
3. Размеры окна: а (ширина) ? м; б (высота) ? м; в (глубина, толщина стены) ? м.
4. Дверь расположена в задней стене на расстоянии ? м от левой стены.
5. Размеры двери: а (ширина) ? м; б (высота) ? м.
6. В левом углу стоит шкаф, имеющий следующие размеры: а (ширина) ? м; б (высота) ? м; в (глубина) ? м.
7. У правой стены на расстоянии ? м от задней стены стоит письменный стол, имеющий следующие размеры: а (длина) ? м; б (ширина) ? м; в (высота) ? м.
8. На правой стене висит лабораторный стенд на расстоянии: а (от задней стены) ?м; б (от пола) ? м.
9. Размеры стенда: а (длина) ? м; б (высота) ? м; в (толщина) ? м.
10. У стола стоит табурет на расстоянии ? м от стола.
11. К потолку подвешены два ряда светильников, расстояние от которых до правой стены в два раза меньше, чем между ними. Количество светильников в ряду равно ?, расположение цепное.

   Рис. 12

Указания к выполнению задания
Задание выполняется карандашом на чертежной бумаге формата А3 (420 х 297).
Вспомогательные построения должны быть выполнены тонкими линиями, а контуры помещения и оборудования обведены (рис. 12).
Довольно легко можно выполнить перспективный рисунок в CorelDraw, развесив свои картины по стенам. Разрешается одно из трех домашних заданий   выпорлнить на компьютере с обязательной распечаткой на бумаге (формат А3).

 


 

  II. Перспектива как перспективные преобразования

В системе "Арт-вектор" реализованны возможности задания вида перспективы, причем может быгут быть заданы: фронтальная, горизонтальная, профильная, аксонометрическая перспективы. Ограничения: только с одной точкой схода, которая находится всегда в центре окна изображения. Глубину можно изменять: изображение накатывать на себя (zoom - наплыв) или откатывать (скорость наката/отката: задается - щелкнуть правой кнокой мыши. Чтобы задать откат, надо щелкнуть по началу СК (см. рис. 1) и, одновременно нажать на Shift и правую кнопку мышию Чтобы задать нака (рис. 2), надо одновременно нажать на Сtrl и правую кнопку мыши.
      
                Рис. 1                                                                           Рис.2
 

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

 
Упражнения 1. Алгоритм построение перспективных преобразований с одной точкой схода
(на примере с комнатой)

' Построение прямоугольника к точке Pz
Set Pz= p(0,0,12) ' Точка схода на z  (P.z > c)
' Если перспектива стрится обратная,
' то P.z - величина отрицательная (P.z < -c)

Text.ss Pz, "Pz"
Ngpoint.ss Pz
' Полуразмеры комнаты
a=6   '  по х
b=4 '  по y
c=8 '  по z
' Введем координаты точек в массивы так, чтобы куб соединить одной полилинией
Dim x ' на всякий случай
x = Array(-a,a,a,-a,-a,  -a,a,a,-a,-a,  a,a,a,a,-a,-a) ' 16 точек
Dim y
y = Array(-b,-b,b,b,-b,  -b,-b,b,b,-b, -b,-b,b,b,b,b)
Dim z
z = Array(0,0,0,0,0,  c,c,c,c,c,  c,0,0,c,c,0)   ' 16 точек

' Выполним преобразования всех точек
For n=0 To 15 Step 1
' Set T = p(0,0,z(n))
' Set T = PointOtrZ(p(x(n),0,0), Pz, T)
' x(n)=T.x
' Set M = p(0,0,z(n))
' Set M = PointOtrZ(p(0,y(n),0), Pz, M)
' второй алгоритм: пересечение луча с плоскость в которой ледит текущая точка
Set T = PerSlinePlane (p(0,0,z(n)), p(10,0,z(n)),p(0,10,z(n)), p(x(n),y(n),0), pz)
 x(n)=T.x
 y(n)=T.y
Otrezok.ss p(x(n),y(n),z(n)),Pz
next

Trian.ss p(0,0,c), p(10,0,c),p(0,10,c)

n1 = LastNmb ' n1 - c какого элемента помещать в группу
'  Строим
Polyline.Reset
 For n=0 To 15 Step 1
 Polyline.AddP p(x(n),y(n),z(n))
 Next
' Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n2 = LastNmb+1 ' по какой
MoveToGroup n1, n2, "group" ' group - имя группы - любое

Пример МК построение прямоугольник к точке Pz с закраской пола и стен здесь


Упражнения 2. Алгоритм для  точки построения перспективы к двум точкам схода

' Построение точки Т точкам Px и Py,
' Точка схода
Set Py= p(0,10,0) ' Точка схода на y
Set Px= p(15,0,0) ' Точка схода на x
Text.ss Py, "Py"
Text.ss Px, "Px"
Ngpoint.ss Px
Ngpoint.ss Py
' Задана точка T
Set T = p(5,5,5)
Ngpoint.ss T
Text.ss T, "T"
Ngpoint.ss p(0,0,T.z)
Text.ss p(0,0,T.z), "Tz"
Ngpoint.ss p(T.x,0,0)
Text.ss p(T.x,0,0), "Tx"
Ngpoint.ss p(0,T.y,0)
Text.ss p(0,T.y,0), "Ty"
' Выполним преобразования всех точек
x=T.x
y=T.y
z=T.z
Otrezok.ss p(0,y,0), Px
Otrezok.ss p(x,0,0), Py
Otrezok.ss p(0,0,z), Px
Otrezok.ss p(0,y,0), p(0,y,10)
Otrezok.ss p(0,0,z), Py

 Set Kxy = PerOtrxy (p(0,y,0), Px, p(x,0,0), Py)
 Set Kyz = PerOtryz (p(0,0,z), Py, p(0,y,0), p(0,y,10))
 Set Kxz = PerOtrxz (p(0,0,z), Px, p(x,0,0), p(x,0,10))
 Set K = PerOtr3D (py, Kxz,  px, Kyz)
' второй вариант может быть, как пересечение прямой с плоскостью
' Set K = PerSlinePlane (Py, p(T.x,0,0),p(T.x,0,10), Kyz, Px)

Trian.ss Py, p(T.x,0,0),p(T.x,0,10) ' плоскость
Otrezok.ss Kxz, py
Otrezok.ss Kyz, px
Text.ss K, "K"
Ngpoint.ss K
Text.ss Kxy, "Kxy"
Ngpoint.ss Kxy

Text.ss Kxz, "Kxz"
Ngpoint.ss Kxz

Text.ss Kyz, "Kyz"
Ngpoint.ss Kyz

' Оси
Set O = p(0,0,0)
Otrezok.ss O, p(10,0,0)
Otrezok.ss O, p(0,10,0)
Otrezok.ss O, p(0,0,10)
Ngpoint.ss T
Text.ss T, "T"

' Trian.ss pz, p(x,0,0), py
Пример здесь



Пример 1.  Построение пульта в перспективном направлении К точкам Px и Py

'  Примечание: пульт относительно по y от нуля  надо сдвигать (можно на 0.1)
Set Py= p(0,20,0) ' Точка схода на y
Set Px= p(20,0,0) ' Точка схода на x
Text.ss Py, "Py"
Text.ss Px, "Px"
Ngpoint.ss Px
Ngpoint.ss Py
c=8  '  глубина пульта
' Введем координаты точек пульта через array
Dim x ' на всякий случай
x = Array(5,5,4.3,4,1.4,1.4,4.5,6,9,9, 5,      5,5,4.3,4,1.4,1.4,4.5,6,9,9,5)
Dim z
z = Array(0,1,1,5.2,5.7,6.3,6.3,11,11,0, 0,   0,1,1,5.2,5.7,6.3,6.3,11,11,0,0)
Dim y
y = Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,    c,c,c,c,c,c,c,c,c,c,c)

n1 = LastNmb ' n1 - c какого элемента помещать в группу
 For n=0 To 21 Step 1

 Set Kxy = PerOtrxy (p(0,y(n),0), Px, p(x(n),0,0), Py)
 Set Kyz = PerOtryz (p(0,0,z(n)), Py, p(0,y(n),0), p(0,y(n),10))
 Set Kxz = PerOtrxz (p(0,0,z(n)), Px, p(x(n),0,0), p(x(n),0,10))
      Set K = PerSlinePlane (Py, p(x(n),0,0),p(x(n),0,10), Kyz, Px)
     'Set K = PerOtr3D (py, Kxz,  px, Kyz)
 x(n)=K.x
 y(n)=K.y
 z(n)=K.z
next
'  Строим пульт
Polyline.Reset
 For n=0 To 21 Step 1
 Polyline.AddP p(x(n),y(n),z(n))
 Next
' Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
Otrezok.ss p(x(1),y(1),z(1)),p(x(12),y(12),z(12))
Otrezok.ss p(x(2),y(2),z(2)),p(x(13),y(13),z(13))
Otrezok.ss p(x(3),y(3),z(3)),p(x(14),y(14),z(14))
Otrezok.ss p(x(4),y(4),z(4)),p(x(15),y(15),z(15))
Otrezok.ss p(x(5),y(5),z(5)),p(x(16),y(16),z(16))
Otrezok.ss p(x(6),y(6),z(6)),p(x(17),y(17),z(17))
Otrezok.ss p(x(7),y(7),z(7)),p(x(18),y(18),z(18))
Otrezok.ss p(x(8),y(8),z(8)),p(x(19),y(19),z(19))
Otrezok.ss p(x(9),y(9),z(9)),p(x(20),y(20),z(20))
n2 = LastNmb+1 ' по какой
MoveToGroup n1, n2, "group" ' tst group - имя группы - любое
  



Упражнения 3. Алгоритм построение перспективных преобразований к трем точкам схода

' На примере с точкой T
Set Py= p(0,10,0) ' Точка схода на y
Set Px= p(15,0,0) ' Точка схода на x
Set Pz= p(0,0,20) ' Точка схода на z
Text.ss Py, "Py"
Text.ss Px, "Px"
Text.ss Pz, "Pz"
Ngpoint.ss Px
Ngpoint.ss Py
Ngpoint.ss Pz
Set T = p(5,5,5)
Ngpoint.ss T
Text.ss T, "T"
Set Tn = p(0,0,0)
Otrezok.ss Tn,Px
Otrezok.ss Tn,Py
Otrezok.ss Tn,Pz

x=T.x
y=T.y
z=T.z

Otrezok.ss p(0,y,0), Px
Otrezok.ss p(x,0,0), Py

Otrezok.ss p(x,0,0), Pz
Otrezok.ss p(0,0,z), Px

Otrezok.ss p(0,y,0), Pz
Otrezok.ss p(0,0,z), Py

' Непосредственно алгоритм решения задачи

 Set Kxy = PerOtrxy (p(0,y,0), Px, p(x,0,0), Py)
 Set Kxz = PerOtrxz (p(x,0,0), Pz, p(0,0,z), Px)
 Set Kyz = PerOtryz (p(0,y,0), Pz, p(0,0,z), Py)
 Set K = PerOtr3D (Kxz, py,  Kxy, pz)
' можно решить и вторым вариантом
Set K = PerSlinePlane (Px,Kxz,py, Kxy, Pz)

Otrezok.ss Kxz, py
Otrezok.ss Kxy, pz
Otrezok.ss Kyz, px
 

Text.ss K, "K"
Ngpoint.ss K

Text.ss Kxy, "Kxy"
Ngpoint.ss Kxy

Text.ss Kxz, "Kxz"
Ngpoint.ss Kxz

Text.ss Kyz, "Kyz"
Ngpoint.ss Kyz
 
Пример с кубом здесь



Пример 1. Построение комнаты в перспективном преобразовании к точке Pz с закраской пола и стен

' Построение комнаты к точке Pz
Set Pz= p(0,0,12) ' Точка схода на z  (P.z > c)
Text.ss Pz, "Pz"
Ngpoint.ss Pz
' Полуразмеры комнаты
a=6   '  по х
b=4 '  по y
c=8 '  по z
' Введем координаты точек в массивы так, чтобы куб соединить одной полилинией
Dim x ' на всякий случай
x = Array(-a,a,a,-a,-a,  -a,a,a,-a,-a,  a,a,a,a,-a,-a) ' 16 точек
Dim y
y = Array(-b,-b,b,b,-b,  -b,-b,b,b,-b, -b,-b,b,b,b,b)
Dim z
z = Array(0,0,0,0,0,  c,c,c,c,c,  c,0,0,c,c,0)   ' 16 точек

' Выполним преобразования всех точек
For n=0 To 15 Step 1
 Set T = p(0,0,z(n))
 Set T = PointOtrZ(p(x(n),0,0), Pz, T)
 x(n)=T.x

 Set M = p(0,0,z(n))
 Set M = PointOtrZ(p(0,y(n),0), Pz, M)
 y(n)=M.y
Otrezok.ss p(x(n),y(n),z(n)),Pz
next
 

n1 = LastNmb ' n1 - c какого элемента помещать в группу
'  Строим
Polyline.Reset
 For n=0 To 15 Step 1
 Polyline.AddP p(x(n),y(n),z(n))
 Next
' Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n2 = LastNmb+1 ' по какой
MoveToGroup n1, n2, "group" ' group - имя группы - любое

' Зададим и закрасим пол
CreateGroup
ngroup2 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(0),y(0),z(0))
      Polyline.AddP p(x(1),y(1),z(1))
      Polyline.AddP p(x(6),y(6),z(6))
      Polyline.AddP p(x(5),y(5),z(5))
 Polyline.AddP p(x(0),y(0),z(0))
Polyline.SetFillColor 0, 0, 250
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим потолок
CreateGroup
ngroup2 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(2),y(2),z(2))
      Polyline.AddP p(x(3),y(3),z(3))
      Polyline.AddP p(x(8),y(8),z(8))
      Polyline.AddP p(x(7),y(7),z(7))
 Polyline.AddP p(x(2),y(2),z(2))
Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим стены
CreateGroup
ngroup3 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(0),y(0),z(0))
      Polyline.AddP p(x(5),y(5),z(5))
      Polyline.AddP p(x(8),y(8),z(8))
      Polyline.AddP p(x(3),y(3),z(3))
 Polyline.AddP p(x(0),y(0),z(0))
Polyline.SetFillColor 0, 250, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим стены
CreateGroup
ngroup4 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(1),y(1),z(1))
      Polyline.AddP p(x(2),y(2),z(2))
      Polyline.AddP p(x(7),y(7),z(7))
      Polyline.AddP p(x(6),y(6),z(6))
 Polyline.AddP p(x(1),y(1),z(1))
Polyline.SetFillColor 0, 250, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим заднюю стенку
CreateGroup
ngroup5 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(5),y(5),z(5))
      Polyline.AddP p(x(6),y(6),z(6))
      Polyline.AddP p(x(7),y(7),z(7))
      Polyline.AddP p(x(8),y(8),z(8))
 Polyline.AddP p(x(5),y(5),z(5))
Polyline.SetFillColor 0, 250, 250
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Поместим окружность на пол
' 42
R=4
Set O = p( 0, -4, 4)   ' положение центра
' Krug.ss O, R, p(0,1,0)
n11 = LastNmb ' n1 - c какого элемента помещать в группу
Polyline.Reset
For i = 0 To 6.29 step 0.05
  x=O.x+R*cos(i)
  z=O.z+R*sin(i)
 Set T = p(0,0,z)
 Set T = PointOtrZ(p(x,0,0), Pz, T)
 x=T.x

 Set M = p(0,0,z)
 Set M = PointOtrZ(p(0,O.y,0), Pz, M)
 y=M.y
Set K = p(x, y, z)
Polyline.AddP(K)
Next
Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group2" ' group2 - имя группы - любое

R=3
Set O = p( 0, -4, 4)   ' положение центра
' Krug.ss O, R, p(0,1,0)
Polyline.Reset
n11 = LastNmb ' n1 - c какого элемента помещать в группу
For i = 0 To 6.29 step 0.05
  x=O.x+R*cos(i)
  z=O.z+R*sin(i)
 Set T = p(0,0,z)
 Set T = PointOtrZ(p(x,0,0), Pz, T)
 x=T.x

 Set M = p(0,0,z)
 Set M = PointOtrZ(p(0,O.y,0), Pz, M)
 y=M.y
Set K = p(x, y, z)
Polyline.AddP(K)
Next
Polyline.SetFillColor 0, 250, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group3" ' group2 - имя группы - любое

R=2
Set O = p( 0, -4, 4)   ' положение центра
' Krug.ss O, R, p(0,1,0)
Polyline.Reset
n11 = LastNmb ' n1 - c какого элемента помещать в группу
For i = 0 To 6.29 step 0.05
  x=O.x+R*cos(i)
  z=O.z+R*sin(i)
 Set T = p(0,0,z)
 Set T = PointOtrZ(p(x,0,0), Pz, T)
 x=T.x

 Set M = p(0,0,z)
 Set M = PointOtrZ(p(0,O.y,0), Pz, M)
 y=M.y
Set K = p(x, y, z)
Polyline.AddP(K)
Next
Polyline.SetFillColor 0, 0, 250
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group4" ' group2 - имя группы - любое

R=1
Set O = p( 0, -4, 4)   ' положение центра
' Krug.ss O, R, p(0,1,0)
Polyline.Reset
n11 = LastNmb ' n1 - c какого элемента помещать в группу
For i = 0 To 6.29 step 0.05
  x=O.x+R*cos(i)
  z=O.z+R*sin(i)
 Set T = p(0,0,z)
 Set T = PointOtrZ(p(x,0,0), Pz, T)
 x=T.x

 Set M = p(0,0,z)
 Set M = PointOtrZ(p(0,O.y,0), Pz, M)
 y=M.y
Set K = p(x, y, z)
Polyline.AddP(K)
Next
Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group5" ' group2 - имя группы - любое



Пример 2 Построение прямоугольника к 2-м точкам схода


' Построение пульта в перспективном направлении К точкам Px и Py,
' Пусть вначале будет только горизонтальная проекция пульта
' Примечание точки в плоскости xz - не задавать
Set Py= p(0,15,0) ' Точка схода на y
Set Px= p(15,0,0) ' Точка схода на x
Text.ss Py, "Py"
Text.ss Px, "Px"
Ngpoint.ss Px
Ngpoint.ss Py
 
' Полуразмеры комнаты
a=6   '  по х
b=4 '  по y
c=8 '  по z
' Введем координаты точек в массивы так, чтобы куб соединить одной полилинией
Dim x ' на всякий случай
x = Array(-a,a,a,-a,-a,  -a,a,a,-a,-a,  a,a,a,a,-a,-a) ' 16 точек
Dim y
y = Array(-b,-b,b,b,-b,  -b,-b,b,b,-b, -b,-b,b,b,b,b)
Dim z
z = Array(-1,-1,-1,-1,-1,  c,c,c,c,c,  c,-1,-1,c,c,-1)   ' 16 точек

' Выполним преобразования всех точек
For n=0 To 15 Step 1

Set Kxy = PerOtrxy (p(0,y(n),0), Px, p(x(n),0,0), Py)
Set Kyz = PerOtryz (p(0,0,z(n)), Py, p(0,y(n),0), p(0,y(n),10))
Set Kxz = PerOtrxz (p(0,0,z(n)), Px, p(x(n),0,0), p(x(n),0,10))

' Set K = PerSlinePlane (Py, p(T.x,0,0),p(T.x,0,10), Kyz, Px)

Set K = PerOtr3D (py, Kxz,  px, Kyz)
 x(n)=K.x
 y(n)=K.y
 z(n)=K.z
Otrezok.ss p(x(n),y(n),z(n)),p(px.x,px.y,px.z)
Otrezok.ss p(x(n),y(n),z(n)),p(py.x,py.y,py.z)
next

n1 = LastNmb ' n1 - c какого элемента помещать в группу
'  Строим
Polyline.Reset
 For n=0 To 15 Step 1
 Polyline.AddP p(x(n),y(n),z(n))
 Next
' Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n2 = LastNmb+1 ' по какой
MoveToGroup n1, n2, "group" ' group - имя группы - любое

' Зададим и закрасим пол
CreateGroup
ngroup2 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(0),y(0),z(0))
      Polyline.AddP p(x(1),y(1),z(1))
      Polyline.AddP p(x(6),y(6),z(6))
      Polyline.AddP p(x(5),y(5),z(5))
 Polyline.AddP p(x(0),y(0),z(0))
Polyline.SetFillColor 0, 0, 250
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим потолок
CreateGroup
ngroup2 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(2),y(2),z(2))
      Polyline.AddP p(x(3),y(3),z(3))
      Polyline.AddP p(x(8),y(8),z(8))
      Polyline.AddP p(x(7),y(7),z(7))
 Polyline.AddP p(x(2),y(2),z(2))
Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим стены
CreateGroup
ngroup3 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(0),y(0),z(0))
      Polyline.AddP p(x(5),y(5),z(5))
      Polyline.AddP p(x(8),y(8),z(8))
      Polyline.AddP p(x(3),y(3),z(3))
 Polyline.AddP p(x(0),y(0),z(0))
Polyline.SetFillColor 0, 250, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим стены
CreateGroup
ngroup4 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(1),y(1),z(1))
      Polyline.AddP p(x(2),y(2),z(2))
      Polyline.AddP p(x(7),y(7),z(7))
      Polyline.AddP p(x(6),y(6),z(6))
 Polyline.AddP p(x(1),y(1),z(1))
Polyline.SetFillColor 0, 250, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим заднюю стенку
CreateGroup
ngroup5 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(5),y(5),z(5))
      Polyline.AddP p(x(6),y(6),z(6))
      Polyline.AddP p(x(7),y(7),z(7))
      Polyline.AddP p(x(8),y(8),z(8))
 Polyline.AddP p(x(5),y(5),z(5))
Polyline.SetFillColor 0, 250, 250
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Поместим окружность на пол
' 42
R=4
Set O = p( 0, -4, 3.5)   ' положение центра
n11 = LastNmb ' n1 - c какого элемента помещать в группу
Polyline.Reset
For i = 0 To 6.29 step 0.05
  x=O.x+R*cos(i)
  z=O.z+R*sin(i)
  y=O.y
Set Kxy = PerOtrxy (p(0,y,0), Px, p(x,0,0), Py)
Set Kyz = PerOtryz (p(0,0,z), Py, p(0,y,0), p(0,y,10))
Set Kxz = PerOtrxz (p(0,0,z), Px, p(x,0,0), p(x,0,10))
Set K = PerOtr3D (py, Kxz,  px, Kyz)
Polyline.AddP(K)
Next
Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group2" ' group2 - имя группы - любое

R=3
Polyline.Reset
n11 = LastNmb ' n1 - c какого элемента помещать в группу
For i = 0 To 6.29 step 0.05
  x=O.x+R*cos(i)
  z=O.z+R*sin(i)
  y=O.y
Set Kxy = PerOtrxy (p(0,y,0), Px, p(x,0,0), Py)
Set Kyz = PerOtryz (p(0,0,z), Py, p(0,y,0), p(0,y,10))
Set Kxz = PerOtrxz (p(0,0,z), Px, p(x,0,0), p(x,0,10))
Set K = PerOtr3D (py, Kxz,  px, Kyz)
Polyline.AddP(K)
Next
Polyline.SetFillColor 0, 250, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group3" ' group2 - имя группы - любое

R=2
Polyline.Reset
n11 = LastNmb ' n1 - c какого элемента помещать в группу
For i = 0 To 6.29 step 0.05
  x=O.x+R*cos(i)
  z=O.z+R*sin(i)
  y=O.y
Set Kxy = PerOtrxy (p(0,y,0), Px, p(x,0,0), Py)
Set Kyz = PerOtryz (p(0,0,z), Py, p(0,y,0), p(0,y,10))
Set Kxz = PerOtrxz (p(0,0,z), Px, p(x,0,0), p(x,0,10))
Set K = PerOtr3D (py, Kxz,  px, Kyz)
Polyline.AddP(K)
Next
Polyline.SetFillColor 0, 0, 250
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group4" ' group2 - имя группы - любое

R=1
Polyline.Reset
n11 = LastNmb ' n1 - c какого элемента помещать в группу
For i = 0 To 6.29 step 0.05
  x=O.x+R*cos(i)
  z=O.z+R*sin(i)
  y=O.y
Set Kxy = PerOtrxy (p(0,y,0), Px, p(x,0,0), Py)
Set Kyz = PerOtryz (p(0,0,z), Py, p(0,y,0), p(0,y,10))
Set Kxz = PerOtrxz (p(0,0,z), Px, p(x,0,0), p(x,0,10))
Set K = PerOtr3D (py, Kxz,  px, Kyz)
Polyline.AddP(K)
Next
Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group5" ' group2 - имя группы - любое



Пример 3 Построение прямоугольника к 3-м точкам схода

Set Py= p(0,15,0) ' Точка схода на y
Set Px= p(15,0,0) ' Точка схода на x
Set Pz= p(0,0,15) ' Точка схода на z
Text.ss Py, "Py"
Text.ss Px, "Px"
Text.ss Pz, "Pz"
Ngpoint.ss Px
Ngpoint.ss Py
Ngpoint.ss Pz

' Полуразмеры комнаты
a=4   '  по х
b=4 '  по y
c=9 '  по z

' Введем координаты точек в массивы так, чтобы куб соединить одной полилинией
Dim x ' на всякий случай
x = Array(-a,a,a,-a,-a,  -a,a,a,-a,-a,  a,a,a,a,-a,-a) ' 16 точек
Dim y
y = Array(-b,-b,b,b,-b,  -b,-b,b,b,-b, -b,-b,b,b,b,b)
Dim z
z = Array(-0.1,-0.1,-0.1,-0.1,-0.1,  c,c,c,c,c,  c,-0.1,-0.1,c,c,-0.1)   ' 16 точек

' Выполним преобразования всех точек
For n=0 To 15 Step 1
 Set Kxy = PerOtrxy (p(0,y(n),0), Px, p(x(n),0,0), Py)
 Set Kxz = PerOtrxz (p(x(n),0,0), Pz, p(0,0,z(n)), Px)
 Set Kyz = PerOtryz (p(0,y(n),0), Pz, p(0,0,z(n)), Py)
 Set K = PerOtr3D (Kxz, py,  Kxy, pz)
 x(n)=K.x
 y(n)=K.y
 z(n)=K.z
' Otrezok.ss p(x(n),y(n),z(n)),Px
' Otrezok.ss p(x(n),y(n),z(n)),Py
' Otrezok.ss p(x(n),y(n),z(n)),Pz
next

n1 = LastNmb ' n1 - c какого элемента помещать в группу
'  Строим
Polyline.Reset
 For n=0 To 15 Step 1
 Polyline.AddP p(x(n),y(n),z(n))
 Next
' Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n2 = LastNmb+1 ' по какой
MoveToGroup n1, n2, "group" ' group - имя группы - любое
 
 
 

' Зададим и закрасим пол
CreateGroup
ngroup2 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(0),y(0),z(0))
      Polyline.AddP p(x(1),y(1),z(1))
      Polyline.AddP p(x(6),y(6),z(6))
      Polyline.AddP p(x(5),y(5),z(5))
 Polyline.AddP p(x(0),y(0),z(0))
Polyline.SetFillColor 0, 0, 250
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим потолок
CreateGroup
ngroup2 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(2),y(2),z(2))
      Polyline.AddP p(x(3),y(3),z(3))
      Polyline.AddP p(x(8),y(8),z(8))
      Polyline.AddP p(x(7),y(7),z(7))
 Polyline.AddP p(x(2),y(2),z(2))
Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим стены
CreateGroup
ngroup3 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(0),y(0),z(0))
      Polyline.AddP p(x(5),y(5),z(5))
      Polyline.AddP p(x(8),y(8),z(8))
      Polyline.AddP p(x(3),y(3),z(3))
 Polyline.AddP p(x(0),y(0),z(0))
Polyline.SetFillColor 0, 250, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим стены
CreateGroup
ngroup4 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(1),y(1),z(1))
      Polyline.AddP p(x(2),y(2),z(2))
      Polyline.AddP p(x(7),y(7),z(7))
      Polyline.AddP p(x(6),y(6),z(6))
 Polyline.AddP p(x(1),y(1),z(1))
Polyline.SetFillColor 0, 250, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Зададим и закрасим заднюю стенку
CreateGroup
ngroup5 = GetLastNmb  ' задание полилинии в группе
Polyline.Reset
 Polyline.AddP p(x(5),y(5),z(5))
      Polyline.AddP p(x(6),y(6),z(6))
      Polyline.AddP p(x(7),y(7),z(7))
      Polyline.AddP p(x(8),y(8),z(8))
 Polyline.AddP p(x(5),y(5),z(5))
Polyline.SetFillColor 0, 250, 250
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
 

' Поместим окружность на пол
' 42
R=4
Set O = p( 0, -4, 4)   ' положение центра
' Krug.ss O, R, p(0,1,0)
n11 = LastNmb ' n1 - c какого элемента помещать в группу
Polyline.Reset
For i = 0 To 6.29 step 0.05
  x1=O.x+R*cos(i)
  z1=O.z+R*sin(i)
  y1=-4
 Set Kxy = PerOtrxy (p(0,y1,0), Px, p(x1,0,0), Py)
 Set Kxz = PerOtrxz (p(x1,0,0), Pz, p(0,0,z1), Px)
 Set Kyz = PerOtryz (p(0,y1,0), Pz, p(0,0,z1), Py)
 Set K = PerOtr3D (Kxz, py,  Kxy, pz)
 x1=K.x
 y1=K.y
 z1=K.z
Set K = p(x1, y1, z1)
Polyline.AddP(K)
Next
Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group2" ' group2 - имя группы - любое
 
 

R=3
Set O = p( 0, -4, 4)   ' положение центра
' Krug.ss O, R, p(0,1,0)
Polyline.Reset
n11 = LastNmb ' n1 - c какого элемента помещать в группу
For i = 0 To 6.29 step 0.05
  x1=O.x+R*cos(i)
  z1=O.z+R*sin(i)
  y1=-4
 Set Kxy = PerOtrxy (p(0,y1,0), Px, p(x1,0,0), Py)
 Set Kxz = PerOtrxz (p(x1,0,0), Pz, p(0,0,z1), Px)
 Set Kyz = PerOtryz (p(0,y1,0), Pz, p(0,0,z1), Py)
 Set K = PerOtr3D (Kxz, py,  Kxy, pz)
 x1=K.x
 y1=K.y
 z1=K.z
Set K = p(x1, y1, z1)
Polyline.AddP(K)
Next
Polyline.SetFillColor 0, 250, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group3" ' group2 - имя группы - любое

R=2
Set O = p( 0, -4, 4)   ' положение центра
' Krug.ss O, R, p(0,1,0)
Polyline.Reset
n11 = LastNmb ' n1 - c какого элемента помещать в группу
For i = 0 To 6.29 step 0.05
  x1=O.x+R*cos(i)
  z1=O.z+R*sin(i)
  y1=-4
 Set Kxy = PerOtrxy (p(0,y1,0), Px, p(x1,0,0), Py)
 Set Kxz = PerOtrxz (p(x1,0,0), Pz, p(0,0,z1), Px)
 Set Kyz = PerOtryz (p(0,y1,0), Pz, p(0,0,z1), Py)
 Set K = PerOtr3D (Kxz, py,  Kxy, pz)
 x1=K.x
 y1=K.y
 z1=K.z
Set K = p(x1, y1, z1)
Polyline.AddP(K)
Next
Polyline.SetFillColor 0, 0, 250
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group4" ' group2 - имя группы - любое

R=1
Set O = p( 0, -4, 4)   ' положение центра
' Krug.ss O, R, p(0,1,0)
Polyline.Reset
n11 = LastNmb ' n1 - c какого элемента помещать в группу
For i = 0 To 6.29 step 0.05
  x1=O.x+R*cos(i)
  z1=O.z+R*sin(i)
  y1=-4
 Set Kxy = PerOtrxy (p(0,y1,0), Px, p(x1,0,0), Py)
 Set Kxz = PerOtrxz (p(x1,0,0), Pz, p(0,0,z1), Px)
 Set Kyz = PerOtryz (p(0,y1,0), Pz, p(0,0,z1), Py)
 Set K = PerOtr3D (Kxz, py,  Kxy, pz)
 x1=K.x
 y1=K.y
 z1=K.z
Set K = p(x1, y1, z1)
Polyline.AddP(K)
Next
Polyline.SetFillColor 250, 0, 0
Polyline.SaveInDoc ( ngroup )
Polyline.Draw
n12 = LastNmb+1 ' по какой
MoveToGroup n11, n12, "group5" ' group2 - имя группы - любое