• Nie Znaleziono Wyników

Laboratorium komputerowe 11 Transformacje geometryczne obiektu 3D Współrzędne jednorodne W przestrzeni trójwymiarowej współrzędne jednorodne znormalizowane punktu

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium komputerowe 11 Transformacje geometryczne obiektu 3D Współrzędne jednorodne W przestrzeni trójwymiarowej współrzędne jednorodne znormalizowane punktu "

Copied!
6
0
0

Pełen tekst

(1)

1

Laboratorium komputerowe 11 Transformacje geometryczne obiektu 3D

Współrzędne jednorodne

W przestrzeni trójwymiarowej współrzędne jednorodne znormalizowane punktu 𝑃 o współrzędnych kartezjańskich (𝑃𝑥, 𝑃𝑦, 𝑃𝑧) mają postać (𝑃𝑥, 𝑃𝑦, 𝑃𝑧, 1). Współrzędne jednorodne nieznormalizowane mają postać (𝑃𝑥, 𝑃𝑦, 𝑃𝑧, 𝑤) i 𝑤 ≠ 0.

Punkt o współrzędnych jednorodnych (𝑃𝑥, 𝑃𝑦, 𝑃𝑧, 𝑤) i 𝑤 ≠ 0 ma współrzędne kartezjańskie (𝑃𝑤𝑥,𝑃𝑤𝑦,𝑃𝑤𝑧). Jeśli 𝑤 = 0 to współrzędne jednorodne nie odpowiadają żadnemu punktowi w przestrzeni kartezjańskiej i mówimy, że takie współrzędne reprezentują punkt w nieskończoności.

Przykład

Współrzędne jednorodne:

(2, 3, 5, 1) , (4, 6, 10, 2) , (1, 1.5, 2.5, 0.5) wyznaczają ten sam punkt w trójwymiarowej przestrzeni kartezjańskiej.

Przekształcenia geometryczne – postać ogólna

Przekształcenia geometryczne definiujemy za pomocą macierzy transformacji. Dla punktu 𝑃 = (𝑃𝑥, 𝑃𝑦, 𝑃𝑧, 1) i przekształcenia 𝑇 uzyskujemy punkt 𝑃′ = (𝑃𝑥, 𝑃𝑦, 𝑃𝑧, 1):

[ 𝑃𝑥 𝑃𝑦 𝑃𝑧 1

] = [

𝑇11 𝑇12 𝑇13 𝑇14 𝑇21 𝑇22 𝑇23 𝑇24 𝑇31 𝑇32 𝑇33 𝑇34

0 0 0 1

] [ 𝑃𝑥 𝑃𝑦 𝑃𝑦 1

]

Poniżej znajdują się macierze dla wybranych przekształceń: translacji, skalowania oraz rotacji.

Translacje

Macierz translacji (przesunięcia) o wektor 𝑢⃗ = [𝑢𝑥, 𝑢𝑦, 𝑢𝑧] :

𝑻(𝑢⃗ ) = [

1 0 0 𝑢𝑥 0 1 0 𝑢𝑦 0 0 1 𝑢𝑧

0 0 0 1

]

Uwaga: 𝑢𝑥 jest przesunięciem wzdłuż osi 𝑂𝑋, 𝑢𝑌 wzdłuż osi 𝑂𝑌, a 𝑢𝑍 wzdłuż osi 𝑂𝑍 .

(2)

2 Skalowanie

Macierz skalowania wzdłuż każdej osi ze współczynnikami skali dla każdej z nich:

𝑺(𝑠𝑥, 𝑠𝑦, 𝑠𝑧) = [

𝑠𝑥 0 0 0

0 𝑠𝑦 0 0 0 0 𝑠𝑧 0

0 0 0 1

]

Obroty

Macierze obrotu o kąt 𝜃 wokół osi 𝑂𝑋, 𝑂𝑌 oraz 𝑂𝑍 :

𝑹𝑿(𝜃) = [

1 0 0 0

0 cos(𝜃) −sin(𝜃) 0 0 sin(𝜃) cos(𝜃) 0

0 0 0 1

] , 𝑹𝒀(𝜃) = [

cos(𝜃) 0 sin(𝜃) 0

0 1 0 0

−sin(𝜃) 0 cos(𝜃) 0

0 0 0 1

] ,

𝑹𝒁(𝜃) = [

cos(𝜃) −sin(𝜃) 0 0 sin(𝜃) cos(𝜃) 0 0

0 0 1 0

0 0 0 1

]

