Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Trabajo A2 Final
Trabajo A2 Final
Facultad de Ingeniería
Profesor:
Sección: “C”
Fecha: 30/03/2016
INTRODUCCIÓN
Las más importantes curvas que se usan actualmente en el diseño computacional son las
curvas de Bézier y los B-Splines. Es gracias al trabajo de dos matemáticos franceses,
Bézier y de Casteljau, que se desarrollan aplicaciones para el incipiente diseño
computacional de los años 60, bajo el alero de la industria automotriz.
El resultado son herramientas que los diseñadores ocupan regularmente, bajo el nombre
genérico de “trazados” o diseño vectorial, cuya matemática opera tras bambalinas con las
ideas que estos matemáticos franceses, y otros más, desarrollaron.
Una curva puede ser desdoblada en algunos puntos en dos curvas, o de manera arbitraria
en tantas curvas como se quieran, cada una de las cuales es una nueva curva de Bézier.
Algunas curvas que parecen simples, tales como una circunferencia, no pueden ser
descritas de manera exacta mediante curvas de Bézier o segmentos de esta clase de curvas
(por raro que parezca una curva formada a su vez por cuatro segmentos de curva puede
aproximarse a un círculo, con un error radial máximo menor de una parte por mil, en cada
punto de control interno la distancia es de manera horizontal o vertical de un punto
de control del exterior sobre el círculo unidad).
El problema general surge ante la necesidad trazar curvas con mucha precisión, para
lograr distintas piezas que puedan ensamblar correctamente.
Para ello, los diseñadores de la época solían ocupar procedimientos de dibujo, por
ejemplo, para trazar una aproximación de una curva que une dos puntos, usando las
llamadas reglas francesas, o bien curvaban listones para generar lo que ahora se denomina
“spline” (astilla, en inglés).
Pero de tal forma, no siempre se lograba la precisión necesaria; aunque ambos métodos
ahora tienen su equivalente computacional, respectivamente, las Curvas de Bézier y
las Splines, ambos elementos fundantes del diseño vectorial.
APLICACIÓN
CURVAS DE BEZIER
Las curvas de Bézier se utilizan en el diseño asistido por computadora y deben su nombre
al matemático francés Pierre Bézier (1910-1999), quien trabajó en la industria automotriz.
Una curva de Bézier cúbica está determinada por cuatro puntos de control, P0(x0, y0),
P1(x1, y1), P2(x2, y2), P3(x3, y3), y está definida por las ecuaciones paramétricas:
Donde 0 ≤ t ≤ 1. Notar que cuando t = 0 tenemos (x, y) = (x0, y0) y cuando t = 1 tenemos
(x, y) = (x3, y3), de modo que la curva comienza en P0 y termina en P3.
(a) Graficar la curva de Bézier con puntos de control P0 (4, 1), P1 (28, 48), P2 (50, 42) y
P3 (40, 5). Luego en la misma ventana dibuje los segmentos de recta P0P1, P1P2 y P2P3.
Notar que los puntos de control intermedios P1 y P2 no se encuentran en la curva; la curva
comienza en P0, se dirige hacia P1 y P2 sin alcanzarlos y termina en P3.
(b) En el dibujo de la parte 1 parece que la recta tangente en P0 pasa por P1 y la recta
tangente en P3 pasa por P2. Pruebe que esto es así.
(c) Encuentre la parametrización de la evoluta de la curva de Bézier dada y dibújela.
(d) Trate de producir una curva de Bézier con un bucle cambiando el segundo punto de
control en la parte 1.
(e) Algunas impresoras láser utilizan curvas de Bézier para representar letras y otros
símbolos. Experimente con varios puntos de control hasta que encuentre una curva de
Bézier ´ que represente de manera razonable la letra C.
(f) Se pueden representar formas más complicadas piezando dos o más curvas de Bézier.
´Suponga que la primera curva de Bézier tiene puntos de control ´ P0, P1, P2, P3 y la
segunda tiene puntos de control P3, P4, P5, P6. Si queremos unir estas dos partes
suavemente, entonces, las tangentes en P3 deben coincidir y por lo tanto, los puntos P2,
P3 y P4 tienen que estar sobre esta tangente común. Utilizando este principio, encuentre
puntos de control para un par de curvas de Bézier que representen la letra ´S´.
DESARROLLO DE LOS APARTADOS:
Códigos en Phyton:
import numpy as np
import matplotlib.pyplot as plt
x0 = 4.
y0 = 1.
x1 = 28.
y1 = 48.
x2 = 50.
y2 = 42.
x3 = 40.
y3 = 5
t = np.linspace(0,1,100)
b) Para comprobar si los puntos P1 y P2 pertenecen a las rectas tangentes a los puntos
extremos P0 y P3 respectivamente procedemos a hallar las ecuaciones de estas:
Entonces el punto de paso de la recta tangente será (4,1), P0 por lo tanto el vector
dirección será:
𝑥 ′ = −90(0)2 − 12(0) + 72 = 72
𝑦 ′ = 66(0)2 − 318(0) + 141 = 141
Entonces el punto de paso de la recta tangente será (40,5), P3 por lo tanto el vector
dirección será:
𝑥 ′ = −90(1)2 − 12(1) + 72 = -30
𝑦 ′ = 66(1)2 − 318(1) + 141 = -111
Finalmente obtenemos la recta tangente:
𝐿 = {(40 ,5) + 𝑘( 30, 111)}
Comprobamos que P2 pertenece a la recta tangente anterior igualando las componentes
x, y:
𝑥 = 40 + 30𝑘 = 50
𝑦 = 5 + 111𝑘 = 42
Siendo el mismo escalar k= 1/3, queda comprobado que P2 (50,42) pertenece a la recta
tangente que pasa por P3 (40,5).
Por lo que se demuestra que la recta tangente en P0 pasa por P1, y análogamente la recta
tangente en P3 pasa por P2.
C) Cálculo de la Evoluta:
Centro de Evoluta:
1
𝐶 = 𝐹(𝑡) + 𝑁𝑢
𝑘
Derivamos X:
X = 𝑋0 (1 − t)3 + 𝑋1 t(1 − t)2 + 𝑋2 t 2 (1 − t) + 𝑋3 t 3
Derivaremos por partes:
1) 𝑋0 (1 − t)3 => Derivando => 3𝑋0 (1 − t)2 (−1) = −3𝑋0 (1 − 2t + 𝑡 2 )
2) 3𝑋1 t(1 − t)2 => Derivando => 3𝑋1 [1(1 − 𝑡)2 + 𝑡2(1 − 𝑡)(−1)] = 3𝑋1 (3𝑡 2 −
4𝑡 + 1)
3) 3𝑋2 t 2 (1 − t) => Derivando => 3𝑋2 [2t(1 − t) + 𝑡 2 (−1)] = 3𝑋2 (2t − 3t 2 )
4) 𝑋3 t 3 = 3𝑋3 t 2
Derivamos X:
Y = 𝑌0 (1 − t)3 + 3𝑌1 (1 − t)2 + 3𝑌2 t 2 (1 − t) + 𝑌3 t 3
Derivaremos por partes:
5) 𝑌0 (1 − t)3 => Derivando => 3𝑌0 (1 − t)2 (−1) = −3𝑌0 (1 − 2t + 𝑡 2 )
6) 3𝑌1 t(1 − t)2 => Derivando => 3𝑌1 [1(1 − 𝑡)2 + 𝑡2(1 − 𝑡)(−1)] =
3𝑌1 (3𝑡 2 − 4𝑡 + 1)
7) 3𝑌2 t 2 (1 − t) => Derivando => 3𝑌2 [2t(1 − t) + 𝑡 2 (−1)] = 3𝑌2 (2t − 3t 2 )
8) 𝑌3 t 3 = 3𝑌3 t 2
1
K(t) = ∥𝐹′(𝑡)∥3 . ∥ 𝐹′(𝑡)𝑥𝐹′′(𝑡) ∥
Hallaremos ∥ 𝐹′(𝑡) ∥ :
𝐹 ′ (𝑡)𝑥 𝐹′′(𝑡) =
𝒾 𝒿 𝑘
∥ 𝐹 ′ (𝑡)𝑥 𝐹 ′′ (𝑡) ∥ =
Sabemos que:
𝐹 ′ (𝑡)𝑥𝐹 ′′ (𝑡) =
𝒾 𝒿 𝑘
0 0 −21204 + 34884𝑡
− 29412𝑡 2
𝑁𝑢𝑥
2989764 − 11661516 t + 16639668 𝑡 2 − 11655360 t 3 + 1941192 𝑡 4
=
√(1941192 t4 − 11655360 t3 + 16639668 t 2 − 11661516 t + 2989764)2 + (2647080 t 4 − 2786616 t 3 − 627912 t 2 + 2766096 t − 1526688)2
𝑁𝑢𝑦
−1526688 + 2766096 t − 627912 t 2 − 2786616 t 3 + 2647080 t 4
=
√(1941192 t 4 − 11655360 t 3 + 16639668 t 2 − 11661516 t + 2989764)2 + (2647080 t 4 − 2786616 t 3 − 627912 t 2 + 2766096 t − 1526688)2
x1 = 90.
y1 = 20.
x2 = 50.
y2 = 42.
x3 = 40.
y3 = 5.
e) comentario
Primer cambio:
import numpy as np
import matplotlib.pyplot as plt
x0 = 40.
y0 = 5.
x1 = 4.
y1 = 1.
x2 = 28.
y2 = 48.
x3 = 50.
y3 = 42.
x0 = 40.
y0 = 5.
x1 = 16.
y1 = 1.
x2 = 16.
y2 = 48.
x3 = 40.
y3 = 42.
fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
xs, ys = zip(*verts)
ax.plot(xs, ys, '.--', lw=2, color='blue', ms=15)
t = np.linspace(0,1,100)
x0 = 40.
y0 = 11.
x1 = 19.
y1 = 2.
x2 = 21.
y2 = 53.
x3 = 40.
y3 = 43.
fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
xs, ys = zip(*verts)
ax.plot(xs, ys, '.--', lw=2, color='blue', ms=15)
t = np.linspace(0,1,100)
import numpy as np
import matplotlib.pyplot as plt
x0 = 40.
y0 = 75.
x1 = 20.
y1 = 75.
x2 = 20.
y2 = 43.
x3 = 40.
y3 = 43.
x4 = 60
y4 = 43
x5 = 60
y5 = 11
x6 = 40
y6 = 11
verts = [(x0, y0),(x1, y1),(x2, y2),(x3,y3)]
verts2 = [(x3, y3),(x4, y4),(x5, y5),(x6,y6)]
fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
xs, ys = zip(*verts)
ax.plot(xs, ys, '.--', lw=2, color='blue', ms=15)
ws, zs = zip(*verts2)
ax.plot(ws, zs, '.--', lw=2, color='blue', ms=15)
t = np.linspace(0,1,100)