Introducció
En aquest tema, explorarem els conceptes fonamentals de la realitat virtual (RV) i la realitat augmentada (RA), dues tecnologies que estan revolucionant la manera com interactuem amb el món digital. Aprendrem sobre les seves aplicacions, els principis matemàtics que les sustenten i com es poden implementar utilitzant àlgebra lineal i geometria 3D.
Conceptes Bàsics
Realitat Virtual (RV)
La realitat virtual és una tecnologia que permet crear entorns completament immersius en els quals els usuaris poden interactuar. Aquests entorns són generats per ordinador i poden simular experiències del món real o crear mons completament ficticis.
Realitat Augmentada (RA)
La realitat augmentada, en canvi, combina elements del món real amb elements generats per ordinador. Aquests elements virtuals es superposen a la visió del món real, enriquint l'experiència de l'usuari amb informació addicional.
Aplicacions de RV i RA
Aplicacions de la Realitat Virtual
- Videojocs: Creació d'entorns immersius per a jocs.
- Formació: Simulacions per a entrenament en sectors com la medicina, l'aviació, etc.
- Arquitectura: Visualització de projectes arquitectònics en 3D.
Aplicacions de la Realitat Augmentada
- Educació: Materials educatius interactius.
- Retail: Proves virtuals de productes.
- Manteniment i Reparació: Guies visuals per a la reparació d'equips.
Matemàtiques en RV i RA
Transformacions Lineals
Les transformacions lineals són fonamentals per a la manipulació d'objectes en RV i RA. Aquestes inclouen translacions, rotacions i escalats.
Matriu de Translació
\[
T = \begin{pmatrix}
1 & 0 & 0 & t_x
0 & 1 & 0 & t_y
0 & 0 & 1 & t_z
0 & 0 & 0 & 1
\end{pmatrix}
\]
Matriu de Rotació (al voltant de l'eix Z)
\[
R_z = \begin{pmatrix}
\cos(\theta) & -\sin(\theta) & 0 & 0
\sin(\theta) & \cos(\theta) & 0 & 0
0 & 0 & 1 & 0
0 & 0 & 0 & 1
\end{pmatrix}
\]
Matriu d'Escalat
\[
S = \begin{pmatrix}
s_x & 0 & 0 & 0
0 & s_y & 0 & 0
0 & 0 & s_z & 0
0 & 0 & 0 & 1
\end{pmatrix}
\]
Projeccions
Les projeccions són essencials per convertir coordenades 3D en coordenades 2D per a la visualització en pantalles.
Matriu de Projecció Perspectiva
\[
P = \begin{pmatrix}
\frac{1}{\tan(\frac{fov}{2})} & 0 & 0 & 0
0 & \frac{1}{\tan(\frac{fov}{2})} & 0 & 0
0 & 0 & \frac{far}{far - near} & \frac{-far \cdot near}{far - near}
0 & 0 & 1 & 0
\end{pmatrix}
\]
Implementació Pràctica
Exemple de Codi: Transformació i Projecció d'un Punt en 3D
import numpy as np # Definim un punt en 3D punt_3d = np.array([1, 2, 3, 1]) # Matriu de translació T = np.array([ [1, 0, 0, 1], [0, 1, 0, 2], [0, 0, 1, 3], [0, 0, 0, 1] ]) # Matriu de rotació al voltant de l'eix Z theta = np.radians(45) R_z = np.array([ [np.cos(theta), -np.sin(theta), 0, 0], [np.sin(theta), np.cos(theta), 0, 0], [0, 0, 1, 0], [0, 0, 0, 1] ]) # Matriu d'escalat S = np.array([ [2, 0, 0, 0], [0, 2, 0, 0], [0, 0, 2, 0], [0, 0, 0, 1] ]) # Matriu de projecció perspectiva fov = np.radians(90) near = 0.1 far = 100 P = np.array([ [1/np.tan(fov/2), 0, 0, 0], [0, 1/np.tan(fov/2), 0, 0], [0, 0, far/(far-near), -far*near/(far-near)], [0, 0, 1, 0] ]) # Aplicar les transformacions punt_transformat = T @ R_z @ S @ punt_3d # Aplicar la projecció punt_projectat = P @ punt_transformat # Normalitzar les coordenades homogènies punt_projectat /= punt_projectat[3] print("Punt projectat en 2D:", punt_projectat[:2])
Explicació del Codi
- Definició del Punt 3D: Comencem definint un punt en l'espai 3D.
- Matrius de Transformació: Definim les matrius de translació, rotació i escalat.
- Matriu de Projecció: Definim la matriu de projecció perspectiva.
- Aplicació de Transformacions: Apliquem les transformacions al punt 3D.
- Projecció del Punt: Projectem el punt transformat en 2D.
- Normalització: Normalitzem les coordenades homogènies per obtenir les coordenades 2D finals.
Exercici Pràctic
Exercici
Implementa un codi que prengui un conjunt de punts en 3D i els transformi i projecti en 2D utilitzant les matrius de transformació i projecció.
Solució
import numpy as np # Definim un conjunt de punts en 3D punts_3d = np.array([ [1, 2, 3, 1], [4, 5, 6, 1], [7, 8, 9, 1] ]) # Matriu de translació T = np.array([ [1, 0, 0, 1], [0, 1, 0, 2], [0, 0, 1, 3], [0, 0, 0, 1] ]) # Matriu de rotació al voltant de l'eix Z theta = np.radians(45) R_z = np.array([ [np.cos(theta), -np.sin(theta), 0, 0], [np.sin(theta), np.cos(theta), 0, 0], [0, 0, 1, 0], [0, 0, 0, 1] ]) # Matriu d'escalat S = np.array([ [2, 0, 0, 0], [0, 2, 0, 0], [0, 0, 2, 0], [0, 0, 0, 1] ]) # Matriu de projecció perspectiva fov = np.radians(90) near = 0.1 far = 100 P = np.array([ [1/np.tan(fov/2), 0, 0, 0], [0, 1/np.tan(fov/2), 0, 0], [0, 0, far/(far-near), -far*near/(far-near)], [0, 0, 1, 0] ]) # Aplicar les transformacions i projecció a cada punt punts_projectats = [] for punt in punts_3d: punt_transformat = T @ R_z @ S @ punt punt_projectat = P @ punt_transformat punt_projectat /= punt_projectat[3] punts_projectats.append(punt_projectat[:2]) print("Punts projectats en 2D:", punts_projectats)
Conclusió
En aquesta secció, hem après els conceptes bàsics de la realitat virtual i augmentada, les seves aplicacions i com les matemàtiques, especialment l'àlgebra lineal i la geometria 3D, són fonamentals per a la seva implementació. Hem vist exemples pràctics de com aplicar transformacions i projeccions a punts en 3D per obtenir les seves representacions en 2D. Aquests coneixements són essencials per a qualsevol professional que vulgui treballar en el camp de la RV i la RA.
Matemàtiques 3D
Mòdul 1: Fonaments d'Àlgebra Lineal
- Vectors i Espais Vectorials
- Matrius i Determinants
- Sistemes d'Equacions Lineals
- Autovalors i Autovectors
Mòdul 2: Transformacions Lineals
- Definició i Propietats
- Matrius de Transformació
- Rotacions, Translacions i Escalats
- Composició de Transformacions