Diferencia entre revisiones de «Curvas de Bézier (Grupo 32)»

De MateWiki
Saltar a: navegación, buscar
(Circuito de Fórmula 1 descrito por una curva de Bézier)
(Circuito de Fórmula 1 descrito por una curva de Bézier)
 
(No se muestran 8 ediciones intermedias del mismo usuario)
Línea 384: Línea 384:
 
== Circuito de Fórmula 1 descrito por una curva de Bézier==
 
== Circuito de Fórmula 1 descrito por una curva de Bézier==
  
El piloto de un Ferrari F2004 quiere recorrer este tramo del circuito con una velocidad escalar constante v0. Para evitar salirse de la pista, la máxima que puede mantener el coche en cada punto del circuito debe ser tal que la fuerza centrípeta, dada escalarmente por <math>F_c=mκν^2</math>,esté contrarrestada por la fuerza de fricción, dada escalarmente por<math>F=μmg</math>. Donde m es la masa del Ferrari; κ es la curvatura de la pista; g es la aceleración de la gravedad; µ es el coeficiente de fricción entre los neumáticos y la pista, que es igual a 1.5
+
El piloto de un Ferrari F2004 quiere recorrer este tramo del circuito con una velocidad escalar constante v0. Para evitar salirse de la pista, la máxima que puede mantener el coche en cada punto del circuito debe ser tal que la fuerza centrípeta, dada escalarmente por <math>F_c=mκν^2</math>,esté contrarrestada por la fuerza de fricción, dada escalarmente por <math>F=μmg</math>. Donde m es la masa del Ferrari; κ es la curvatura de la pista; g es la aceleración de la gravedad; µ es el coeficiente de fricción entre los neumáticos y la pista, que es igual a 1.5
 
+
<br /><math>F_c≤F_{\text{fricción}}</math> <br />
 
Para que el coche no salga disparado de la pista la fuerza centrípeta debe ser menor o igual a la de fricción. Por ello al despejar la velocidad de la ecuación podemos hallar cual es la velocidad máxima a la que el vehículo debe ir para salirse del circuito. En este caso es la mínima de todo el circuito en su conjunto porque si se superase dicha velocidad en ese punto concreto saldría disparado. La velocidad máxima viene dada por el valor de la máxima curvatura del conjunto curvatura del conjunto.
 
Para que el coche no salga disparado de la pista la fuerza centrípeta debe ser menor o igual a la de fricción. Por ello al despejar la velocidad de la ecuación podemos hallar cual es la velocidad máxima a la que el vehículo debe ir para salirse del circuito. En este caso es la mínima de todo el circuito en su conjunto porque si se superase dicha velocidad en ese punto concreto saldría disparado. La velocidad máxima viene dada por el valor de la máxima curvatura del conjunto curvatura del conjunto.
  
 +
<math>ν_0≤\sqrt{\frac{μg}{κ_{\text{máximo}}}}</math> <br />
 +
 +
 +
La velocidad máxima a la que puede ir el vehículo es de 16.370875 m/s y viene marcada por la curvatura máxima 0.054850
 +
 +
{{matlab|codigo=
 
% Puntos de control en 3D
 
% Puntos de control en 3D
 
P0 = [0, 0,0];
 
P0 = [0, 0,0];
Línea 421: Línea 427:
 
Curvmax=max(curvatura);
 
Curvmax=max(curvatura);
 
fprintf('La velocidad máxima a la que puede ir el vehículo es de %f y viene marcada por la curvatura máxima %f ', Vcte, Curvmax);
 
fprintf('La velocidad máxima a la que puede ir el vehículo es de %f y viene marcada por la curvatura máxima %f ', Vcte, Curvmax);
 +
}}
 +
 +
Representación del vector velocidad y aceleración:
 +
