Читайте также: |
|
1. Создать уменьшающийся треугольник (деление сторон 9:1) и пульсирующий треугольник.
2. Создать уменьшающийся прямоугольник (деление сторон 3:1) и пульсирующий прямоугольник.
Примечание к п. 1 и п. 2: пульсация фигуры достигается перерисовкой ее в режиме XorPut, при многократном увеличении и последующем уменьшении коэффициента масштабирования, например, по закону: K= K + i*0. 02. Где i - параметр цикла.
Симметричное отображение фигуры.
Пусть хz - ось зеркальной симметрии, тогда координата "yzi" i-ой точки фигуры в системе координат (xz, yz) определяется по формуле:
yzi= (yi-yf)*cos(A)-(xi-xf)*sin(A),
где xf, yf - координаты любой точки на оси зеркальной симметрии,
xi, yi - координаты отображаемой точки в системе координат экрана,
A - угол наклона оси симметрии относительно оси "x" по часовой стрелке.
Тогда координаты отраженной точки в системе координат (X0Y) определяются по формулам:
xf xoi xi X
0 xoi = xi + 2*yzi*sin(A);
yf * yoi = yi - 2*yzi*cos(A);
yi
yoi
XZ
Y YZ
Приведем пример операторов для расчета координат xo[ i], yo[ i] точек фигуры зеркально отображенной относительно оси, наклоненной под углом "A" и проходящей через точку с координатами xf, yf.
for i:= 1 to N do begin
yzi:= round((y[i]-yf)*cos(A) - (x[i]-xf)*sin(A));
xo[i]:= x[i] + 2*round(yzi*sin(A));
yo[i]:= y[i] - 2*round(yzi*cos(A))
End;
Практическое задание N 1. 58
1. Нарисовать елку с основанием в центре экрана и получить три зеркальных отображения относительно осей, проходящих через центр экрана под углом +450, 00, -450 к оси "х".
2. Выполнить п. 1 для подсвечника со свечой.
Штриховка углов.
Определим координаты отрезков, образующих стороны угла и поделим их на N-частей. Соединим попарно точки раздела сторон угла так, чтобы наиболее удаленная от вершины угла точка на одной стороне соединялась с наименее удаленной точкой на другой стороне. Приведем процедуру штриховки угла.
Procedure UGOL(x1, y1, x2, y2, x3, y3, N: integer);
var xx1, xx2, yy1, yy2, i: integer; k: real;
Begin
for i:= 1 to N+1 do begin k:= (i-1)/N;
xx1:=x1+round((x2-x1)*k); yy1:=y1+round((y2-y1)*k);
xx2:=x2+round((x3-x2)*k); yy2:=y2+round((y3-y2)*k));
line(xx1, yy1, xx2, yy2) { линия штриховки угла }
End
End;
Здесь x2, y2 - координаты вершины угла, x1, y1, x3, y3 - координаты крайних точек сторон. Коэффициент "k" определяет удаленность точки от вершины угла. Огибающая пересекающихся отрезков образует параболическую границу.
Дата добавления: 2015-10-29; просмотров: 88 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
SetColor(S); Circle(xf, yf, R) end; | | | Создание узоров построением зеркальных отображений фигуры. |