In de 3-dimensionale ruimte kan een loodrechte projectie op een vlak (dit vlak bevat steeds het punt $$(0,0,0)$$) 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 $$\verb!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.

Argumenten

Een $$3 \times 3$$ projectiematrix als NumPy-matrix.

Resultaat

De kolomvector (als NumPy matrix) die de normaalvector op het projectievlak voorstelt. Hierbij zorg je ervoor dat:

Voorbeeld

P = np.matrix([[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]]