Лекция 2. Алгоритмизация как метод проектирования новых форм

Упражнения по уроку в системе "Вектор"
 

ВВЕДЕНИЕ

Алгоритмические методы в графических системах можно классифицировать:
-  построения непосредственно геометрических образов, например, на аналогах движения в физике;
-  геометрическом месте точек,
-  параметризации геометрических операций и построений.

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

Алгоритм может быть задан:
аналитическим уравнением,
условиями на мах/min,
генератором случайных чисел.
макрокомандами (МК), выполняющих совокупность расчетов, графических построений.

Алгоритм и МК подразумевают:
- задание входных данных,
- исполнение,
- получение результата в виде выходных данных.

Прямая или кривая линии - это траектории однопараметрического движения точки по линейному или нелинейному законам и зависит, например, от времени. Структурировать эти движения удобно с помощью векторно-параметрического подхода, подразумевая, что вектор -это вектор-функция точки в геометрическом пространстве и что вектор точки определяется набором ее координат.
Так для вычисления точки p на отрезке прямой р1-р2 по формуле:
p=(1.-t)*p1+t*p2                                   (1)
или покомпонентно:
x = (1-t)*x1 + t*x2
y = (1-t)*y1 + t*y2
z = (1-t)*z1 + t* z2
при     0 < t < 1

Входными данными будут точки р1 и р2 и какое-то значение t в диапазоне от 0 до 1;
Выходными - точка р, получаемая в результате исполнения (1).
 
 
 
Рис. Векторное и векторно-покомпонентное задание точек на прямой

Плоскость (или косая плоскость) - это однопараметрическое множество линий, или двухпараметрическое множество точек.


1. Алгоритмизация аналитическими уравнениями.

Аналитические, тригонометрические уравнений уже сами по себе являются удобными алгоритмами для применения их в вычислительной геометрии. Особенно удобными являются явные уравнения и параметрические. Приведем несколько из них.
Уравнение прямой проходящей через начало координат y=ax.  В этом уравнении, переменная x - считается независимой переменной, а y - зависимой переменной, a -угловой коээфициент изменяющийся от нуля до двух пи.
Уравнение прямой вида: y=ax+b описывает прямую, отсекающую по оси y - отрезок, равный b.
В справочниках прямую, проходящую через две точки часто задают в виде:
(x-x1)/(x2-x)=(y-y1)/(y2-y1),
которое легко привести к явному виду:
y=y1+(y2-y1)*(x-x1)/(x2-x).

Окружность также можно задать через независимую переменную x и зависимую y,
y=sqrt(R*R-x*x) или
y=yc+sqrt(r*r-(x-xc)*(x-xc)).

Однако удобнее пользоваться параметрическим уравнением:
x=xс+R*sin(s)
y=yс+R*cos(s),
где pc(xc,yc) - центр окружности, а s - параметр, изменяющийся от нуля до двух пи.

Сфера задается:
x=R*cos(s1)*$sin(s2)
y=R*$sin(s1)*$sin(s2)
z=R*cos(s2)

Есть мног замечательных уравнений, описываемых в тригономентрической форме (см. справочник Бронштейна, Семендяева), те или иные геометрические формы, однако, все же замечательным свойством задания уравнений является векторная алгебра.


2. Алгоритмизация на основе векторной алгебры.

В прямоугольной системе координат точку P можно представить как вектор: каждой точке Р однозначно соответствует вектор OР, который называется радиус вектором точки Р.
Модуль вектора вычисляется по правилу
s=|p| = sqrt (x*x + y*y + z*z)
Единичный вектор - это вектор длина которого равна единице. Поэтому, чтобы получить единичный вектор - надо вектор разелить на его длину.
Так движение точки можно задать и как ее движение в зависимости от расстояния по заданному направлению (единичному вектору)
p = p1+s*Peд
Ниже даны уравнения кривых как геометрическое место точек  в векторной форме. В векторной форме часто легко записать, однако не всегда легко перейти к явному или параметрическому заданию (что требуется все же при построении кривой). Тогда можно воспользоваться следующим приемом: не решаемое аналитическое уравнение относительно x или y определить как функцию от двух переменных параметров x и y. В трехмерном пространстве получится двумерная фигура - сечения (изолинии) которой  будут искомыми линиями (см. п.6).

