Diferencia entre revisiones de «Curvas de Bézier Grupo 2»
(→Representación de la curva de Bézier cúbica para n=3, junto con la curva poligonal que conecta cuatro puntos de control coplanarios.) |
(→Representación del campo tangente T(t) y del campo normal N(t) en varios puntos de la curva.) |
||
| Línea 65: | Línea 65: | ||
==Representación del campo tangente <math>T(t)</math> y del campo normal <math>N(t)</math> en varios puntos de la curva.== | ==Representación del campo tangente <math>T(t)</math> y del campo normal <math>N(t)</math> en varios puntos de la curva.== | ||
| + | |||
| + | En primer lugar | ||
| + | |||
| + | |||
| + | {{matlab|codigo= | ||
| + | % 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; | ||
| + | }} | ||
==Representación de la curvatura de la curva en función del parámetro <math>t</math>.== | ==Representación de la curvatura de la curva en función del parámetro <math>t</math>.== | ||
Revisión del 20:37 2 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.
En primer lugar
% 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;