Vous êtes sur la page 1sur 13

"“Año de la consolidación del Mar de Grau”

Facultad de Ingeniería

Tema: Curvas de Bézier


Curso: Análisis Matemático II
Profesora: Leo Guerrero
Alumnos:
 Adrianzen Zurita Fátima
 García García Luis
 Macalupu Sandoval Cesar
 Palacios Vilchez Marco
Grupo: 16
Sección: “D”
Fecha: 30-03-2016
CURVAS DE BÉZIER
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
x = x0(1−t)3 + 3x1t(1−t)2 + 3x2t2(1−t) + x3t3,
y = y0(1−t)3 + 3y1t(1−t)2 + 3y2t2(1−t) + y3t3,

donde 0 ≤ t ≤ 1. Notar que cuando t = 0 tenemos (x,y) = (x 0,y0) y cuando t = 1 tenemos


(x,y) = (x3,y3), de modo que la curva comienza en P 0 y termina en P3. Teniendo en cuenta
los datos anteriores, procedemos al desarrollo del informe.
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 P0 P1, P1 P2 y P2
P3. 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.

CÓDIGOS (PYTHON):
# -*- coding: utf-8 -*-"""
''' el primer paso es importar las librerías como se trata de una gráfica de dos
dimensiones solo se necesitan dos librerías las cuales son numpy y matplorlib'''
'asignar numpy=np'
import numpy as np
import matplotlib.pyplot as plt
'''definimos las dimensiones que van a tener la figura resultante final es una proporción
no hay dimensiones exactas como centímetros o pulgadas, la primera dimensión se
refiere al ancho y la segunda dimensión el largo'''
'al mencionar plt llamamos a la libreria plt'
fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(111)
'''Esta línea es para determinar una gráfica dentro de la figura que establecimos en la
línea anterior'''
'''Radio del circulo que usaremos para un cicloide'''
'-en que intervalo voy a trabajar y en cuentas partes voy a dividir'
t = np.linspace(0, 1, 100)
''' Rango del ángulo de giro que usaremos para graficar el cicloide, la función tiene tres
argumentos o valores que deben incluirse el primero es el valor inicial, el segundo el
valor final y el tercero es la cantidad de divisiones'''
x = 4*(1-t)**3 + 84*t*(1-t)**2 +150*(t**2)*(1-t) + 40*(t**3)
'''Es el valor de x en función de t que es nuestro parámetro'''
y = 1*(1-t)**3 + 144*t*(1-t)**2 +126*(t**2)*(1-t) + 5*(t**3)
'''Es el valor de y en función de t'''
'top=no se va a ver la linea'
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
'''Estas líneas evitan que al lado derecho y en la parte superior se muestren los ejes
poniéndoles un color nulo'''
'bottom=al fondo'
'en el eje y los numeros van a estar a la izquierda'
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
'''Ubicamos los valores que aparecen en la recta debajo de la recta en el eje x y a la
izquierda en la recta del eje y'''
'''ax.spines['left'].set_position('center')'''
''' Ubicamos el eje y en el centro de la gráfica'''
ax.plot(x, y,'r',linewidth="2")
'''Definimos las coordenadas de la gráfica, el color que la línea va a tener y el ancho
de la línea'''
ax.set_xlim(0,50)
'''definimos los límites de la gráfica en el eje x'''
ax.set_ylim(0,50)
'''definimos los límites de la gráfica en el eje y'''
ax.set_xlabel('$eje x$',fontsize = 18) #Nombramos el eje X
ax.set_ylabel('$eje y$',fontsize = 18) #Nombramos el eje Y
'''definimos los puntos de control'''
'''Punto 0'''
x0 = 4
y0 = 1
'''Punto 1'''
x1 = 28
y1 = 48
'''Punto 2'''
x2 = 50
y2 = 42
'''Punto 3'''
x3 = 40
y3 = 5
verts = [(x0, y0),(x1, y1),(x2, y2),(x3,y3)]
xs, ys = zip(*verts)
'punto significa asterisco'
ax.plot(xs, ys, '.--', lw=2, color='orange', ms=18)
'lw grosor de linea, ms tamaño de los puntos'
ax.text(4, -0.04, 'P0')
ax.text(29, 48, 'P1')
ax.text(46, 47, 'P2')
ax.text(40, 8, 'P3')
plt.show()
GRÁFICA:
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í.

Evaluamos analíticamente: Caso 1

x = x0(1−t)3 + 3x1t(1−t)2 + 3x2t2(1−t) + x3t3,


y = y0(1−t)3 + 3y1t(1−t)2 + 3y2t2(1−t) + y3t3,

X’(t)= -90𝑡 2 -12t+72


