In de 3-dimensionale ruimte kan een loodrechte projectie op een vlak dat het punt $$(0,0,0)$$ bevat
door een reële ($$3 \times 3$$) projectiematrix $$\mathbf{P}$$ voorgesteld worden, zodat de projectie van
het punt $$R$$ (met coördinaten $$(x,y,z)$$) gegeven wordt door het vermenigvuldigen van de matrix $$\mathbf{P}$$
en de kolommatrix die de coördinaten van het te projecteren punt bevat, namelijk
$$
\mathbf{P}
\left(
\begin{array}{c}
x\\
y\\
z\\
\end{array} \right)
$$
Anderzijds wordt een loodrechte projectie ook gekenmerkt door een normaalvector op het projectievlak.
In deze oefening schrijven we een functie projectievlak()
, die van een gegeven projectiematrix
$$\mathbf{P}$$ een normaalvector van het projectievlak als resultaat teruggeeft als kolomvector.
Om de ricthtingsvectoren van het projectievlak te vinden, zoeken we twee (lineair onafhankelijke)
eigenvectoren van $$\mathbf{P}$$ met eigenwaarde 1 (punten gelegen in het projectievlak zelf blijven
immers ongewijzigd door de projectie). Noemen we die eigenvectoren $$\vec{u}$$ en $$\vec{v}$$ , dan wordt
een normaalvector $$\vec{n}$$ op het projectievlak gegeven door
$$
\vec{n}=\vec{u} \times \vec{v}
$$
Je mag veronderstellen dat de argumentmatrix $$\mathbf{P}$$ inderdaad een reële projectiematix voorstelt
(m.a.w. $$\mathbf{P}$$ is een reëele $$3 \times 3$$ matrix met een 2-voudige eigenwaarde gelijk aan 1).
TIP: gebruik de functie $$\verb!numpy.cross()!$$ om het kruisproduct van vectoren te berekenen.
Een $$3 \times 3$$ projectiematrix voorgesteld door een twee-dimensionale NumPy-tabel.
De kolomvector (als NumPy-rij) die de normaalvector op het projectievlak voorstelt. Hierbij zorg je ervoor dat:
P = np.array([[0.982532751091703, 0.0, 0.13100436681222707], [0.0, 1.0, 0.0], [0.13100436681222707, 0.0, 0.017467248908296984]]) projectievlak(P) # [0.13216372009101798, 0.0, -0.9912279006826347]