[[Archivo:perro.png|400px|thumb|right|Vectores aceleración y velocidad]]
 +
{{matlab|codigo=
 +
 +
% Puntos de control en 3D
 +
P0 = [0, 0,0];
 +
P1 = [30, 50,5];
 +
P2 = [60, -30,-10];
 +
P3 = [100, 0,0];
 +
P = [P0; P1; P2; P3];
 +
% Parámetro t (de 0 a 1)
 +
n=50;
 +
t = linspace(0, 1, n);
 +
% 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
 +
dx= gradient(x, t);
 +
dy= gradient(y, t);
 +
dz= gradient(z, t);
 +
Ddx = gradient(dx, t);
 +
Ddy = gradient(dy, t);
 +
Ddz = gradient(dz, t);
 +
% Curvatura
 +
curvatura = sqrt((dy .* Ddz - dz .* Ddy).^2 + (dz .* Ddx - dx .* Ddz).^2 + (dx .* Ddy - dy .* Ddx).^2) ./sqrt(dx.^2 + dy.^2 + dz.^2).^3
 +
mu=1.5;
 +
g=9.8;
 +
V1=sqrt(mu*g./curvatura);
 +
Vcte=min(V1);
 +
Curvmax=max(curvatura);
 +
%Aceleración
 +
ac= (Vcte.^2).*curvatura;
 +
hold on
 +
s=ac-[x;y;z];
 +
j=Vcte.*ones(3,50)-[x;y;z];
 +
plot3(x,y,z,'b-', 'LineWidth', 2);
 +
quiver3(x, y,z, s(1, :), s(2, :),s(3, :), 0.5,'k');
 +
quiver3(x, y,z, j(1, :), j(2, :),j(3, :), 0.5,'r');
 +
grid on
 +
hold off
 
}}
 
}}
  

Revisión actual del 00:59 10 dic 2024

Trabajo realizado por estudiantes
Título Derformación plana. Grupo 32
Asignatura Teoría de Campos
Curso 2024-25
Autores Nombres: Rocío Jamileth Ruiz Herrera, Mario Del Amo Domínguez y Diana Estefanía Sagal Tituaña
Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura

Las cuervas de Bézier deben su nombre al ingeniero francés Pierre Bézier, quien las presentó en 1962 y posteriormente utilizó para el diseño de partes de automóviles para Renault. Actualmente, estas curvas son indispensables para la industria de la gráfica por computadora, el diseño industrial y la ingeniería, facilitando la creación de formas más fluidas y precisas.

Las curvas de Bézier de orden [math]n[/math] están definidas por los puntos de control [math]P_0,P_1,...,P_n[/math] y se pueden expresar mediante la siguiente fórmula:

[math] B(t)=\sum_{i=0}^n B_{i,n}(t) P_i\ [/math]

donde \(B_{i,n}(t)\) son los polinomios de Bernstein, dados por:

[math] B_{i,n}(t) = \binom{n}{i} t^i (1-t)^{n-i}\ [/math]

para \(t \in [0, 1]\), y donde \(\binom{n}{i}\) es el coeficiente binomial.

1 Representación de la curva de Bézier cúbica (n=3) junto con la curva poligonal que conecta los cuatro puntos coplanarios

Primero, seleccionamos cuatro puntos coplanarios cualesquiera. En este caso conseguimos los puntos coplanarios en el plano z=0 que posteriormente sustituiremos en la formula de Bézier:


[math] B(t) = (1-t)^3P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^3P_3, \; t \in [0,1] [/math]

Para mejor manejo de la fórmula la expresaremos por componentes en la base física cartesiana [x,y,z]:

[math] x(t) = (1 - t)^3 P_{0x} + 3(1 - t)^2 t P_{1x} + 3(1 - t) t^2 P_{2x} + t^3 P_{3x}[/math]

[math] y(t) = (1 - t)^3 P_{0y} + 3(1 - t)^2 t P_{1y} + 3(1 - t) t^2 P_{2y} + t^3 P_{3y}[/math]

[math] z(t) = (1 - t)^3 P_{0z} + 3(1 - t)^2 t P_{1z} + 3(1 - t) t^2 P_{2z} + t^3 P_{3z}.[/math]

Posteriormente elegimos los puntos coplanarios:
[math] P0=(0,0,0),P1=(1,2,0),P2=(4,3,0),P3=(3,0,0) [/math].

Tras sustituir los puntos en la fórmula obtenemos una gráfica en la que se puede observar la curva de Bézier de los cuatro puntos junto con la curva poligonal que une los puntos.