3. Проектирование геометричеких форм (фигур) как геометрическое место точек

Геометрическим местом точек называется совокупность (множество) всех точек, обладающих одним общим свойством.
Прямую, кривую линию, плоскость и многие другие геометрические образы можно также определить как геометрическое место.
Вот некоторые примеры ГМТ на плоскости и в пространстве
На плоскости:
Для прямой: ГМТ находящихся на одинаковом расстоянии от двух заданных:
s1=s2  или  |p-p1|=|p-p2|.

Для окружности: ГМТ равноудаленных от заданной:
s=|p-p1|.

 Для эллипса: ГМТ у которых сумма растояний до двух (фокусов эллипса) точек величина постоянная:
s1+s2=c  или |p1-p|+|p2-p| =c

 Для параболы: ГМТ которые находятся на одинаком растоянии до фокуса параболы и вертикальной прямой: s1=s2 или |p1-p|=|p2-p|   (x2=c)

 Для гиперболы: ГМТ у которых разность растояний до двух (фокусов эллипса) точек величина постоянная:
s2-s1=c  или |p1-p|-|p2-p| =c

Для дуги окужности, проходящей через две точки и заданный радиус: |p1-p|=|p2-p| = с (компромисс).
Для дуги окужности, проходящей через три  точки |p1-p|=|p2-p| = |p3-p| (компромисс)
 


 В пространстве:
1. Геометрическое место точек, равноудаленных от двух данных есть плоскость, перпендикулярная к отрезку, соединяющему данные точки, и проходящая через его середину.
2. Геометрическое место точек, равноудаленных от двух данных пересекающихся прямых, является  совокупностью двух плоскостей, перпендикулярных к плоскости данных прямых и проходящих через биссектрисы углов, образованных этими прямыми.
3. Геометрическое место точек, равноудаленных от данной плоскости на заданное расстояние, есть совокупность двух плоскостей, параллельных данной и удаленных от нее на заданное расстояние.
4. Геометрическое место точек, равноудаленных от двух данных параллельных плоскостей, есть плоскость, параллельная данным и делящая пополам расстояние между ними.
5. Геометрическое место точек, равноудаленных от двух пересекающихся  плоскостей, есть совокупность двух плоскостей, делящих пополам двугранные углы, образованные данными плоскостями.
6. Геометрическое местом прямых, удаленных от  данной  плоскости на заданное расстояние, есть совокупность двух плоскостей, параллельных данной и удаленных от нее на заданное расстояние.
7. Геометрическое место прямых, равноудаленных от двух данных параллельных  плоскостей, есть плоскость, параллельная данным и делящая пополам расстояние между ними.
8. Геометрическое местом плоскостей, равноудаленных от двух данных параллельных прямых, есть совокупность всех плоскостей, параллельных плоскости данных прямых, а также плоскостей,  проходящих через среднюю линию этих прямых.
Список геометрических мест элементов велик, а, зная правила формирования геометрических мест, можно формировать образы, отвечающие тем или другим законам.

На основе понятия геометрического места точек получены многие аналитические уравнения  геометрических фигур (окружность, эллипс, эвольвента,  сфера, эллипсоид и т.д.).


Пример. На плоскости построить геометрическое место точек (ГМТ)  p, при условии, что точки р находятся (рис. ) на одинаковом расстоянии от фиксированной точки pс.

Известно, что данным ГМТ является окружность.

Формализация задачи:

Формулируем поставленное условие с помощью утверждения: расстояние R между двумя точками Рс (центром окружности) и текущей точкой Р определяется модулем разности вектор-функций этих точек:
|Pc - P| = R

От векторной записи как ГМТ, можно перейти к их явному аналитическому заданию:
(x-xc)*(x-xc)-(y- yc)*(y- yc)=R*R

Однако чаще сделать это сложно. В этом случае можно все уравнение представить в виде функции:
 F=R*R - (x-xc)*(x-xc) + (y- yc)*(y- yc),
и найти искомую окружность как сечение.


4. Проектирование линий исходя только из условий ГМТ

