Компьютерная геометрия

Содержание

Слайд 2

Двухмерные преобразования Координаты точек задаются вектором [x,y] Перенос на плоскости Умножение на матрицу общего вида

Двухмерные преобразования

Координаты точек задаются вектором [x,y]
Перенос на плоскости
Умножение на

матрицу общего вида
Слайд 3

Масштабирование, отражение, сдвиг Масштабирование Отражение Сдвиг

Масштабирование, отражение, сдвиг

Масштабирование
Отражение
Сдвиг

Слайд 4

Преобразование единичного квадрата Коэф. матрицы преобразования эквивалентны координатам B* и D*

Преобразование единичного квадрата

Коэф. матрицы преобразования эквивалентны координатам B* и D*

Слайд 5

Поворот единичного квадрата Координаты B*: х*=(1)cos θ и y=(1)sin θ Координаты

Поворот единичного квадрата

Координаты B*: х*=(1)cos θ и y=(1)sin θ
Координаты D*: x*=(-1)sin

θ и y*=(1)cos θ
Матрица преобразований:
Слайд 6

Однородные координаты Преобразования переноса, масштабирования и поворота в матричной форме P*=P+T,

Однородные координаты

Преобразования переноса, масштабирования и поворота в матричной форме P*=P+T, P*=P*S,

P*=P*R целесообразно унифицировать!
Переход в однородные координаты:
Точки задаются вектором [x,y,1]
Матрица преобразований:
Слайд 7

Нормализация В общем случае Н ≠ 1, и преобразованные обычные координаты

Нормализация

В общем случае Н ≠ 1, и преобразованные обычные координаты получаются

за счет нормализации однородных координат, т. е.
Слайд 8

Геометрический смысл нормализации

Геометрический смысл нормализации

Слайд 9

Матрицы преобразований для однородных координат Перенос Поворот Масштаб

Матрицы преобразований для однородных координат

Перенос
Поворот
Масштаб

Слайд 10

Комбинированные преобразования В общем случае вращение около произвольной точки может быть

Комбинированные преобразования

В общем случае вращение около произвольной точки может быть выполнено

путем переноса центра вращения в начало координат, поворотом относительно начала координат, а затем переносом точки вращения в исходное положение.
Слайд 11

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

Трехмерные преобразования

Правосторонняя система координат

Слайд 12

Однородные координаты [X,Y,Z,H] = [x,y,x,1] * T T = [x*,y*,z*,1] =[ ], где Н≠1, Н ≠0

Однородные координаты

[X,Y,Z,H] = [x,y,x,1] * T
T =
[x*,y*,z*,1] =[ ], где

Н≠1, Н ≠0
Слайд 13

Трехмерный перенос T(Dx,Dy,Dz)= Трехмерное изменение масштаба

Трехмерный перенос
T(Dx,Dy,Dz)=
Трехмерное изменение масштаба

Слайд 14

Трехмерный сдвиг [x y z 1]* = [x+yd+hz, bx+y+iz, cx+fy+z, 1].

Трехмерный сдвиг
[x y z 1]* = [x+yd+hz, bx+y+iz, cx+fy+z, 1].

Слайд 15

Трехмерное вращение Rz= Rx= Ry=

Трехмерное вращение
Rz=
Rx=
Ry=

Слайд 16

Пример реализации: //инициализация начальных данных procedure TForm1.FormCreate(Sender: TObject); begin //задание начальных

Пример реализации:

//инициализация начальных данных
procedure TForm1.FormCreate(Sender: TObject);
begin
//задание начальных координат
a[1,1]:=-50; a[1,2]:= 50;

a[1,3]:=0; a[1,4]:=1;
a[2,1]:= 50; a[2,2]:= 50; a[2,3]:=0; a[2,4]:=1;
a[7,1]:= 25; a[7,2]:=-25; a[7,3]:=25; a[7,4]:=1;
a[8,1]:=-25; a[8,2]:=-25; a[8,3]:=25; a[8,4]:=1;
//задание матрицы преобразования
m[1,1]:=1; m[1,2]:=0; m[1,3]:=0; m[1,4]:=0;
m[2,1]:=0; m[2,2]:=1; m[2,3]:=0; m[2,4]:=0;
m[3,1]:=0; m[3,2]:=0; m[3,3]:=1; m[3,4]:=0;
m[4,1]:=0; m[4,2]:=0; m[4,3]:=0; m[4,4]:=1;
end;
Слайд 17

Обработчик нажатия кнопки procedure TForm1.RotateYExecute(Sender: TObject); begin if XAngle.Text = ''

Обработчик нажатия кнопки

procedure TForm1.RotateYExecute(Sender: TObject);
begin
if XAngle.Text = '' then alfa

:= 0.2
else alfa := StrToInt(YAngle.Text)*2*Pi/360;
m[1,1]:=cos(alfa); m[1,2]:=0; m[1,3]:=-sin(alfa); m[1,4]:=0;
m[2,1]:=0; m[2,2]:=1; m[2,3]:=0; m[2,4]:=0;
m[3,1]:=sin(alfa); m[3,2]:=0; m[3,3]:=cos(alfa); m[3,4]:=0;
m[4,1]:=0; m[4,2]:=0; m[4,3]:=0; m[4,4]:=1;
ABCxM; //вызов подпрограммы умножения матриц
end;
Слайд 18

Подпрограмма умножения матриц Procedure TForm1.ABCxM; var i,j,k: Integer; b: array[1..4] of

Подпрограмма умножения матриц

Procedure TForm1.ABCxM;
var i,j,k: Integer;
b: array[1..4] of real;
begin

for j:=1 to 8 do
begin
for i:=1 to 4 do
b[i]:=a[j,1]*m[1,i]+a[j,2]*m[2,i]+a[j,3]*m[3,i]+a[j,4]*m[4,i];
for k:=1 to 4 do
a[j,k]:=b[k];
end;
//Не забудьте про нормализацию
PaintBox1.Repaint; // Принудительный вызов перерисовки
end;