Основы художественного конструирования

Уроки в системе "Вектор"


Урок. 6. Композиции

Композиции к обекту или группе объектов в системе Вектор реализованы на уровне встроенных команд (с заданием/перезаданием параметров), макрокоманд (здесь вызова их из специального меню (и здесь уже невозможно перенастроить параметры) и создания своей МК.
Сейчас имется пять композиции первого класса. Это
1) Повтор по горизонтали, вертикали и в глубину.
2) Разброс по экрану случайным образом с масштабом и поворотом.
3) Разброс по линии.
 
4) Разброс по поверхности.
5) Перспективный ритм к точке схода (см. урок 6)


 

Разброс отрезка по полилинии или группе полилиний /новый тип арт-линии/

В частном случае "Колючая проволока" см. МК

Надо также уметь: разброс отрезков разной длины под тем или иным углом к линии

Вот параметры для панели входных данных

1) Число отрезков на линии  ___55___ (или галка по узлам линии)
2) Длина отрезка  min __0.5___  max ___1.0__    случайная  длина (галочка)

Типы направления отрезков: (cменить направление - галка)

1) По касательной
2) По нормали
3) По вектору направления  ___0___   ___0____   _____0______

4) Свободно или явно по диапазону углов

4.2. К оси х   Нач. угол ____45.0___   Конеч. угол ___135.0    случайный угол (галка)
4.3. К оси y   Нач. угол ____45.0___   Конеч. угол ___135.0    случайный угол (галка)
3.5. К оси z   Нач. угол ____45.0___   Конеч. угол ___135.0    случайный угол (галка)


Решим некоторые частные случаи с помощью МК

Пусть касательные разной длины  (МК)


Как сменить направление?
Надо сменить знак у кас. вектора.



Пусть отрезки разной длины, вертикальные и над линией (МК)


Как, чтобы отрезки были только на внешней стороне?



Отрезки горизонтальные и на внешней стороне  МК
 
Чтобы были отрезки на внутренней стороне, надо поменять знак


Отрезки в заданном направлении. Это довольно просто. Задается вектор направления. МК

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



Отрезки по нормали. Здесь надо касат. вектор повернуть на 90 градусов МК и поменять у одной из координат знак.

 



' отрезки все касательные
n77 = LastNmb
Dd_1=1
Dd_2=10
Set B = p(0,0,0)
Randomize
For u = 0 To 1 step 0.01
 CurrObjNmb = n77
 Set A = Polyline.P (u)
 CurrObjNmb = n77
 Set T = Polyline.T (u) ' это кас. вектор к линии
' Надо к нему провести перпендикулярный вектор, в плоскости xy
' Пусть длина отрезка случайная
  Dd = int(rnd(1)*Dd_2)
 Dd=Dd/10
      B.x = A.x+ T.x*(Dd_1+Dd)
 B.y = A.y+ T.y*(Dd_1+Dd)
 Otrezok.ss A,B
 Next
n22 = LastNmb+1 ' по какой
MoveToGroup 2, n22, "group" ' group - имя группы - любое

МК ' отрезки вертикальные и над линией
n77 = LastNmb
Dd_1=0.2
Dd_2=3
Set B = p(0,0,0)
Randomize
For u = 0 To 1 step 0.01
 CurrObjNmb = n77
 Set A = Polyline.P (u)
 CurrObjNmb = n77
 Set T = Polyline.T (u) ' это кас. вектор к линии
' Надо к нему провести перпендикулярный вектор, в плоскости xy
' Пусть длина отрезка случайная
  Dd = int(rnd(1)*10)
 Dd=Dd/10
      B.x = A.x
 B.y = A.y+ (Dd_1+Dd)
 Otrezok.ss A,B
 Next
n22 = LastNmb+1 ' по какой
MoveToGroup 2, n22, "group" ' group - имя группы - любое



' Написать Мк построения "волосатой" линии
n77 = LastNmb
m=1
Set B = p(0,0,0)
For u = 0 To 1 step 0.01
 CurrObjNmb = n77
 Set A = Polyline.P (u)
 CurrObjNmb = n77
 Set T = Polyline.T (u)
 B.x = A.x+T.x*m
 B.y = A.y+T.y*m
 B.z = A.z+T.z*m
 Otrezok.ss A,B
obj.origin(0) = -A.x
obj.origin(1) = -A.y
obj.origin(2) = -A.z
obj.SetH
      v1 = int(rnd(1)*360)
      v2 = int(rnd(1)*360)
      v3 = int(rnd(1)*360)
  obj.xAngle=v1
 obj.yAngle=v2
 obj.zAngle=v3
 Obj.SetH
obj.origin(0) = A.x
obj.origin(1) = A.y
obj.origin(2) = A.z
obj.SetH
 Next
n22 = LastNmb+1 ' по какой
MoveToGroup 1, n22, "group" ' group - имя группы - любое


' отрезки все горизонтальные и на внешней стороне
n77 = LastNmb
Dd_1=1
Dd_2=10
Set B = p(0,0,0)
Randomize
For u = 0 To 1 step 0.01
 CurrObjNmb = n77
 Set A = Polyline.P (u)
 CurrObjNmb = n77
 Set T = Polyline.T (u) ' это кас. вектор к линии
' Надо к нему провести перпендикулярный вектор, в плоскости xy
' Пусть длина отрезка случайная
  Dd = int(rnd(1)*Dd_2)
 Dd=Dd/10
      B.x = A.x+ T.y*(Dd_1+Dd)
 B.y = A.y+ T.z*(Dd_1+Dd)
 Otrezok.ss A,B
 Next
n22 = LastNmb+1 ' по какой
MoveToGroup 2, n22, "group" ' group - имя группы - любое


' отрезки все касательные
n77 = LastNmb
Dd_1=1
Dd_2=10
Set B = p(0,0,0)
Randomize
For u = 0 To 1 step 0.01
 CurrObjNmb = n77
 Set A = Polyline.P (u)
 CurrObjNmb = n77
 Set T = Polyline.T (u) ' это кас. вектор к линии
' Надо к нему провести перпендикулярный вектор, в плоскости xy
' Пусть длина отрезка случайная
  Dd = int(rnd(1)*Dd_2)
 Dd=Dd/10
      B.x = A.x + T.y*(Dd_1+Dd)
 B.y = A.y - T.x*(Dd_1+Dd)
 Otrezok.ss A,B
 Next
n22 = LastNmb+1 ' по какой
MoveToGroup 2, n22, "group" ' group - имя группы - любое


 ' отрезки на линии в зад. направлении
n77 = LastNmb
Dd_1=1
Dd_2=10
Set B = p(0,0,0)
Set C = p(0.71,0.71,0.71)
Randomize
For u = 0 To 1 step 0.01
 CurrObjNmb = n77
 Set A = Polyline.P (u)
 CurrObjNmb = n77
 Set T = Polyline.T (u) ' это кас. вектор к линии
' Надо к нему провести перпендикулярный вектор, в плоскости xy
' Пусть длина отрезка случайная
  Dd = int(rnd(1)*Dd_2)
 Dd=Dd/10
      B.x = A.x+ C.x*(Dd_1+Dd)
 B.y = A.y+ C.y*(Dd_1+Dd)
 Otrezok.ss A,B
 Next
n22 = LastNmb+1 ' по какой
MoveToGroup 2, n22, "group" ' group - имя группы - любое