Curva de Bézier
%Puntos de control coplanarios
P0 = [0, 0,0];
P1 = [1, 2,0];
P2 = [4, 3,0];
P3 = [3, 0,0];
P = [P0; P1; P2; P3];
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);
% Representación gráfica
plot(x, y, 'b', 'LineWidth', 2); hold on;
plot(P(:, 1), P(:, 2), 'ro--', 'LineWidth', 1.5); 
% Polígono de control
legend('Curva de Bézier', 'Curva poligonal');
title('Curva de Bézier Cúbica');
axis equal;
grid on;
xlabel('Eje x'); ylabel('Eje y');


2 Representación del campo tangente [math]T(t)[/math] y del campo normal [math]N(t)[/math] en varios puntos de la curva

A continuación calcularemos el campo tangente y y el vector normal de la curva de Bézier. Para obtener la tangente debemos derivar la función y dividirla por su módulo:

[math]\mathbf{T}(t)= \frac{\frac{dB(t)}{dt} }{\|\frac{dB(t)}{dt}\|}[/math]

Para mejor manejo lo podemos expresar en la base física cartesiana[x,y]

[math] dx(t)/dt = -3(1-t)^2 x_0 + 3(1-t)^2 x_1 - 6t(1-t) x_1 + 6t(1-t) x_2 - 3t^2 x_2 + 3t^2 x_3 [/math]
[math] dy(t)/dt = -3(1-t)^2 y_0 + 3(1-t)^2 y_1 - 6t(1-t) y_1 + 6t(1-t) y_2 - 3t^2 y_2 + 3t^2 y_3 [/math]

Como el vector normal es ortogonal al vector tangencial, el campo normal lo obtenemos rotando 90º el vector normal:

[math]\mathbf{N}(t) ={[ -T_y(t), T_x(t)]}[/math]

Siendo [math]T_x(t)[/math] y [math]T_y(t)[/math] las derivadas q componen el campo tangente en la base física cartesiana.

Campo tangente y Campo normal
%Puntos de control coplanarios
P0 = [0, 0,0];
P1 = [1, 2,0];
P2 = [4, 3,0];
P3 = [3, 0,0];
P = [P0; P1; P2; P3];
t = linspace(0, 1, 30);
% 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
dx = gradient(x, t);
dy = gradient(y, t);
% Campo tangente
T = [dx; dy] ./ sqrt(dx.^2 + dy.^2);
% Campo normal
N = [-T(2, :); T(1, :)];
% Representación de los campos tangente y normal
hold on;
plot(x, y, 'b-', 'LineWidth', 2); 
quiver(x, y, T(1, :), T(2, :), 0.5,'k');
quiver(x, y, N(1, :), N(2, :), 0.5, 'r');
legend('Curva de Bézier', 'Campo Tangente', 'Campo Normal');
title('Campo Tangente y Campo Normal');
xlabel('Eje x'); ylabel('Eje y');
grid on;
hold off


3 Representación de la curvatura de la curva en función del parámetro t

La curvatura κ(t) de una curva, mide el grado de cambio en la orientación de la curva en cada punto. Es decir, indica cómo varía la dirección del vector tangente a medida que se avanza a lo largo de la curva, considerando una unidad de longitud en función del parámetro t.

La curvatura κ(t) de una curva parametrizada en el plano x(t) e y(t) se calcula con la siguiente fórmula:


[math] \kappa(t) = \frac{|x'(t)y''(t)-y'(t)x''(t)|}{((x'(t))^2 + (y'(t))^2)^\frac{3}{2}}[/math]

Donde:

x(t)y y(t) son las componentes x e y son las componentes de la curva en función del parámetro t.

x'(t)y y'(t) son las primeras derivadas de las componentes x(t) e y(t)

x(t)y y(t) son las segundas derivadas de las componentes x(t) e y(t)

