Está en la página 1de 23

Ao de la Consolidacin del Mar de Grau

Facultad de Ingeniera

Tema: Funciones Vectoriales de Variable Real.

Curso: Anlisis Matemtico II

Profesor:

Ing. Carlos Quispe

Alumnos: Carrasco Calle Renzo Alberto


Garcia Coronado Andrea Carolina
Morocho Adrianzen Favio Cesar
Vsquez Romero Ricardo Ral

Seccin: C

Fecha: 30/03/2016
INTRODUCCIN

Las ms importantes curvas que se usan actualmente en el diseo computacional son las
curvas de Bzier y los B-Splines. Es gracias al trabajo de dos matemticos franceses,
Bzier y de Casteljau, que se desarrollan aplicaciones para el incipiente diseo
computacional de los aos 60, bajo el alero de la industria automotriz.

El resultado son herramientas que los diseadores ocupan regularmente, bajo el nombre
genrico de trazados o diseo vectorial, cuya matemtica opera tras bambalinas con las
ideas que estos matemticos franceses, y otros ms, desarrollaron.

La curva de Bzier se encuentra en el interior de la envolvente convexa de los puntos de


control.
La curva de Bzier es infinitamente derivable.
El control de la curva es global. Modificar un punto de control implica modificar
completamente la curva.
Para efectuar una transformacin afn de la curva es suficiente efectuar la transformacin
sobre todos los puntos de control.
La curva comienza en el punto P0 y termina en el Pn. Esta peculiaridad es
llamada interpolacin del punto final.
La curva es un segmento recto si, y slo si, todos los puntos de control estn alineados.
El comienzo (final) de la curva es tangente a la primera (ltima) seccin del polgono de
Bzier.

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 Bzier.

Algunas curvas que parecen simples, tales como una circunferencia, no pueden ser
descritas de manera exacta mediante curvas de Bzier 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 crculo, con un error radial mximo 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 crculo unidad).

La curva compensada obtenida a partir de una curva de Bzier dada, frecuentemente


llamada curva compensada (falsa "paralela" a la curva original, como los rales en una
va de tren) no puede ser trazada de manera exacta mediante curvas de Bzier. De todas
formas hay mtodos heursticos que proporcionan, normalmente, una aproximacin
adecuada en algunos propsitos prcticos.

A fines de los cincuenta Pierre Bzier y Paul de Casteljau se dedicaban esencialmente a


los mismos problemas, ambos en la industria automotora (Renault y Citroen,
respectivamente), y como ha sucedido en otras ocasiones, llegan esencialmente al mismo
tipo de curvas, aunque con recursos matemticos distintos.

El problema general surge ante la necesidad trazar curvas con mucha precisin, para
lograr distintas piezas que puedan ensamblar correctamente.
Para ello, los diseadores de la poca solan ocupar procedimientos de dibujo, por
ejemplo, para trazar una aproximacin 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 ingls).
Pero de tal forma, no siempre se lograba la precisin necesaria; aunque ambos mtodos
ahora tienen su equivalente computacional, respectivamente, las Curvas de Bzier y
las Splines, ambos elementos fundantes del diseo vectorial.
APLICACIN

CURVAS DE BEZIER

Las curvas de Bzier se utilizan en el diseo asistido por computadora y deben su nombre
al matemtico francs Pierre Bzier (1910-1999), quien trabaj en la industria automotriz.
Una curva de Bzier cbica 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 paramtricas:

= 0 (1 )3 + 31 (1 )2 + 32 2 (1 ) + 3 3
= 0 (1 )3 + 31 (1 )2 + 32 2 (1 ) + 3 3

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 Bzier 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 parametrizacin de la evoluta de la curva de Bzier dada y dibjela.

(d) Trate de producir una curva de Bzier con un bucle cambiando el segundo punto de
control en la parte 1.

(e) Algunas impresoras lser utilizan curvas de Bzier para representar letras y otros
smbolos. Experimente con varios puntos de control hasta que encuentre una curva de
Bzier que represente de manera razonable la letra C.

(f) Se pueden representar formas ms complicadas piezando dos o ms curvas de Bzier.


Suponga que la primera curva de Bzier 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 comn. Utilizando este principio, encuentre
puntos de control para un par de curvas de Bzier que representen la letra S.
DESARROLLO DE LOS APARTADOS:

a) Las ecuaciones parametrizadas para una curva de Bzier son:

