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

  1. Definició del Punt 3D: Comencem definint un punt en l'espai 3D.
  2. Matrius de Transformació: Definim les matrius de translació, rotació i escalat.
  3. Matriu de Projecció: Definim la matriu de projecció perspectiva.
  4. Aplicació de Transformacions: Apliquem les transformacions al punt 3D.
  5. Projecció del Punt: Projectem el punt transformat en 2D.
  6. 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.

© Copyright 2024. Tots els drets reservats