Curvatura de la curva de Bézier
% Puntos coplanarios
P0 = [0, 0,0];
P1 = [1, 2,0];
P2 = [4, 3,0];
P3 = [3, 0,0];
t = linspace(0, 1, 50);% Parametro t (0,1)
% 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 curva de Bézier
dx = gradient(x, t);
dy = gradient(y, t);
% Vectores tangentes normalizados
T = [dx; dy] ./ sqrt(dx.^2 + dy.^2);
% Vectores perpendiculares al vector tangente(vector normal)
N = [-T(2, :); T(1, :)];
% segunda derivada de la curva
Ddx = gradient(dx, t); Ddy = gradient(dy, t);
% Curvatura
curva = abs(dx .* Ddy - dy .* Ddx) ./ (dx.^2 + dy.^2).^(3/2);
% Representar curvatura
figure;
plot(t, curva, 'b-', 'MarkerSize', 2);
title('Curvatura de la Curva de Bézier');
xlabel('t'); ylabel('k(t)');
grid on;

4 Representación de los vectores tangentes y normales junto con la circunferencia osculatriz asociada a cada punto de la curva

En este apartado se adjunta una animación en Matlab que representa la dinámica de los vectores tangente, normal y de la circunferencia osculatriz mientras se recorre la curva de Bézier. Se observa que el vector tangente indica la dirección de la curva en cada punto; el vector normal, perpendicular al vector tangente apunta hacia el centro de la curva. Por otro lado, la circunferencia osculatriz es el círculo que se ajusta de la mejor manera posible a una curva en un punto específico, de manera que tiene la misma dirección (tangente) y curvatura que la curva en ese punto. Primero obtenemos el vector tangente mediante la primera derivada y lo dividimos entre su módulo para hacerlo unitario mediante la fórmula:

[math]\mathbf{T}(t)= \frac{\frac{dB(t)}{dt} }{\|\frac{dB(t)}{dt}\|}[/math]

Posteriormente calculamos el vector normal, se puede calculara mediante la derivada segunda y dividirlo entre su módulo para hacerlo unitario o rotarlo 90º debido a que es ortogonal al vector tangente.

[math]\mathbf{N}(t)= \frac{\frac{d^2B(t)}{dt} }{\|\frac{d^2B(t)}{dt}\|}[/math]

o

[math]\mathbf{N}(t) ={[ -T_y(t), T_x(t)]}[/math]

Para obtener la circunferencia osculatriz debemos seguir la fórmula


[math] \kappa(t) = \frac{1}{R} [/math]


Despejando la R conseguimos un radio de curvatura para cada punto de la curva, siendo su curvatura:


[math] \kappa(t) = \frac{\|\mathbf{B}'(t) \times \mathbf{B}''(t)\|}{\|\mathbf{B}'(t)\|^3} [/math]


Para hallar el centro de la circunferencia para cada punto de la curva de Bézierdebemos seguir la dirección del vector normal una distancia R, mediante la fórmula:
[math]C(t) = B(t) + R·N(t)[/math]
Vectores tangenciales y normales. Circunferencia osculatriz
% Puntos coplanarios
P0 = [0, 0,0];
P1 = [1, 2,0];
P2 = [4, 3,0];
P3 = [3, 0,0];
t = linspace(0, 1, 50);% Parametro t (0,1)
% 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 curva de Bézier
dx = gradient(x, t);
dy = gradient(y, t);
% Vectores tangentes normalizados
T = [dx; dy] ./ sqrt(dx.^2 + dy.^2);
% Vectores perpendiculares al vector tangente(vector normal)
N = [-T(2, :); T(1, :)];
% segunda derivada de la curva
Ddx = gradient(dx, t); Ddy = gradient(dy, t);
% Curvatura
curva = abs(dx .* Ddy - dy .* Ddx) ./ (dx.^2 + dy.^2).^(3/2);
% Radio de curvatura
R = 1 ./ curva;
% Animación
for i = 1:length(t)
clf;%restablecer la figura
plot(x, y, 'k-', 'LineWidth', 2);
hold on
% Tangente
quiver(x(i), y(i), T(1, i), T(2, i), 0.5, 'b', 'LineWidth', 2);
% Normal
quiver(x(i), y(i), N(1, i), N(2, i), 0.5, 'g', 'LineWidth', 2);
% Circunferencia osculatriz
centro = [x(i), y(i)] + R(i) * N(:, i)';
theta = linspace(0, 2*pi, 100);
circx = centro(1) + R(i) * cos(theta);
circy = centro(2) + R(i) * sin(theta);
plot(circx, circy, 'c-');
title('Animación: Vectores y Circunferencia Osculatriz');
xlabel('x'); ylabel('y');
axis equal
grid on
pause(0.2);
end