Y’(t)= 66𝑡 2 -318t+141
Ahora evaluamos en t = 0
X’ (0) = 72
Y’ (0) = 141
Entonces la derivada de h’ (0) cuando t = 0
h’ (0) = (72,141)
Luego tomamos como referencia P0 = (4,1) como punto de paso de los dos puntos y
como vector dirección la derivada de tal manera que al multiplicarlo por un escalar
pueda formarse la ecuación de la recta que queremos.
L0 = (4,1) + c (72,141)
Le damos la forma: Y= mx +b
X=4+72c x4
C
72

x4
Y=1+141c y=1+141 ( )
72
Tenemos que:
141x 492
y 
72 72

Entonces luego de desarrollar de hallar un Y, podemos comprobar X remplazando el


primer punto de control en Y el cual es P1(28,48).

Remplazando x=28 en la ecuación dada tenemos que:


Y=47
Podemos concluir que la recta P0 si pasa por P1

Evaluamos analíticamente: Caso 2

x = x0(1−t)3 + 3x1t(1−t)2 + 3x2t2(1−t) + x3t3,


y = y0(1−t)3 + 3y1t(1−t)2 + 3y2t2(1−t) + y3t3,

X’(t)= -90𝑡 2 -12t+72


Y’(t)= 66𝑡 2 -318t+141
Ahora evaluamos en t = 0
X’ (0) = 72
Y’ (0) = 141
Entonces la derivada de h’ (0) cuando t = 0
h’ (0) = (72,141)
Luego tomamos como referencia P4 = (40,5) como punto de paso de los dos puntos y
como vector dirección la derivada de tal manera que al multiplicarlo por un escalar
pueda formarse la ecuación de la recta que queremos.
L0 = (40,5) + c (72,141)
Le damos la forma: Y=mx +b
X=40+72c x  40
C
72

x  40
Y=5+141c y=5+141 ( )
72
Tenemos que:
141x 5640
y 
72 72

Entonces luego de desarrollar de hallar un Y, podemos comprobar X remplazando el


primer punto de control en Y el cual es P2 (50,42)

Remplazando x = 50 en la ecuación dada tenemos que:


Y=15
Podemos concluir que la recta P3 si pasa por P2.

