Está en la página 1de 23

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

Facultad de Ingeniería

Tema: Funciones Vectoriales de Variable Real.

Curso: Análisis Matemático II

Profesor:

 Ing. Carlos Quispe

Alumnos: Carrasco Calle Renzo Alberto


Garcia Coronado Andrea Carolina
Morocho Adrianzen Favio Cesar
Vásquez Romero Ricardo Raúl

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.

La curva de Bézier se encuentra en el interior de la envolvente convexa de los puntos de


control.
La curva de Bézier es infinitamente derivable.
El control de la curva es global. Modificar un punto de control implica modificar
completamente la curva.
Para efectuar una transformación afín de la curva es suficiente efectuar la transformación
sobre todos los puntos de control.
La curva comienza en el punto P0 y termina en el Pn. Esta peculiaridad es
llamada interpolación del punto final.
La curva es un segmento recto si, y sólo si, todos los puntos de control están alineados.
El comienzo (final) de la curva es tangente a la primera (última) sección del polígono de
Bézier.

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

La curva compensada obtenida a partir de una curva de Bézier dada, frecuentemente


llamada curva compensada (falsa "paralela" a la curva original, como los raíles en una
vía de tren) no puede ser trazada de manera exacta mediante curvas de Bézier. De todas
formas hay métodos heurísticos que proporcionan, normalmente, una aproximación
adecuada en algunos propósitos prácticos.

A fines de los cincuenta Pierre Bézier 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 matemáticos distintos.

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:

𝑥 = 𝑥0 (1 − 𝑡)3 + 3𝑥1 𝑡(1 − 𝑡)2 + 3𝑥2 𝑡 2 (1 − 𝑡) + 𝑥3 𝑡 3


𝑦 = 𝑦0 (1 − 𝑡)3 + 3𝑦1 𝑡(1 − 𝑡)2 + 3𝑦2 𝑡 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 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:

a) Las ecuaciones parametrizadas para una curva de Bézier son:

𝑥 = 𝑥0 (1 − 𝑡)3 + 3𝑥1 𝑡(1 − 𝑡)2 + 3𝑥2 𝑡 2 (1 − 𝑡) + 𝑥3 𝑡 3


𝑦 = 𝑦0 (1 − 𝑡)3 + 3𝑦1 𝑡(1 − 𝑡)2 + 3𝑦2 𝑡 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).

 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

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
dirección 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
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
𝐶 = 𝐹(𝑡) + 𝑁𝑢
𝑘

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 demás cálculos:

X = 𝑋0 (1 − t)3 + 3𝑋1 t(1 − t)2 + 3𝑋2 t 2 (1 − t) + 𝑋3 t 3 ;


𝐹(𝑡) = [ ]
Y = 𝑌0 (1 − t)3 + 3𝑌1 (1 − t)2 + 3𝑌2 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 => 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

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 cálculo de la curvatura:

1
K(t) = ∥𝐹′(𝑡)∥3 . ∥ 𝐹′(𝑡)𝑥𝐹′′(𝑡) ∥

Hallaremos ∥ 𝐹′(𝑡) ∥ :

∥ 𝐹 ′ (𝑡) ∥ = √(−90𝑡 2 − 12t + 72)2 + (66𝑡 2 − 318t + 141)2


∥ 𝐹′(𝑡) ∥ = 3√1384𝑡 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 fórmula de la curvatura:

−21204 + 34884𝑡 − 29412𝑡 2


𝑘(𝑡) =
(3√1384𝑡 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 fórmula 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 posición final de la curva en el ejercicio anterior.
Primer cambio:
Para este primer cambio utilizaremos la reflexión respecto de un punto (simetría 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
(reflexión del punto P0 sobre P3. Del mismo modo los puntos de control para la nueva
curva P4 y P6 se obtienen al aplicar una reflexión:
 Códigos 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 ubicación de los puntos para darle a la curva una forma más alargada y
por tanto más parecida a la letra “S”.

También podría gustarte