5 Representación de la curva de Bézier tridimensional junto con su respectiva curva poligonal

Curvatura 3D

Dados los puntos, realizamos su animación 3D.

% Puntos de control en 3D
P0 = [0, 0,5];
P1 = [1, 2,3];
P2 = [4, 3,5];
P3 = [3, 0,6];
P = [P0; P1; P2; P3];
% 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 
hold on
% Curva de Bézier 
plot3(x,y,z, 'b-', 'LineWidth', 2);
 % Polígono de control
plot3(P(:,1), P(:,2), P(:,3), 'ro-', 'MarkerFaceColor', 'r');
title('Curva de Bézier');
xlabel('X'); ylabel('Y'); zlabel('Z');
grid on
hold off


6 Representación de la curvatura y torsión en función del parámetro t

En el espacio tridimensional, las características de una curva se definen en el espacio tridimensional, por dos factores principales, su curvatura k(t) y su torsión(t). La curvatura en un punto P de una curva da una medida de cuanto se tuerce una curva en ese punto.


[math] \kappa(t) = \frac{\|\mathbf{B}'(t) \times \mathbf{B}''(t)\|}{\|\mathbf{B}'(t)\|^3} [/math]


La torsión mide cuanto se separa la curva de vivir en un plano, es decir, el alabeo. Ambas son cantidades intrínsecas que no dependen de la trayectoria.


[math] \tau(t) = \frac{\mathbf{B}'(t)·[ \mathbf{B}''(t)\times \mathbf{B}'''(t)] }{|\mathbf{B}'(t) \times \mathbf{B}''(t)|^2} [/math]
Curvatura y torsión de la curva de Bézier
% Puntos de control en 3D
P0 = [0, 0,5];
P1 = [1, 2,3];
P2 = [4, 3,5];
P3 = [3, 0,6];
P = [P0; P1; P2; P3];
% 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);
Ddx = gradient(dx, t); Ddy = gradient(dy, t); Ddz = gradient(dz, t);
Dddx = gradient(Ddx, t); Dddy = gradient(Ddy, t); Dddz = gradient(Ddz, t);
% Curvatura
curvatura = sqrt((dy .* Ddz - dz .* Ddy).^2 + (dz .* Ddx - dx .* Ddz).^2 + (dx .* Ddy - dy .* Ddx).^2) ./sqrt(dx.^2 + dy.^2 + dz.^2).^3;
% Torsión
torsion =(dx .* (Ddy .* Dddz - Ddz .* Dddy) - dy .* (Ddx .* Dddz - Ddz .* Dddx) + dz .* (Ddx .* Dddy - Ddy .* Dddx))./((dy .* Ddz - dz .* Ddy).^2 + (dz .* Ddx - dx .* Ddz).^2 + (dx .* Ddy - dy .* Ddx).^2);

% Representación gráfica 
hold on
% Curva de Bézier 
plot3(x,y,z, 'b-', 'LineWidth', 2);
 % Polígono de control
plot3(P(:,1), P(:,2), P(:,3), 'ro-', 'MarkerFaceColor', 'r');
title('Curva de Bézier');
xlabel('X'); ylabel('Y'); zlabel('Z');
grid on
hold off
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, 'g-', 'LineWidth', 2);
title('Torsión de la Curva Bézier');
xlabel('t'); ylabel('\tau(t)');
grid on


7 Representación del triedro de Frenet a lo largo de la curva

El Triedro de Frente es el conjunto de tres vectores, y tiene la particularidad importante de que sus vectores van cambiando a medida que nos movemos sobre la curva. Estos vectores son: El vector que hace referencia al vector tangente a lo largo de la curva

[math]\mathbf{T}(t)= \frac{\frac{dB(t)}{dt} }{\|\frac{dB(t)}{dt}\|}[/math]


El vector normal a la curva, que es un vector intrínseco, es decir, independiente de la trayectoria, y apunta siempre hacia donde se tuerce la curva.