4.1. Окружность, как ГМТ в плоскости в которой точки должны находится на одинаковом расстоянии
Постановка задачи:
S=|pc-pi| -> R
Алгоритм решения задачи
1) Перебираем (организуем два вложенных цикла) все точки на квадрате 8х8 с каким-либо шагом. Чем шаг меньше, тем больше точек получим, удовлетворяющих условию
2) Внутри второго цикла от каждой точки вычислем расстояние до центра окружности
3) Вычиленные длины (округлим десятые доли) сравниваем с радиусом, если длины равны, то в данном месте ставим точку.

' МК построение массива точек окружности из их выбора на плоскости
x1=0
y1=0
x2=8
y2=8
x5=4
y5=4
R=3
For v = 0 To 1 Step 0.02
 y=(1-v)*y1+v*y2
  For u = 0 To 1. Step 0.02
       x=(1-u)*x1+u*x2
  s=sqr((x5-x)*(x5-x)+(y5-y)*(y5-y))*10
            a = int(s)
   If a/10 = R Then
        Ngpoint.s x,y,0
   End if
  Otrezok.s x,y1,0,x,y2,0
  Next
Otrezok.s x1,y,0,x2,y,0
Next
В итоге получим искомую окружность, заданную массивом точек

4.2. Линия Кассини у которой ГМТ как произведения до 2-х фокусов величина постоянная
Постановка задачи
s1*s2 -> 11
или
|F1-p|*|F2-p| -> 11

x1=-8
y1=-8
x2=8
y2=8
Set F1=p(-3,0,0)
Set F2=p(3,0,0)
Set F3=p(0,-3,0)
Set F4=p(0,3,0)
R=11
Otrezok.s x1,y1,0,x2,y1,0
Otrezok.s x1,y2,0,x2,y2,0
Otrezok.s x1,y1,0,x1,y2,0
Otrezok.s x2,y2,0,x2,y2,0

For v = 0 To 1 Step 0.005
 y=(1-v)*y1+v*y2
  For u = 0 To 1. Step 0.005
       x=(1-u)*x1+u*x2
  s1=sqr((F1.x-x)*(F1.x-x)+(F1.y-y)*(F1.y-y))
  s2=sqr((F2.x-x)*(F2.x-x)+(F2.y-y)*(F2.y-y))
  s=(s1*s2)*10
  a = int(s)
   If a/10 = R Then
        Ngpoint.s x,y,0
   End if
  ' Otrezok.s x,y1,0,x,y2,0
  Next
' Otrezok.s x1,y,0,x2,y,0
Next
Вот кривая Кассини, изображенная методом подбора точек

4.3. Линия как ГМТ у которой произведения до 4-х фокусов величина постоянная
s1*s2*s3*s4 -> 70
или
|F1-p|*|F2-p|*|F3-p|*|F4-p| -> 70

Вот кривая  у которой 4-ре фокуса

Задача. Подобрать несколько фокусов так, чтобы линия описывала профиль человеческого лица
Пример. Зададим пять фокусов
s1*s2*s3*s4*s5 -> C
Пусть фокусы и С заданы
Set F1=p(-3,0,0)
Set F2=p(3,1,0)
Set F3=p(-1,2,0)
Set F4=p(-1,-3,0)
Set F5=p(2,-2,0)
R=120
Тогда получим такой рисунок, из которого видим, что с задана маленькой

Пусть С=340

Подбирая фокусы соответствующим образом можно получить требуемое очертание
Таким образом можно получать различные очертания. Однако различные очертания, немного попрактиковашись, можно электронным карандашем можно выполнять и вручную. Однако, вот создание поверхностей - трехмерных форм здесь сложнее. Поэтому, а нельзя  ли использовать инструмент для создания новых форм, подобно тому, как создавлись кривые.
Такие поверхности называются рельефами функций.
Так исследуя  ГМТ окружности:
|pc-p|=c
или
sqr((xc-x)*(xc-x)+(yc-x)*(yc-x)-c
замечаем, что в этом уравнении две переменных величины, выбирая которые  для двумерной функции Z(x,y)=sqr((xc-x)*(xc-x)+(yc-x)*(yc-x)-c, (1)
можно построить  двумерную поверхность, которая будет в данном примере конической поверхностью и у которой изолиниями будут окружности.
Пример 1. Построить рельеф поверхности на прямоугольной сетке по  только что полученному уравнению.
1) Сначало зададим прямоугольную сетку
2) Каждой точке прямоугольной сетке будем давать третью координату по уравнению 1
В результате этих действий получим искомый рельеф