CÓDIGOS (PYTHON)
# -*- coding: utf-8 -*-
''' el primer paso es importar las librerías como se trata de una gráfica de dos
dimensiones solo se necesitan dos librerías las cuales son numpy y matplorlib'''
import numpy as np
import matplotlib.pyplot as plt
'''definimos las dimensiones que van a tener la figura resultante final es una proporción
no hay dimensiones exactas como centímetros o pulgadas, la primera dimensión se
refiere al ancho y la segunda dimensión el largo'''
fig=plt.figure(figsize=(10,5))
ax= fig.add_subplot(111)
t=np.linspace(0,1,100)
'''definimos los puntos de control'''
''' Punto 0'''
x0=4
y0=1
''' Punto 1 '''
x1=28
y1=48
'''Punto 2 '''
x2=50
y2=42
''' Punto 3 '''
x3=40
y3=5
verts= [(x0,y0),(x1,y1),(x2,y2),(x3,y3)]
xs,ys=zip(*verts)
ax.plot(xs,ys,'.-',lw=2, color='brown',ms=15)
ax.text(4.5,4,'P0')
ax.text(28,49, 'P1')
ax.text(47.5,41.7, 'P2')
ax.text(40.3,5, 'P3')
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)
t1=0
t2=1
mx0=-3*x0*((1-t1)**2)+3*x1*(((1-t1)**2)-(2*t1)*(1-t1))+3*x2*((2*t1)*(1-t1)-
(t1**2))+3*x3*(t1**2)
my0=-3*y0*((1-t1)**2)+3*y1*(((1-t1)**2)-(2*t1)*(1-t1))+3*y2*((2*t1)*(1-t1)-
(t1**2))+3*y3*(t1**2)
mx3=-3*x0*((1-t2)**2)+3*x1*(((1-t2)**2)-(2*t2)*(1-t2))+3*x2*((2*t2)*(1-t2)-
(t2**2))+3*x3*(t2**2)
my3=-3*y0*((1-t2)**2)+3*y1*(((1-t2)**2)-(2*t2)*(1-t2))+3*y2*((2*t2)*(1-t2)-
(t2**2))+3*y3*(t2**2)
r=np.linspace(-20,100,500)
tgx0=x0+r*mx0
tgy0=y0+r*my0
tgx3=x3+r*mx3
tgy3=y3+r*my3
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.plot(x,y,'-r',linewidth='2')
ax.plot(tgx0,tgy0,'-g',linewidth='2')
ax.plot(tgx3,tgy3,'-y',linewidth='2')
ax.set_xlim(3, 50)
ax.set_ylim(-2,49)
ax.set_xlabel('$x$',fontsize=18)
ax.set_ylabel('$y$',fontsize=18)
plt.show()
plt.savefig("UnirPuntos.pdf",format='pdf')
GRÁFICA:
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 de la parte 1
# -*- coding: utf-8 -*-"""
''' el primer paso es importar las librerías como se trata de una gráfica de dos
dimensiones solo se necesitan dos librerías las cuales son numpy y matplorlib'''
'asignar numpy=np'
import numpy as np
import matplotlib.pyplot as plt
'''definimos las dimensiones que van a tener la figura resultante final es una proporción
no hay dimensiones exactas como centímetros o pulgadas, la primera dimensión se
refiere al ancho y la segunda dimensión el largo'''
'al mencionar plt llamamos a la libreria plt'
fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(111)
'''Esta línea es para determinar una gráfica dentro de la figura que establecimos en la
línea anterior'''
'''Radio del circulo que usaremos para un cicloide'''
'-en que intervalo voy a trabajar y en cuentas partes voy a dividir'
t = np.linspace(0, 1, 100)
''' Rango del ángulo de giro que usaremos para graficar el cicloide, la función tiene tres
argumentos o valores que deben incluirse el primero es el valor inicial, el segundo el
valor final y el tercero es la cantidad de divisiones'''
x = 4*(1-t)**3 + 306*t*(1-t)**2 +150*(t**2)*(1-t) + 40*(t**3)
'''Es el valor de x en función de t que es nuestro parámetro'''
y = 1*(1-t)**3 + 129*t*(1-t)**2 +126*(t**2)*(1-t) + 5*(t**3)
'''Es el valor de y en función de t'''
'top=no se va a ver la linea'
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
'''Estas líneas evitan que al lado derecho y en la parte superior se muestren los ejes
poniéndoles un color nulo'''
'bottom=al fondo'
'en el eje y los numeros van a estar a la izquierda'
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
'''Ubicamos los valores que aparecen en la recta debajo de la recta en el eje x y a la
izquierda en la recta del eje y'''
'''ax.spines['left'].set_position('center')'''
''' Ubicamos el eje y en el centro de la gráfica'''
ax.plot(x, y,'r',linewidth="2")
'''Definimos las coordenadas de la gráfica, el color que la línea va a tener y el ancho
de la línea'''
ax.set_xlim(0,120)
'''definimos los límites de la gráfica en el eje x'''
ax.set_ylim(0,600)
'''definimos los límites de la gráfica en el eje y'''
ax.set_xlabel('$eje x$',fontsize = 18) #Nombramos el eje X
ax.set_ylabel('$eje y$',fontsize = 18) #Nombramos el eje Y
'''definimos los puntos de control'''
'''Punto 0'''
x0 = 4
y0 = 1
'''Punto 1, tenemos que cambiarlo porque asi nos pide el apartado'''
x1 = 102
y1 = 43
'''Punto 2'''
x2 = 60
y2 = 42
'''Punto 3'''
x3 = 40
y3 = 5
verts = [(x0, y0),(x1, y1),(x2, y2),(x3,y3)]
xs, ys = zip(*verts)
'punto significa asterisco'
ax.plot(xs, ys, '.--', lw=2, color='orange', ms=18)
'lw grosor de linea, ms tamaño de los puntos'
ax.text(4, -0.04, 'P0')
ax.text(104, 42, 'P1')
ax.text(46, 47, 'P2')
ax.text(40, 8, 'P3')
plt.show()

E) Algunas impresora láser utilizan curvas de Bézier para representar letras y


otros símbolos. Experimente con varios puntos de control hasta que se encuentre
una curva de Bézier que represente de manera razonable la letra C
# -*- coding: utf-8 -*-
''' el primer paso es importar las librerías como se trata de una gráfica de dos
dimensiones solo se necesitan dos librerías las cuales son numpy y matplorlib'''
import numpy as np
import matplotlib.pyplot as plt
'''definimos las dimensiones que van a tener la figura resultante final es una proporción
no hay dimensiones exactas como centímetros o pulgadas, la primera dimensión se
refiere al ancho y la segunda dimensión el largo'''
fig=plt.figure(figsize=(10,5))
ax= fig.add_subplot(111)
t=np.linspace(0,1,100)
''' probamos punto por punto hasta llegar a la forma C que nos piden'''
''' Punto 0'''
x0=33
y0=15
''' Punto 1 '''
x1=23
y1=5
'''Punto 2 '''
x2=23
y2=39
''' Punto 3 '''
x3=33
y3=31
verts= [(x0,y0),(x1,y1),(x2,y2),(x3,y3)]
xs,ys=zip(*verts)

ax.plot(xs,ys,'.--',lw=2, color='skyblue',ms=15)
ax.text(34,14,'P0')
ax.text(25,3, 'P1')
ax.text(26,43, 'P2')
ax.text(35,33, 'P3')

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.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.plot(x,y,'-r',linewidth='2')
ax.set_xlim(3, 52)
ax.set_ylim(-2,50)
ax.set_xlabel('$x$',fontsize=18)
ax.set_ylabel('$y$',fontsize=18)
plt.show()
plt.savefig("UnirPuntos.pdf",format='pdf')
GRAFICA:

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.

Vous aimerez peut-être aussi