[math]\mathbf{N}(t)= \frac{\frac{d^2B(t)}{dt} }{\|\frac{d^2B(t)}{dt}\|}[/math]

Estos dos vectores permiten construir una base ortonormal orientada positivamente intrínseca en cada punto de la curva, es el caso del vector binormal, por lo que haciendo su producto vectorial lo hallamos.

Tiedro de Frenet: Vectores tangentes, normales y binormales
% Puntos de control en 3D
P0 = [0, 0,5];
P1 = [1, 2,3];
P2 = [4, 3,5];
P3 = [3, 0,6];
P = [P0; P1; P2; P3];
% 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
dx= gradient(x, t);
dy= gradient(y, t);
dz= gradient(z, t);
% Campo tangente
T = [dx;dy;dz] ./ sqrt(dx.^2 + dy.^2+dz.^2);

% segunda derivada de la curva
Ddx = gradient(dx, t); 
Ddy = gradient(dy, t);
Ddz = gradient(dz, t);
% Campo normal
N = [Ddx;Ddy;Ddz] ./ sqrt(Ddx.^2 + Ddy.^2+Ddz.^2);

%Campo binormal 
B=cross(T,N);
% Representación de los campos tangente, normal y binormal
% Curva de Bézier 
plot3(x,y,z, 'b-', 'LineWidth',2);
grid on
for i=1:length(t)
 clf
 hold on
plot3(x,y,z, 'b-', 'LineWidth', 2);
view([-75,15])
%Vectores tangencial, normal y binormal
quiver3(x(i),y(i),z(i),T(1, i),T(2, i),T(3, i ),0.8,'k');
quiver3(x(i), y(i),z(i), N(1,i), N(2,i), N(3,i), 0.8, 'r');
quiver3(x(i),y(i),z(i), B(1,i), B(2,i), B(3,i), 0.8, 'g');
legend('Curva de Bézier', 'Campo Tangente', 'Campo Normal','Campo Binormal');
title('Tiedro de Frenet');
xlabel('Eje x'); ylabel('Eje y');zlabel('Eje z');
grid on
axis equal
pause(0.2);
end
hold off


8 Circuito de Fórmula 1 descrito por una curva de Bézier

El piloto de un Ferrari F2004 quiere recorrer este tramo del circuito con una velocidad escalar constante v0. Para evitar salirse de la pista, la máxima que puede mantener el coche en cada punto del circuito debe ser tal que la fuerza centrípeta, dada escalarmente por [math]F_c=mκν^2[/math],esté contrarrestada por la fuerza de fricción, dada escalarmente por [math]F=μmg[/math]. Donde m es la masa del Ferrari; κ es la curvatura de la pista; g es la aceleración de la gravedad; µ es el coeficiente de fricción entre los neumáticos y la pista, que es igual a 1.5
[math]F_c≤F_{\text{fricción}}[/math]
Para que el coche no salga disparado de la pista la fuerza centrípeta debe ser menor o igual a la de fricción. Por ello al despejar la velocidad de la ecuación podemos hallar cual es la velocidad máxima a la que el vehículo debe ir para salirse del circuito. En este caso es la mínima de todo el circuito en su conjunto porque si se superase dicha velocidad en ese punto concreto saldría disparado. La velocidad máxima viene dada por el valor de la máxima curvatura del conjunto curvatura del conjunto.

[math]ν_0≤\sqrt{\frac{μg}{κ_{\text{máximo}}}}[/math]


La velocidad máxima a la que puede ir el vehículo es de 16.370875 m/s y viene marcada por la curvatura máxima 0.054850

% Puntos de control en 3D
P0 = [0, 0,0];
P1 = [30, 50,5];
P2 = [60, -30,-10];
P3 = [100, 0,0];
P = [P0; P1; P2; P3];
% Parámetro t (de 0 a 1)
n=50;
t = linspace(0, 1, n);
% 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
dx= gradient(x, t);
dy= gradient(y, t);
dz= gradient(z, t);
Ddx = gradient(dx, t); 
Ddy = gradient(dy, t); 
Ddz = gradient(dz, t);
% Curvatura
curvatura = sqrt((dy .* Ddz - dz .* Ddy).^2 + (dz .* Ddx - dx .* Ddz).^2 + (dx .* Ddy - dy .* Ddx).^2) ./sqrt(dx.^2 + dy.^2 + dz.^2).^3
mu=1.5;
g=9.8;
V1=sqrt(mu*g./curvatura);
Vcte=min(V1);
Curvmax=max(curvatura);
fprintf('La velocidad máxima a la que puede ir el vehículo es de %f y viene marcada por la curvatura máxima %f ', Vcte, Curvmax);