= 0 (1 )3 + 31 (1 )2 + 32 2 (1 ) + 3 3
= 0 (1 )3 + 31 (1 )2 + 32 2 (1 ) + 3 3
Donde 0 t 1. Nosotros estamos dando los puntos 0 (0, 0 ) = (4, 1),
1 (1, 1 ) = (28, 48), 2 (2, 2 ) = (50, 42), 3 (3, 3 ) = (40, 5).

Cdigos 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

verts = [(x0, y0),(x1, y1),(x2, y2),(x3,y3)]


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)

x = (x0 * (1-t)**3) + (3 * x1 * t * ((1-t)**2)) + (3 * x2 * (t**2) * (1-t)) + (x3 * (t**3))


y = (y0 * (1-t)**3) + (3 * y1 * t * ((1-t)**2)) + (3 * y2 * (t**2) * (1-t)) + (y3 * (t**3))
ax.plot(x, y, '-r', color='red', linewidth="2")

ax.text(1.5, 4., 'P0')


ax.text(26., 50., 'P1')
ax.text(52., 45., 'P2')
ax.text(37., 8., 'P3')
ax.set_xlim(-0.1, 60.)
ax.set_ylim(-0.1, 60.)
plt.show()
plt.savefig("UnirPuntos.png",format='png')

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:

= 4 (1 )3 + 3 28(1 )2 + 3 50 2 (1 ) + 40 3
= 90 2 12 + 72
= (1 )3 + 3 48(1 )2 + 3 42 2 (1 ) + 5 3
= 66 2 318 + 141
Sabiendo que en t=0:
= 4 (1 0)3 + 3 28(0)(1 0)2 + 3 50(0)2 (1 0) + 40(0)3 = 4
= (1 0)3 + 3 48(0)(1 (0))2 + 3 42(0)2 (1 (0)) + 5(0)3 = 1

Entonces el punto de paso de la recta tangente ser (4,1), P0 por lo tanto el vector
direccin ser:
= 90(0)2 12(0) + 72 = 72
= 66(0)2 318(0) + 141 = 141

Finalmente obtenemos la recta tangente:


L= {(4 , 1) + ( 72, 141)}
Comprobamos que P1 pertenece a la recta tangente anterior igualando las componentes
x, y:
= 4 + 72 = 28
= 1 + 141 = 48
Siendo el mismo escalar k= 1/3, queda comprobado que P1 pertenece a la recta tangente
que pasa por P0.
Igualmente trabajamos con el punto P3 para hallar su recta tangente:
Sabiendo que t=1
= 4 (1 1)3 + 3 28(1)(1 1)2 + 3 50(1)2 (1 1) + 40(1)3 = 40
= (1 1)3 + 3 48(1)(1 1)2 + 3 42(1)2 (1 1) + 5(1)3 = 5

Entonces el punto de paso de la recta tangente ser (40,5), P3 por lo tanto el vector
direccin 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 anlogamente la recta
tangente en P3 pasa por P2.

C) Clculo de la Evoluta:

Centro de Evoluta:
1
= () +

Nosotros ya tenemos el punto de paso o F(t), necesitamos la curvatura y el vector normal


unitario para hallar la evoluta.
Primero derivamos F(t) para los dems clculos:

X = 0 (1 t)3 + 31 t(1 t)2 + 32 t 2 (1 t) + 3 t 3 ;


() = [ ]
Y = 0 (1 t)3 + 31 (1 t)2 + 32 t 2 (1 t) + 3 t 3

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 => 30 (1 t)2 (1) = 30 (1 2t + 2 )
2) 31 t(1 t)2 => Derivando => 31 [1(1 )2 + 2(1 )(1)] = 31 (3 2
4 + 1)
3) 32 t 2 (1 t) => Derivando => 32 [2t(1 t) + 2 (1)] = 32 (2t 3t 2 )
4) 3 t 3 = 33 t 2

Derivamos X:
Y = 0 (1 t)3 + 31 (1 t)2 + 32 t 2 (1 t) + 3 t 3
Derivaremos por partes:
5) 0 (1 t)3 => Derivando => 30 (1 t)2 (1) = 30 (1 2t + 2 )
6) 31 t(1 t)2 => Derivando => 31 [1(1 )2 + 2(1 )(1)] =
31 (3 2 4 + 1)
7) 32 t 2 (1 t) => Derivando => 32 [2t(1 t) + 2 (1)] = 32 (2t 3t 2 )
8) 3 t 3 = 33 t 2

Nos dan los puntos: 0 = 4 ; 1 = 28 ; 2 = 50 ; 3 = 40 ; 0 = 1 ; 1 = 48 ; 2 = 42