Przykład

Figurę wyznaczoną przez wierzchołki 𝐴𝐵𝐶𝐷 obrócić wokół osi 𝑂𝑍 o kąt 𝜃 =𝜋6 . Wykonać ilustrację graficzną. Współrzędne wierzchołków są następujące: 𝐴 = (0, 0, 0), 𝐵 = (5, 0, 0), 𝐶 = (4, 0, 3), 𝐷 = (2, 0, 3.5).

Uwaga

Definiujemy dwie macierze: macierz wierzchołków 𝑽 i macierz krawędzi figury 𝑭. Przy czym macierz wierzchołków jest tylko macierzą pomocniczą, która ułatwi definiowanie macierzy krawędzi. W macierzy krawędzi podajemy ciąg wierzchołków wyznaczających kolejne krawędzie figury (można wielokrotnie przechodzić przez wierzchołki i krawędzie).

Dla ułatwienia zapisu punkty (wierzchołki figury) definiowane są w kolejnych wierszach macierzy 𝑽. Podobnie definiowana jest macierz krawędzi 𝑭. Następnie macierz krawędzi jest transponowana tak, aby punkty zapisane były w kolumnach i mogły być transformowane zgodnie z konwencją:

𝑷= 𝑻 ∗ 𝑷

gdzie 𝑷 = [ 𝑥 𝑦 𝑧 1

] jest wierzchołkiem figury odczytanym z macierzy 𝑭 𝑇.

(3)

3

Do narysowania krawędzi figury wykorzystana jest funkcja plot3(x,y,z), która działa analogicznie do funkcji plot(x,y). Przy czym pozwala ona rysować obiekty w przestrzeni 3D – łączy odcinkami punkty zdefiniowane za pomocą wektorów współrzędnych x, y, z.

clf % clear figure

% wierzchołki figury (w kolejnych wierszach)

V = [0, 0, 0, 1; % A

5, 0, 0, 1; % B

4, 0, 3, 1; % C

2, 0, 3.5, 1]; % D

% definicja ciągu krawędzi figury

% rysunek jest tworzony poprzez podanie współrzędnych

% kolejnych wierzchołków: A B C D A

F = [V(1,:); V(2,:); V(3,:); V(4,:); V(1,:)];

F = F'; % transpozycja

% rysunek krawędzi

plot3(F(1,:), F(2,:), F(3,:), 'r') grid on

% kąt obrotu theta = pi/6;

% macierz transformacji (obrót wokół osi OZ) T = [cos(theta), -sin(theta), 0, 0 ;

sin(theta), cos(theta), 0, 0;

0, 0, 1, 0;

0, 0, 0, 1];

% transformacja współrzędnych wszystkich wierzchołków

% tworzących krawędzie figury F2 = T*F;

hold on

% rysunek krawędzi po transformacji plot3(F2(1,:), F2(2,:),F2(3,:), 'g')

axis([0,5,0,5,0,3.5]) % zakres osi OX, OY i OZ

axis equal

(4)

4 Wynik działania skryptu przedstawiony jest poniżej:

Zadania

Bazując na przedstawionym przykładzie wykonać poniższe zadania:

zad. 1.

Dana jest figura 𝐴𝐵𝐶𝐷𝐸:

𝐴 = (1, 1, 0), 𝐵 = (3, 2, 0), 𝐶 = (4, 1, 0), 𝐷 = (4, 4, 0), 𝐸 = (3, 4, 0).

Wykonać następujące operacje z zachowaniem ich kolejności:

- translacja figury w taki sposób, aby wierzchołek 𝐴 znalazł się w początku układu współrzędnych, a sama figura pozostała w płaszczyźnie 𝑧 = 0,

- obrót figury wokół osi 𝑂𝑋 o kąt 90°,

- przeskalowanie figury ze współczynnikiem 𝑠 = 1.5 (wzdłuż osi 𝑂𝑋 i 𝑂𝑍).

Narysować figurę po każdej operacji.

zad. 2.

Narysować czworościan o wierzchołkach 𝐴𝐵𝐶𝐷:

𝐴 = (0, 0, 0), 𝐵 = (2, 2, 0), 𝐶 = (0, 3, 0), 𝐷 = (0, 2, 2).

Wykonać trzykrotnie obrót o kąt 90° wokół osi 𝑂𝑌. Po każdym obrocie dorysować uzyskaną figurę.