6. Параметризация при художественном конструировании

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

Окружность определяется тремя параметрами: два параметра (значения координат центра) - параметры положения и один - радиус - параметр формы.

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


Упражнения

Упражнение 1. Задать кардиоиду, если известны ее параметрические уравнения:
x=a*cos(t)*(1+cos(t))
y=a*sin(t)*(1+cos(t))
0 < t < 6.28
Алгоритм решения:
1) В текстовом редакторе WordPad (запускается из "Вектора") создать файл с расширением .vbs, например:
kardioida.vbs 
Примечание: в некоторых случаях могут возникнуть проблемы с кодировкой, поэтому лучше взять файл готовый, например, запустить какую-либо макрокоманду из готовых (см меню) и сохнанить его как  kardioida.vbs и там, удалив все лишнее, задать свои соответствующие команды

2) Задаем входные данные. Для кардиоиды - это всего один параметр а
а = 4 '  - это радиус (по оси х) кардиоиды
3) Организуем цикл по схеме
        For t=0 To 6.28 Step 0.01
        Next
4) Внутри цикла
    4.1. Вычисляем координаты точки
    4.2. Точкиизображаем с помощью метода:  Ngpoint.s x,y,0



Упражнение 2. Создайте МК  задания окружности, у которой радиус R=2.5, а центр находится в точке  С(2,1).
Известно, что уравнение окружности в параметрическом виде с произвольным центром имеет следующий вид:
x=Xc+R*cos(t)
y=Yc+R*sin(t)

Алгоритм решения:
1) Формируем МК (например, сохранить предыдущую МК под новом именем, тем более в ней уже есть цикл, который пригодится и для задания окружности)
2) Задаем исходные данные: центр окружности, радиус и начальную точку откоторой начнем строить кривую
Cx =2
Cy=1
R=2
Bx=Cx+R
By=Cy+R
3) Организуем цикл
        For t=0 To 6.28 Step 0.01
        Next
4) Внутри цикла:
    4.1. Вычисляем координаты точек окружности
    4.2. Точки последовательно соединяем отрезками прямых с помощью метода
            Otrezok.s Bx, By, 0, x, y, 0
    4.3. Для построения следующего отрезка конец предыддущего отрезка кладем в начало следующего
            Bx=x
            By=y
Окончательно МК, в которой обозначен еще и центр, будет: 
<Circl.vbs> - имя МК
' Окружность - коментарий
R=2
Cx=2
Cy=1
Bx=Cx+R
By=Cy
Ngpoint.s Cx,Cy,0
Text.ss p(Cx,Cy,0),"C"
        For t=0 To 6.28 Step 0.01
                     x=Cx+R*cos(t)
                    y=Cy+R*sin(t)
                    Otrezok.s Bx,By,0,x,y,0
                     Bx=x
                     By=y
          Next



Упражнение 3. Используя МК №2  усложните ее так, чтобы получить цилиндрическую, и коническую спирали. Посмотрите их на комплексном чертеже.
Рекомендация: воспользуйтесь третьей координатой z (в цикле организуйте ее приращение), а для конической спирали еще вдобавок организуйте уменьшение радиуса.


Упражнение 4. В диалоге позадавайте линиии: окружность, кулачек, спираль поприменяйте к ним готовые МК из меню


Упражнение 5. В диалоге позадавайте линиии: окружность, кулачек, спираль,  преобразуйте их в полилинии, сделайте художественнми, конформными


Упражнение 6. В диалоге из меню готовых МК задайте ортогональную сетку (задайте через структуру  растяжку цвета - щелкнуть правой кнопкой мыши ) и применив к ней из конфрмных преобразований (конформные преобпразования пока не задавать - должно стоять число 0) построение рельефов (до 50), посмотрите  какая получается текстура при том или ином рельефе, покрутив через ArcBall или комплексный чертеж посмотрите сам рельеф.


Упражнение 7. В диалоге из меню готовых МК задайте полярную сетку (задайте через структуру в растяжку цвета - щелкнуть правой кнопкой мыши) и применив к ней из конфрмные преобразования, посмотрите какие получаются изображения