Representación del vector velocidad y aceleración:

Vectores aceleración y velocidad
% Puntos de control en 3D
P0 = [0, 0,0];
P1 = [30, 50,5];
P2 = [60, -30,-10];
P3 = [100, 0,0];
P = [P0; P1; P2; P3];
% Parámetro t (de 0 a 1)
n=50;
t = linspace(0, 1, n);
% 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
dx= gradient(x, t);
dy= gradient(y, t);
dz= gradient(z, t);
Ddx = gradient(dx, t); 
Ddy = gradient(dy, t); 
Ddz = gradient(dz, t);
% Curvatura
curvatura = sqrt((dy .* Ddz - dz .* Ddy).^2 + (dz .* Ddx - dx .* Ddz).^2 + (dx .* Ddy - dy .* Ddx).^2) ./sqrt(dx.^2 + dy.^2 + dz.^2).^3
mu=1.5;
g=9.8;
V1=sqrt(mu*g./curvatura);
Vcte=min(V1);
Curvmax=max(curvatura);
%Aceleración
ac= (Vcte.^2).*curvatura;
hold on
s=ac-[x;y;z];
j=Vcte.*ones(3,50)-[x;y;z];
plot3(x,y,z,'b-', 'LineWidth', 2);
quiver3(x, y,z, s(1, :), s(2, :),s(3, :), 0.5,'k');
quiver3(x, y,z, j(1, :), j(2, :),j(3, :), 0.5,'r');
grid on
hold off


9 Aplicaciones en la ingeniería de las curvas de Bézier

Las curvas de Bézier tienen amplias aplicaciones en ingeniería debido a su capacidad para representar trayectorias suaves y superficies complejas de forma precisa y eficiente. Como por ejemplo:


• Modelización de trayectorias, se utilizan para diseñar rutas suaves y precisas, ideales en sistemas automatizados.

-Automóviles autónomos: Ayudan a definir trayectorias suaves entre puntos de inicio y destino, adaptándose a entornos urbanos y carreteras.

-Robótica y drones: Las curvas de Bézier se emplean para planificar rutas evitando obstáculos, suavizando giros y minimizando cambios bruscos en la aceleración. Esto mejora la eficiencia energética y la seguridad.

• Fabricación automatizada

Las curvas de Bézier son esenciales en manufactura asistida por ordenador para describir trayectorias y formas complejas.

-Impresión 3D: Interpolan movimientos del cabezal impresor, garantizando una distribución uniforme del material en estructuras curvas.

-Corte por láser y fresado CNC: Se usan para generar trayectorias precisas de herramientas que crean piezas con contornos suaves.

• Diseño de moldes: En la industria automotriz, las carrocerías y moldes para piezas exteriores se diseñan con estas curvas, asegurando transiciones suaves que mejoran la estética y aerodinámica.

• Análisis y diseño de superficies complejas Son la base para crear superficies Bézier, fundamentales en diseño asistido por ordenador (CAD).

-Aeroespacial: Las alas de los aviones y carcasas de motores se modelan para optimizar el flujo aerodinámico y reducir la resistencia.

-Nautica: Los cascos de barcos se diseñan para maximizar la eficiencia hidrodinámica.

-'Gráficos por ordenador: Se usan en animación y videojuegos para modelar personajes, paisajes y vehículos con formas orgánicas detalladas.

• Diseño de infraestructuras civiles

En ingeniería civil, facilitan el diseño de trazados de carreteras y vías férreas.

-Ferrocarriles: Permiten definir curvas suaves que mejoran el confort de los conductores al evitar cambios bruscos de dirección y pendiente.

-Carreteras: Optimizan las transiciones entre líneas rectas y curvas, minimizando tensiones en las vías.