Diferencia entre revisiones de «Curvas de Bézier Grupo 2»
(→Representación del campo tangente T(t) y del campo normal N(t) en varios puntos de la curva.) |
(→Representación del campo tangente T(t) y del campo normal N(t) en varios puntos de la curva.) |
||
| Línea 76: | Línea 76: | ||
<center> <math> B'_{i,3}(t) = \binom{3}{i} [it^{i-1} (1-t)^{3-i} - (3-i)t^i (1-t)^{2-i}]\ </math> </center> | <center> <math> B'_{i,3}(t) = \binom{3}{i} [it^{i-1} (1-t)^{3-i} - (3-i)t^i (1-t)^{2-i}]\ </math> </center> | ||
| + | |||
| + | El vector tangente se obtiene normalizando la derivada: | ||
| + | |||
| + | <center> <math>T(t)=\frac{B'(t)}{||B'(t)||} </math> </center> | ||
Revisión del 12:03 3 dic 2024
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Curvas de Bézier (Grupo 2) |
| Asignatura | Teoría de Campos |
| Curso | 2024-25 |
| Autores | Marta Escaso Camacho Maximiliano Rodríguez Ruiz Beatrice Laval González Alejandro Villaverde Carrascosa Daniel Pérez Cámara |
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Las curvas de Bézier son un sistema que se desarrolló sobre 1960 para el diseño aeronáutico, el trazado de dibujos técnicos y el diseño de automóviles. Fueron ideadas por el ingeniero francés Pierre Bézier y posteriormente desarrolladas por Paul de Casteljau. 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 [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:
donde \(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.
Contenido
- 1 Representación de la curva de Bézier cúbica para [math]n=3[/math], junto con la curva poligonal que conecta cuatro puntos de control coplanarios.
- 2 Representación del campo tangente [math]T(t)[/math] y del campo normal [math]N(t)[/math] en varios puntos de la curva.
- 3 Representación de la curvatura de la curva en función del parámetro [math]t[/math].
- 4 Animación del vector tangente, el vector normal y la circunferencia osculatriz asociados a cada punto de la curva de Bézier.
- 5 Representación de la curva de Bézier tridimensional, junto con la curva poligonal que conecta los cuatro puntos que están en el espacio tridimensional y no pertenecen al mismo plano.
- 6 Representación de los gráficos de la curvatura y de la torsión como funciones del parámetro [math]t[/math].
- 7 Animación que representa el triedro de Frenet que se mueve a lo largo de la curva.
- 8 Aplicación de una curva de Bézier al tramo de un circuito de [math]F_1[/math].
- 9 Aplicaciones de las curvas de Bézier en la ingeniería.
1 Representación de la curva de Bézier cúbica para [math]n=3[/math], junto con la curva poligonal que conecta cuatro puntos de control coplanarios.
En primer lugar seleccionamos cuatro puntos de control coplanarios ([math]P_0,P_1,P_2,P_3[/math]). Definimos la fórmula de la curva cúbica en Matlab usando los polinomios de Bernstein y los coeficientes binomiales. La imagen representa la gráfica de la curva de Bézier y la poligonal de control. Se puede observar cómo los puntos de control influyen en la forma de la curva, lo que nos permite adaptarla a distintas aplicaciones.
% Selección de puntos de control coplanarios
P0 = [0, 0];
P1 = [4, 2];
P2 = [0, 2];
P3 = [4, 4];
n = 3; % Orden de la curva de Bézier
% Vector de puntos de control
P = [P0; P1; P2; P3];
% Puntos para la curva de Bézier
numPuntos = 100;
t = linspace(0, 1, numPuntos); % Valores de t entre 0 y 1
B = zeros(numPuntos, 2); % Inicializar B con la matriz nula
% Cálculo de la curva usando la fórmula
for i = 0:n
% Coeficiente binomial
coefBin = nchoosek(n, i);
% Polinomio de Bernstein
Bernstein = coefBin * (t.^i) .* ((1-t).^(n-i));
% Curva de Bézier
B = B + Bernstein' * P(i+1, :);
end
% Graficar la curva y la poligonal de control
figure;
hold on;
plot(P(:, 1), P(:, 2), 'bo--', 'LineWidth', 1.5); % Poligonal de control
plot(B(:, 1), B(:, 2), 'r-', 'LineWidth', 2.5); % Curva Bézier
% Se pone título a la gráfica
title('Curva de Bézier cúbica');
% Se pone nombre a los ejes
xlabel('Eje x');
ylabel('Eje y');
legend('Poligonal de control', 'Curva Bézier');
grid on;
hold off;
2 Representación del campo tangente [math]T(t)[/math] y del campo normal [math]N(t)[/math] en varios puntos de la curva.
- Cálculo del Vector Tangente [math]T(t)[/math]:
El vector tangente [math]T(t)[/math] es la derivada de la curva \(B(t)\) respecto al parámetro [math]t[/math]:
donde la derivada del polinomio de Bernstein es:
El vector tangente se obtiene normalizando la derivada:
% Vector de puntos de control coplanarios
P = [0, 0; 4, 2; 0, 2; 4, 4];
n = 3; % Orden de la curva de Bézier
% Puntos para la curva de Bézier
numPuntos = 100;
t = linspace(0, 1, numPuntos); % Valores de t entre 0 y 1
B = zeros(numPuntos, 2); % Inicializar B con la matriz nula
dB = zeros(numPuntos, 2); % Derivada de la curva
% Cálculo de la curva y derivada
for i = 0:n
coefBin = nchoosek(n, i); % Coeficiente binomial
Bernstein = coefBin * (t.^i) .* ((1-t).^(n-i)); % Polinomio de Bernstein
BernsteinDerivada = coefBin * (i * t.^(i-1) .* (1-t).^(n-i) - (n-i) * t.^i .* (1-t).^(n-i-1)); % Derivada
B = B + Bernstein' * P(i+1, :); % Curva de Bézier
dB = dB + BernsteinDerivada' * P(i+1, :); % Derivada
end
% Obtenemos el vector tangente
T = dB ./ vecnorm(dB, 2, 2);
% Calculamos el vector normal
N = [-T(:, 2), T(:, 1)]; % Rotación de 90°
% Puntos de la curva para dibujar vectores tangentes y normales
indices = round(linspace(1, numPuntos, 12)); % Seleccionamos 12 puntos
% Graficar la curva y la poligonal de control
figure;
hold on;
plot(P(:, 1), P(:, 2), 'bo--', 'LineWidth', 1.5); % Poligonal de control
plot(B(:, 1), B(:, 2), 'r-', 'LineWidth', 2.5); % Curva Bézier
% Graficar vectores tangentes y normales
quiver(B(indices, 1), B(indices, 2), T(indices, 1), T(indices, 2), 0.3, 'g', 'LineWidth', 1); % Tangentes (en verde)
quiver(B(indices, 1), B(indices, 2), N(indices, 1), N(indices, 2), 0.3, 'm', 'LineWidth', 1); % Normales (en magenta)
title('Campos tangente y normal');
xlabel('Eje x');
ylabel('Eje y');
legend('Poligonal de control', 'Curva Bézier', 'Tangentes', 'Normales');
grid on;
hold off;