Curvas de Bezier Grupo 17
Las curvas de Bézier llevan el nombre del ingeniero francés Pierre Bézier, quien las publicó en 1962 y, posteriormente, trabajando en Renault, las utilizó ampliamente en el diseño de las distintas partes del automóvil. Hoy en día, estas curvas se han convertido en un estándar en la industria de la gráfica por computadora, el diseño industrial y la ingeniería, permitiendo crear formas fluidas y precisas. Las curvas de Bézier de orden n están definidas por los puntos de control P0,P1,...,Pn y se pueden expresar mediante la siguiente fórmula:
donde los coeficientes \(B_{i,n}(t)\) son los polinomios de Bernstein, dados por:
para \(t \in [0, 1]\), y donde \(\binom{n}{i}\) es el coeficiente binomial.
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Curvas de Bézier. Grupo 17 |
| Asignatura | Teoría de Campos |
| Curso | 2024-25 |
| Autores | Alejandra García-Agulló Canle Álvaro Román Aguilera Fernando Barbancho Lara Jaime García Alegre |
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Contenido
- 1 Curva de Bézier cúbica (n=3)
- 2 Campo tangente T(t) y campo normal N(t)
- 3 Curvatura de la Curva de Bézier
- 4 Vector tangente, vector normal y circunferencia osculatriz asociado a la curva de Beizer
- 5 Curva de Bézier tridimensional y curva poligonal
- 6 Gráficas de curvatura y de torsión
- 7 Triedo de Frenet a lo largo de la curva
- 8 Velocidad que debe mantener el Ferrari
- 9 Condición para evitar que el coche se deslice
- 10 Paso 1: Simplificación de la ecuación
1 Curva de Bézier cúbica (n=3)
Una curva de Bézier cúbica es un caso especial de las curvas de Bézier que utiliza 4 puntos de control (P0, P1, P2, P3).
O la podemos expresar por componentes en la base física cartesiana [math]
\left[ \mathbf{x}, \mathbf{y}, \mathbf{z} \right]
[/math] de la forma:
A la hora de elegir los puntos coplanarios, hemos elegido los siguientes puntos:
Estos puntos son coplanarios en el plazo z=0 y además tienen características que permiten visualizar una curva de Bézier cúbica con una forma interesante, sin complicaciones en la implementación.
Para verificar que son coplanarios, podemos ver que los puntos se encuentran en el plano z=0 (es decir, sus coordenadas z son todas 0).
Esto garantiza que están en el mismo plano OXY, lo cual satisface la condición de coplanaridad de forma trivial.
% Puntos de control coplanares
P0 = [0, 0,0];
P1 = [1, 2,0];
P2 = [3, 3,0];
P3 = [4, 0,0];
% Parámetro t (de 0 a 1)
t = linspace(0, 1, 50);
% Polinomios de Bernstein
B0 = (1 - t).^3;
B1 = 3 * t .* (1 - t).^2;
B2 = 3 * t.^2 .* (1 - t);
B3 = t.^3;
% Coordenadas de la curva de Bézier
x = B0 * P0(1) + B1 * P1(1) + B2 * P2(1) + B3 * P3(1);
y = B0 * P0(2) + B1 * P1(2) + B2 * P2(2) + B3 * P3(2);
% Representación gráfica
figure;
plot(x, y, 'b-', 'LineWidth', 2); hold on;
plot([P0(1) P1(1) P2(1) P3(1)], [P0(2) P1(2) P2(2) P3(2)], 'ro--');
legend('Curva de Bézier', 'Curva poligonal');
title('Curva de Bézier Cúbica');
xlabel('x'); ylabel('y');
grid on;
2 Campo tangente T(t) y campo normal N(t)
El análisis de las propiedades locales de una curva es fundamental en aplicaciones como la dinámica y la simulación. En este apartado, se calcularán y visualizarán el campo tangente T(t) y el campo normal N(t) en varios puntos de la curva de Bézier, mostrando cómo varían a lo largo de la trayectoria.
El campo tangente sirve para ver como un objeto se va a mover siguiendo la dirección de la curva, y determinar la dirección de un punto cuando la curva es una trayectoria.
También expresada en los componentes [math] \left[ \mathbf{x}, \mathbf{y}\right] [/math]
El campo normal servirá para diseñar caminos suaves y evitar cambios bruscos en la trayectoria.
siendo [math]T_x(t)[/math] y [math]T_y(t)[/math] los componentes x e y del vector T(t) de forma que se expresan de la forma:
El gráfico del campo de vectores normal y tangente nos permite visualizar como van variando estos vectores a lo largo de la trayectoria de la curva de bézier
% Puntos de control coplanares
P0 = [0, 0,0];
P1 = [1, 2,0];
P2 = [3, 3,0];
P3 = [4, 0,0];
% Parámetro t (de 0 a 1)
t = linspace(0, 1, 50);
% Polinomios de Bernstein
B0 = (1 - t).^3;
B1 = 3 * t .* (1 - t).^2;
B2 = 3 * t.^2 .* (1 - t);
B3 = t.^3;
% Coordenadas de la curva de Bézier
x = B0 * P0(1) + B1 * P1(1) + B2 * P2(1) + B3 * P3(1);
y = B0 * P0(2) + B1 * P1(2) + B2 * P2(2) + B3 * P3(2);
% Derivadas de la curva de Bézier
dx = gradient(x, t);
dy = gradient(y, t);
% Vectores tangentes normalizados
T = [dx; dy] ./ sqrt(dx.^2 + dy.^2);
% Vectores normales (perpendiculares al tangente)
N = [-T(2, :); T(1, :)];
% Representar la curva con campos tangente y normal
figure;
plot(x, y, 'b-', 'LineWidth', 2); hold on;
quiver(x, y, T(1, :), T(2, :), 0.5, 'r'); % Campo tangente
quiver(x, y, N(1, :), N(2, :), 0.5, 'g'); % Campo normal
legend('Curva de Bézier', 'Campo Tangente', 'Campo Normal');
title('Campo Tangente y Normal de la Curva de Bézier');
xlabel('x'); ylabel('y');
grid on;
El campo tangente está formado por líneas que siguen la dirección de la curva en cada punto, indicando cómo se orienta y mueve la curva a medida que avanzamos a lo largo de ella. Es esencial para entender la variación de la dirección de la curva y calcular propiedades como la curvatura.
El campo normal es perpendicular al campo tangente en cada punto y se orienta ortogonalmente a la curva. Este campo es clave para analizar la curvatura, ya que describe cómo la curva se "dobla".
Ambos campos, tangente y normal, son fundamentales para comprender la geometría y el comportamiento local de la curva.
3 Curvatura de la Curva de Bézier
La curvatura \( \kappa(t) \) de una curva mide el cambio de dirección del vector tangente por unidad de longitud en función del parámetro 𝑡.
Este concepto describe cómo cambia la dirección de la curva en cada punto.
En este apartado, se calculará y representará gráficamente la curvatura de la curva de Bézier planteada previamente, analizando su geometría local. Esto permitirá identificar puntos clave, como los de máxima y mínima curvatura, y optimizar el diseño de la curva.
El estudio de la curvatura es fundamental en aplicaciones prácticas, especialmente en la ingeniería de caminos. Por ejemplo, en el diseño de carreteras, este análisis ayuda a lograr un equilibrio entre suavidad y eficiencia, reduciendo la curvatura en puntos críticos. De esta manera, se mejora tanto la seguridad como la comodidad del usuario.
La curvatura se calcula a través de la siguiente fórmula:
para ello necesitaremos las derivadas primeras de la curva parametrizada (ya calculadas en el apartado anterior) y las segundas derivadas, que si la expresamos por componentes [math]
\left[ \mathbf{x}, \mathbf{y}\right]
[/math] nos queda:
Para la componente \( x(t) \):
Para la componente \( y(t) \):
% Puntos de control coplanares
P0 = [0, 0,0];
P1 = [1, 2,0];
P2 = [3, 3,0];
P3 = [4, 0,0];
% Parámetro t (de 0 a 1)
t = linspace(0, 1, 50);
% Polinomios de Bernstein
B0 = (1 - t).^3;
B1 = 3 * t .* (1 - t).^2;
B2 = 3 * t.^2 .* (1 - t);
B3 = t.^3;
% Coordenadas de la curva de Bézier
x = B0 * P0(1) + B1 * P1(1) + B2 * P2(1) + B3 * P3(1);
y = B0 * P0(2) + B1 * P1(2) + B2 * P2(2) + B3 * P3(2);
% Derivadas de la curva de Bézier
dx = gradient(x, t);
dy = gradient(y, t);
% Vectores tangentes normalizados
T = [dx; dy] ./ sqrt(dx.^2 + dy.^2);
% Vectores normales (perpendiculares al tangente)
N = [-T(2, :); T(1, :)];
% Segunda derivada de la curva
d2x = gradient(dx, t);
d2y = gradient(dy, t);
% Curvatura
curvatura = abs(dx .* d2y - dy .* d2x) ./ (dx.^2 + dy.^2).^(3/2);
% Representar curvatura
figure;
plot(t, curvatura, 'm-', 'LineWidth', 2);
title('Curvatura de la Curva de Bézier');
xlabel('t'); ylabel('\kappa(t)');
grid on;
4 Vector tangente, vector normal y circunferencia osculatriz asociado a la curva de Beizer
La representación dinámica de los vectores tangente, normal y de la circunferencia osculatriz permite entender mejor las propiedades geométricas de una curva. Este apartado incluye la creación de una animación en MATLAB que visualiza estos elementos mientras se recorre la curva de Bézier.
La tangente indica la dirección de la curva en cada punto; el vector normal es perpendicular al tangente y apunta hacia el centro de la curva; la circunferencia osculatriz es el circulo que mejor aproxima la curva en un punto dado.
Una curva [math] \gamma(t) = (x(t),y(t)) [/math] está parametrizada por longitud de arco si [math] x′(t)^2 + y′(t)^2 = 1 [/math] para todo t.
Si la curva no está parametrizada por longitud de arco, [math] \vec t(t) [/math] se calculará de la siguiente manera:
Dada una parametrización γ(t) definimos la circunferencia osculatriz en
γ(t) como aquella determinada por:
Recordad que una circunferencia de radio R y centro Q = (Qx, Qy) se puede parametrizar como:
La relación entre la curvatura de una curva κ(t) y el radio de la circunferencia osculatriz R(t) es inversa. Es por eso, que se puede observar que en los puntos con menos curvatura como el (0,0) y el (0,4), que coinciden con los puntos inicial y final, son los puntos que mayor radio en la circunferencia osculatriz tienen.
% Puntos de control coplanares
P0 = [0, 0,0];
P1 = [1, 2,0];
P2 = [3, 3,0];
P3 = [4, 0,0];
% Parámetro t (de 0 a 1)
t = linspace(0, 1, 100);
% Polinomios de Bernstein
B0 = (1 - t).^3;
B1 = 3 * t .* (1 - t).^2;
B2 = 3 * t.^2 .* (1 - t);
B3 = t.^3;
% Coordenadas de la curva de Bézier
x = B0 * P0(1) + B1 * P1(1) + B2 * P2(1) + B3 * P3(1);
y = B0 * P0(2) + B1 * P1(2) + B2 * P2(2) + B3 * P3(2);
% Derivadas de la curva de Bézier
dx = gradient(x, t);
dy = gradient(y, t);
% Vectores tangentes normalizados
T = [dx; dy] ./ sqrt(dx.^2 + dy.^2);
% Vectores normales (perpendiculares al tangente)
N = [-T(2, :); T(1, :)];
% Segunda derivada de la curva
d2x = gradient(dx, t);
d2y = gradient(dy, t);
% Curvatura
curvatura = abs(dx .* d2y - dy .* d2x) ./ (dx.^2 + dy.^2).^(3/2);
% Radio de curvatura
R = 1 ./ curvatura;
% Animación
figure;
for i = 1:length(t)
clf;
plot(x, y, 'b-', 'LineWidth', 2); hold on;
quiver(x(i), y(i), T(1, i), T(2, i), 0.5, 'r', 'LineWidth', 1.5); % Tangente
quiver(x(i), y(i), N(1, i), N(2, i), 0.5, 'g', 'LineWidth', 1.5); % Normal
% Circunferencia osculatriz
center = [x(i), y(i)] + R(i) * N(:, i)';
theta = linspace(0, 2*pi, 100);
circle_x = center(1) + R(i) * cos(theta);
circle_y = center(2) + R(i) * sin(theta);
plot(circle_x, circle_y, 'm--');
title('Animación: Vectores y Circunferencia Osculatriz');
xlabel('x'); ylabel('y');
axis equal; grid on;
pause(0.1);
end
5 Curva de Bézier tridimensional y curva poligonal
Las curvas de Bézier pueden extenderse al espacio tridimensional para modelar trayectorias más complejas. En este contexto, representaremos una curva de Bézier tridimensional generada a partir de cuatro puntos de control no coplanares, junto con la curva poligonal asociada.
El objetivo sigue siendo el mismo que en dos dimensiones: suavizar la trayectoria de la curva y minimizar los cambios bruscos en su curvatura. Sin embargo, al trabajar en tres dimensiones, las aplicaciones son mucho más amplias, permitiendo modelar superficies y estructuras complejas. Estas curvas se utilizan ampliamente en ingeniería, diseño y gráficos por computadora para crear modelos tridimensionales, como automóviles, piezas industriales y otros objetos con formas detalladas.
La curva se define en términos de sus componentes cartesianos [math] \left[ \mathbf{x}, \mathbf{y}, \mathbf{z} \right] [/math], mediante la fórmula de Bézier cúbica:
% Puntos de control en 3D
P0 = [0, 0, 0];
P1 = [10, 20, 5];
P2 = [20, -10, 15];
P3 = [30, 0, 0];
% Parámetro t (de 0 a 1)
t = linspace(0, 1, 50);
% Polinomios de Bernstein
B0 = (1 - t).^3;
B1 = 3 * t .* (1 - t).^2;
B2 = 3 * t.^2 .* (1 - t);
B3 = t.^3;
% Coordenadas de la curva
x = B0 * P0(1) + B1 * P1(1) + B2 * P2(1) + B3 * P3(1);
y = B0 * P0(2) + B1 * P1(2) + B2 * P2(2) + B3 * P3(2);
z = B0 * P0(3) + B1 * P1(3) + B2 * P2(3) + B3 * P3(3);
% Representación gráfica
figure;
plot3(x, y, z, 'b-', 'LineWidth', 2); hold on;
plot3([P0(1) P1(1) P2(1) P3(1)], [P0(2) P1(2) P2(2) P3(2)], [P0(3) P1(3) P2(3) P3(3)], 'ro--');
legend('Curva de Bézier', 'Curva Poligonal');
title('Curva de Bézier Tridimensional');
xlabel('x'); ylabel('y'); zlabel('z');
grid on; axis equal;
Se puede apreciar claramente el propósito de las curvas de Bézier: suavizar la trayectoria al pasar por los puntos de control.
En este caso, la curva resultante muestra cómo se genera una transición suave entre los cuatro puntos dados, minimizando cambios bruscos y creando un recorrido continuo y elegante.
Este efecto es esencial en aplicaciones donde la fluidez y la precisión son clave, como en el diseño de trayectorias, superficies y modelos tridimensionales.
6 Gráficas de curvatura y de torsión
En el espacio tridimensional, las propiedades locales de una curva están determinadas por su Curvatura [math]\kappa(t)[/math] y torsión [math]\tau(t)[/math].
En este apartado, se calcularán ambas magnitudes y se representarán gráficamente como funciones del parámetro t.
[math]\kappa(t) = \frac{\| \mathbf{r}'(t) \times \mathbf{r}''(t) \|}{\| \mathbf{r}'(t) \|^3}[/math]
[math]\tau(t) = \frac{\det\left(\mathbf{r}'(t), \mathbf{r}''(t), \mathbf{r}'''(t)\right)}{\|\mathbf{r}'(t)\|^2 \|\mathbf{r}'(t) \times \mathbf{r}''(t)\|}[/math]
% Puntos de control en 3D
P0 = [0, 0, 0];
P1 = [10, 20, 5];
P2 = [20, -10, 15];
P3 = [30, 0, 0];
% Parámetro t (de 0 a 1)
t = linspace(0, 1, 50);
% Polinomios de Bernstein
B0 = (1 - t).^3;
B1 = 3 * t .* (1 - t).^2;
B2 = 3 * t.^2 .* (1 - t);
B3 = t.^3;
% Coordenadas de la curva
x = B0 * P0(1) + B1 * P1(1) + B2 * P2(1) + B3 * P3(1);
y = B0 * P0(2) + B1 * P1(2) + B2 * P2(2) + B3 * P3(2);
z = B0 * P0(3) + B1 * P1(3) + B2 * P2(3) + B3 * P3(3);
% Derivadas de la curva tridimensional
dx = gradient(x, t); dy = gradient(y, t); dz = gradient(z, t);
d2x = gradient(dx, t); d2y = gradient(dy, t); d2z = gradient(dz, t);
d3x = gradient(d2x, t); d3y = gradient(d2y, t); d3z = gradient(d2z, t);
% Curvatura (en 3D)
curvatura = sqrt((dy .* d2z - dz .* d2y).^2 + (dz .* d2x - dx .* d2z).^2 + (dx .* d2y - dy .* d2x).^2) ./ ...
(sqrt(dx.^2 + dy.^2 + dz.^2).^3);
% Torsión
numerador = (dx .* (d2y .* d3z - d2z .* d3y) - dy .* (d2x .* d3z - d2z .* d3x) + dz .* (d2x .* d3y - d2y .* d3x));
denominador = (dx.^2 + dy.^2 + dz.^2) .* curvatura.^2;
torsion = numerador ./ denominador;
% Representación gráfica
figure;
subplot(2, 1, 1);
plot(t, curvatura, 'b-', 'LineWidth', 2);
title('Curvatura de la Curva Bézier');
xlabel('t'); ylabel('\kappa(t)');
grid on;
subplot(2, 1, 2);
plot(t, torsion, 'r-', 'LineWidth', 2);
title('Torsión de la Curva Bézier');
xlabel('t'); ylabel('\tau(t)');
grid on;
7 Triedo de Frenet a lo largo de la curva
El triedro de Frenet, formado por los vectores tangente, normal y binormal, describe completamente la geometría local de una curva en 3D. En este apartado, se creará una animación que muestra cómo evoluciona este triedro a lo largo de la curva.
La curva de Bézier se forma mediante la utilización de puntos de control y polinomios de Bernstein que se encargan de conectar suavemente esos puntos para establecer una ruta específica. Del mismo modo que surge esta curva característica también se define el triedro de Bézier en los siguientes términos:
1) La tangente (𝑇) indica la orientación de la curva en cualquier punto dado y se determinada mediante la derivada de la posición respecto al parámetro que define la curva y luego normalizada para obtener un vector unitario.
2) La normal (N) indica la variación en la dirección de la tangente a lo largo de la curva al calcular y normalizar el vector derivado de la tangente para describir los cambios locales en la curva.
3) La binormal (Bi) es el vector que es perpendicular tanto al vector tangente como al normal de la curva en un punto dado, y se obtiene mediante el producto cruz de estos dos vectores para formar parte del sistema de referencia ortonormal asociado.
% Puntos de control en 3D
P0 = [0, 0, 0];
P1 = [10, 20, 5];
P2 = [20, -10, 15];
P3 = [30, 0, 0];
% Parámetro t
t = linspace(0, 1, 100);
% Polinomios de Bernstein
B0 = (1 - t).^3;
B1 = 3 * t .* (1 - t).^2;
B2 = 3 * t.^2 .* (1 - t);
B3 = t.^3;
% Coordenadas de la curva
x = B0 * P0(1) + B1 * P1(1) + B2 * P2(1) + B3 * P3(1);
y = B0 * P0(2) + B1 * P1(2) + B2 * P2(2) + B3 * P3(2);
z = B0 * P0(3) + B1 * P1(3) + B2 * P2(3) + B3 * P3(3);
% Derivadas de la curva
dx = gradient(x, t); % Primera derivada
dy = gradient(y, t);
dz = gradient(z, t);
d2x = gradient(dx, t); % Segunda derivada
d2y = gradient(dy, t);
d2z = gradient(dz, t);
% Tangente (T)
T = [dx; dy; dz];
T = T ./ vecnorm(T); % Normalización
% Normal (N)
dT = gradient(T, t, 2); % Derivada del vector tangente
N = dT ./ vecnorm(dT); % Normalización
% Binormal (B)
B = cross(T, N); % Producto cruz entre T y N
% Animación del triedro de Frenet
figure;
for i = 1:length(t)
clf; % Limpia la figura en cada iteración
% Curva de Bézier
plot3(x, y, z, 'b-', 'LineWidth', 2); hold on;
% Triedro de Frenet
quiver3(x(i), y(i), z(i), T(1, i), T(2, i), T(3, i), 5, 'r', 'LineWidth', 1.5); % Tangente
quiver3(x(i), y(i), z(i), N(1, i), N(2, i), N(3, i), 5, 'g', 'LineWidth', 1.5); % Normal
quiver3(x(i), y(i), z(i), B(1, i), B(2, i), B(3, i), 5, 'k', 'LineWidth', 1.5); % Binormal
% Estilizado del gráfico
title('Triedro de Frenet');
xlabel('x'); ylabel('y'); zlabel('z');
legend('Curva Bézier', 'Tangente (T)', 'Normal (N)', 'Binormal (B)');
grid on; axis equal;
view(3); % Vista 3D
pause(0.1);
end
8 Velocidad que debe mantener el Ferrari
Comenzando con el cálculo, necesitamos primero establecer un equilibrio de fuerzas para que el ferrari no se salga de la pista: La condición es que la **fuerza centrípeta** que mantiene al Ferrari en la curva debe estar equilibrada por la **fuerza de fricción** que impide que el coche se deslice fuera de la pista.
9 Condición para evitar que el coche se deslice
Para que el coche no se salga de la pista, la **fuerza centrípeta** debe ser **menor o igual** a la **fuerza de fricción**, es decir:
\[ F_c \leq F_{\text{fricción}} \]
Sustituyendo las ecuaciones de \( F_c \) y \( F_{\text{fricción}} \):
\[ m \kappa v_0^2 \leq \mu m g \]
10 Paso 1: Simplificación de la ecuación
La masa \( m \) aparece en ambos lados de la ecuación, por lo que se cancela:
\[ \kappa v_0^2 \leq \mu g \]
Este es el primer paso para encontrar la **velocidad máxima** \( v_0 \). Como ves, ya hemos establecido la relación entre la **curvatura** \( \kappa \) y la **velocidad** \( v_0 \), bajo la condición de que la **fuerza centrípeta** no supere la **fuerza de fricción**.
10.1 Vector velocidad y vector aceleración centrípeta
10.2 Aplicaciones de las curvas de Bézier en la ingeniería
Las curvas de Bézier tienen aplicaciones significativas en diversas áreas de la ingeniería debido a su versatilidad y precisión para modelar trayectorias, superficies y diseños complejos. Algunos aspectos importantes en los que se usan estas curvas son los siguientes:
1. Modelización de trayectorias: En robótica, las curvas de Bézier se utilizan para planificar trayectorias suaves y precisas para robots móviles. Estas curvas permiten que los robots eviten obstáculos y se desplacen de forma eficiente en entornos dinámicos. Por ejemplo, se han implementado en robots autónomos para diseñar trayectorias tridimensionales optimizadas, facilitando tareas como la interceptación de objetos móviles o la navegación en espacios restringidos.
2.Fabricación automatizada: En procesos de manufactura, como el corte con láser o fresado, las curvas de Bézier son fundamentales para programar movimientos precisos de herramientas. Estas curvas aseguran acabados suaves en piezas complejas, reduciendo errores y tiempos de producción. En la industria automotriz, se emplearon inicialmente para diseñar carrocerías, como en Citroën, demostrando su utilidad en la creación de formas aerodinámicas y estéticamente agradables.
3.Análisis de superficies complejas: En diseño aeronáutico y naval, estas curvas ayudan a modelar superficies complejas como fuselajes y cascos de barcos. Su capacidad para interpolar puntos de control permite optimizar diseños que deben cumplir con rigurosos estándares aerodinámicos o hidrodinámicos. Por ejemplo, herramientas de diseño asistido por computadora (CAD) utilizan curvas y superficies de Bézier para ajustar modelos tridimensionales de alta precisión.
En general, las curvas de Bézier son esenciales en cualquier aplicación que requiera modelar formas suaves y controladas, desde gráficos computacionales hasta la ingeniería civil y la animación digital.