; 3 = 5
Los reemplazamos en F(t):
X = 12(1 2t + 2 ) + 84(3 2 4 + 1) + 150(2t 3t 2 ) + 120t 2
X = (12 + 24t 12 2 ) + (252 2 336 + 84) + (300t 450t 2 ) + 120t 2
X = 90 2 12t + 72 . Derivamos X => X = 180t 12

Y = 3(1 2t + 2 ) + 144(3 2 4 + 1) + 126(2t 3t 2 ) + 15t 2


Y = (3 + 6t 3 2 ) + (432 2 576 + 144) + (252t 378t 2 ) + 15t 2
Y = 66 2 318t + 141 . Derivamos Y => Y = 132t 318

Entonces: F(t) = (90 2 12t + 72 ; 66 2 318t + 141)


F(t) = (180t 12 ; 132t 318)

Ahora comenzaremos con el clculo de la curvatura:

1
K(t) = ()3 . ()()

Hallaremos () :

() = (90 2 12t + 72)2 + (66 2 318t + 141)2


() = 31384 4 4424 3 + 1180 2 10156 + 2785

Hallamos () () :

() () =

90 2 12t + 72 66 2 318t + 141 0

180t 12 132t 318 0


() () =

() () =

() () = 21204 + 34884 29412 2

Ahora reemplazamos en la frmula de la curvatura:

21204 + 34884 29412 2


() =
(31384 4 4424 3 + 1180 2 10156 + 2785)3

684(31 + 51 43 2 )
() = 3
27(1384 4 4424 3 + 1180 2 10156 + 2785)2

76(31 + 51 43 2 )
() = 3
3(1384 4 4424 3 + 1180 2 10156 + 2785)2

Ahora necesitamos hallar el vector normal unitario:


( () ()) ()
Nu = ( () ()) ()

Sabemos que:
() () =

( () ()) () =

0 0 21204 + 34884
29412 2

90 2 12t + 72 66 2 318t + 141 0


( () ()) () =

( () ()) () =

((1941192 ^4 11655360 ^3 + 16639668 ^2 11661516 + 2989764)^2


+ (2647080 ^4 2786616 ^3 627912 ^2 + 2766096
1526688)^2 )
Ahora reemplazamos en la frmula del vector normal unitario:

(2989764 11661516 t + 16639668 2 11655360 t 3 + 1941192 4 , 1526688 + 2766096 t 627912 t 2 2786616 t 3 + 2647080 t 4 , 0)
=
(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


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

Luego de hallar Nu y la curvatura, podemos hallar la evoluta:


Evoluta:
() = [ 4(1 t)3 + 84t(1 t)2 + 150t 2 (1 t) + 40t 3 ; 1(1 t)3
+ 144(1 t)2 + 126t 2 (1 t) + 5t 3 ]
1
= () +

= 4(1 t)3 + 84t(1 t)2 + 150t 2 (1 t) + 40t 3
3
3(1384 4 4424 3 + 1180 2 10156 + 2785)2
+
76(31 + 51 43 2 )
= 1(1 t)3 + 144(1 t)2 + 126t 2 (1 t) + 5t 3
3
3(1384 4 4424 3 + 1180 2 10156 + 2785)2
+
76(31 + 51 43 2 )
d) Bucle:
comentario
import numpy as np
import matplotlib.pyplot as plt
x0 = 4.
y0 = 1.

x1 = 90.
y1 = 20.

x2 = 50.
y2 = 42.

x3 = 40.
y3 = 5.

verts = [(x0, y0),(x1, y1),(x2, y2),(x3,y3)]


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)

x = (x0 * (1-t)**3) + (3 * x1 * t * ((1-t)**2)) + (3 * x2 * (t**2) * (1-t)) + (x3 * (t**3))


y = (y0 * (1-t)**3) + (3 * y1 * t * ((1-t)**2)) + (3 * y2 * (t**2) * (1-t)) + (y3 * (t**3))

ax.plot(x, y, '-r', color='brown', linewidth="2")


ax.text(1.5, 4., 'P0')
ax.text(92., 22., 'P1')
ax.text(52., 45., 'P2')
ax.text(43., 6., 'P3')
ax.set_xlim(-0.1, 100.)
ax.set_ylim(-0.1, 60.)
plt.show()
plt.savefig("Bucle.png",format='png')

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.