(5)

5 zad. 3.

Wprowadzenie

Obrót o kąt 𝜑 wokół dowolnej osi przechodzącej przez początek układu współrzędnych 𝑂 = (0, 0, 0), której kierunek jest wyznaczony przez wektor jednostkowy 𝑛⃗ = [𝑎, 𝑏, 𝑐]

można zrealizować za pomocą macierzy transformacji:

𝑴 = [

𝑎2 (1 − cos 𝜑) + cos 𝜑 𝑎𝑏 (1 − cos 𝜑) − 𝑐 sin 𝜑 𝑎𝑐 (1 − cos 𝜑) + 𝑏 sin 𝜑 0 𝑎𝑏 (1 − cos 𝜑) + 𝑐 sin 𝜑 𝑏2 (1 − cos 𝜑) + cos 𝜑 𝑏𝑐 (1 − cos 𝜑) − 𝑎 sin 𝜑 0 𝑎𝑐 (1 − cos 𝜑) − 𝑏 sin 𝜑 𝑏𝑐 (1 − cos 𝜑) + 𝑎 sin 𝜑 𝑐2 (1 − cos 𝜑) + cos 𝜑 0

0 0 0 1]

Powyższą transformację można również zapisać:

𝑴 = [𝑹 𝟎 𝟎 1] gdzie:

𝑹 = [ 𝑎 𝑏

𝑐] [𝑎, 𝑏, 𝑐] (1 − cos 𝜑) + 𝚰 cos 𝜑 + [ 0 −𝑐 𝑏

𝑐 0 −𝑎

−𝑏 𝑎 0

] sin 𝜑

𝚰 - macierz jednostkowa

Zadanie

Wykonać pełny obrót ze skokiem co 10° punktu 𝑃 = (2, 2, 2) wokół osi wyznaczonej przez wektor 𝑎 = [2, 2, 1] i przechodzącej przez punkt 𝑆0 = (1, 1, 0). Narysować oś obrotu oraz wszystkie uzyskane punkty.

Wskazówki

a) Wektor 𝑎 = [2, 2, 1] należy unormować:

𝑛⃗ = 𝑎

‖𝑎 ‖= [23, 2 3, 13]

b) W celu skorzystania z podanej powyżej macierzy transformacji 𝑴 należy najpierw wykonać translację 𝑇𝑟 tak, aby punkt 𝑆0 znalazł się w początku układu współrzędnych, następnie wykonać właściwą transformację 𝑀, a na koniec translację odwrotną do translacji 𝑇𝑟. Transformacje można składać wykonując mnożenie macierzy transformacji:

𝑻 = 𝑻𝒓−1 𝑴 𝑻𝒓

(6)

6

c) Dla ułatwienia orientacji w trójwymiarowym układzie współrzędnych wyświetlanym w oknie graficznym można dodatkowo narysować wersory osi. Dla uproszczenia można pominąć groty strzałek i narysować tylko odcinki długości 1:

plot3([0 1], [0 0], [0 0], 'r'); % OX plot3([0 0], [0 1], [0 0], 'g') % OY plot3([0 0], [0 0], [0 1], 'b') % OZ

Cytaty

Powiązane dokumenty

Kolor brakuj cy dla wierzchołka v grafu G to kolor, który nie został przydzielony adnej kraw dzi incydentnej do v. M(v) oznacza zbiór wszystkich kolorów brakuj cych

(b) wszystkie wierzchołki dwudziestościanu foremnego leżą w pewnych trzech równo- ległych płaszczyznach.. (c) wszystkie wierzchołki dwunastościanu foremnego leżą w pewnych

(Zadanie Rafała Sroki) Dwudziestościan foremny można rozciąć na dwadzieścia jed- nakowych czworościanów (wierzchołkami każdego czworościanu są: środek dwudzie- stościanu i

Problemem, ominiętym nieco przez Tomka w jego prezentacji, jest to, że macierz sąsiedztwa może mieć wiele wartości własnych, a zatem i wektorów własnych.. Który z nich

Wyznaczanie macierzy odwrotnej.

[r]

Uniwersytet Warszawski Tematem tego artykułu jest mnożenie macierzy, ale zaczniemy od problemu nieco prostszego – mnożenia wielomianów.. Jako pierwszy zauważył to Anatolij

nych itq stycznq oo wykresu funkcji f(x\=* fi, o'ullu jest pl"ostopadta do prostej o równaniu fx 'y - 3 =