verts = [(x0, y0),(x1, y1),(x2, y2),(x3,y3)]


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)
x = (x0 * (1-t)**3) + (3 * x1 * t * ((1-t)**2)) + (3 * x2 * (t**2) * (1-t)) + (x3 * (t**3))
y = (y0 * (1-t)**3) + (3 * y1 * t * ((1-t)**2)) + (3 * y2 * (t**2) * (1-t)) + (y3 * (t**3))
ax.plot(x, y, '-r', color='red', linewidth="2")
ax.text(1.5, 4., 'P1')
ax.text(26., 50., 'P2')
ax.text(52., 45., 'P3')
ax.text(37., 8., 'P0')
ax.set_xlim(-0.1, 60.)
ax.set_ylim(-0.1, 60.)
plt.show()
plt.savefig("FormandoC.png",format='png')
Segundo cambio:
import numpy as np
import matplotlib.pyplot as plt

x0 = 40.
y0 = 5.
x1 = 16.
y1 = 1.
x2 = 16.
y2 = 48.
x3 = 40.
y3 = 42.

verts = [(x0, y0),(x1, y1),(x2, y2),(x3,y3)]

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)

x = (x0 * (1-t)**3) + (3 * x1 * t * ((1-t)**2)) + (3 * x2 * (t**2) * (1-t)) + (x3 * (t**3))


y = (y0 * (1-t)**3) + (3 * y1 * t * ((1-t)**2)) + (3 * y2 * (t**2) * (1-t)) + (y3 * (t**3))
ax.plot(x, y, '-r', color='red', linewidth="2")
ax.text(13, 4., 'P1')
ax.text(13., 50., 'P2')
ax.text(42., 45., 'P3')
ax.text(37., 8., 'P0')
ax.set_xlim(-0.1, 60.)
ax.set_ylim(-0.1, 60.)
plt.show()
plt.savefig("FormandoC.png",format='png')
Tercer cambio:
import numpy as np
import matplotlib.pyplot as plt

x0 = 40.
y0 = 11.
x1 = 19.
y1 = 2.
x2 = 21.
y2 = 53.
x3 = 40.
y3 = 43.

verts = [(x0, y0),(x1, y1),(x2, y2),(x3,y3)]

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)

x = (x0 * (1-t)**3) + (3 * x1 * t * ((1-t)**2)) + (3 * x2 * (t**2) * (1-t)) + (x3 * (t**3))


y = (y0 * (1-t)**3) + (3 * y1 * t * ((1-t)**2)) + (3 * y2 * (t**2) * (1-t)) + (y3 * (t**3))

ax.plot(x, y, '-r', color='red', linewidth="2")


ax.text(16, 4., 'P1')
ax.text(22., 53., 'P2')
ax.text(43., 45., 'P3')
ax.text(42., 8., 'P0')
ax.set_xlim(-0.1, 60.)
ax.set_ylim(-0.1, 60.)
plt.show()
plt.savefig("FormandoC.png",format='png')
f) Nuestro punto de partida, ser la posicin final de la curva en el ejercicio anterior.
Primer cambio:
Para este primer cambio utilizaremos la reflexin respecto de un punto (simetra central)
en este caso P3. Modificamos la curva y creamos otra curva con sentido contrario a la
primera que tenga como punto de inicio el punto P3 y como punto final el punto P6
(reflexin del punto P0 sobre P3. Del mismo modo los puntos de control para la nueva
curva P4 y P6 se obtienen al aplicar una reflexin:
Cdigos en Phyton:

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)

x = (x0 * (1-t)**3) + (3 * x1 * t * ((1-t)**2)) + (3 * x2 * (t**2) * (1-t)) + (x3 * (t**3))


y = (y0 * (1-t)**3) + (3 * y1 * t * ((1-t)**2)) + (3 * y2 * (t**2) * (1-t)) + (y3 * (t**3))
w = (x3 * (1-t)**3) + (3 * x4 * t * ((1-t)**2)) + (3 * x5 * (t**2) * (1-t)) + (x6 * (t**3))
z = (y3 * (1-t)**3) + (3 * y3 * t * ((1-t)**2)) + (3 * y5 * (t**2) * (1-t)) + (y6 * (t**3))

ax.plot(x, y, '-r', color='red', linewidth="2")


ax.plot(w, z, '-r', color='red', linewidth="2")
ax.text(40, 78., 'P0')
ax.text(20., 78., 'P1')
ax.text(21.5, 45., 'P2')
ax.text(40., 45., 'P3')
ax.text(60., 45., 'P4')
ax.text(61.5, 13., 'P5')
ax.text(40., 13., 'P6')
ax.set_xlim(-0.1, 70.)
ax.set_ylim(-0.1, 90.)
plt.show()
plt.savefig("FormandoS1.png",format='png')
Segundo cambio:
Modificamos la ubicacin de los puntos para darle a la curva una forma ms alargada y
por tanto ms parecida a la letra S.

También podría gustarte