INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL...

62
INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones Gr ´ aficas para el Proyecto KL Tesis que presenta Hern´ andez Bola˜ nos Blanca Marisol erez Ram´ ırez Jair Alonso Para Obtener el Grado de Ingeniero en Comunicaciones y Electr´onica Director de la Tesis: Ing. Jos´ e de Jes´ us Negrete Redondo. Codirector: Dr. Maximino Pe˜ na Guerrero. exico D.F. Agosto 2011

Transcript of INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL...

Page 1: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

INSTITUTO POLITECNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA

ZACATENCO

ICE

Biblioteca de Funciones Graficas

para el Proyecto KL

Tesis que presenta

Hernandez Bolanos Blanca Marisol

Perez Ramırez Jair Alonso

Para Obtener el Grado de

Ingeniero en Comunicaciones y Electronica

Director de la Tesis: Ing. Jose de Jesus Negrete Redondo.Codirector: Dr. Maximino Pena Guerrero.

Mexico D.F. Agosto 2011

Page 2: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

ii

Page 3: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Resumen

La necesidad de escribir musica ha originado que la tecnologıa se vea inmersa en el

mundo musical, creando herramientas que ayuden no solo a los musicos, sino tambien

a las personas que van iniciando en la musica. KL (Kernel for a music Language), es

un compilador creado por investigadores del Instituto Politecnico Nacional, orienta-

do al procesamiento digital de la musica. KL facilita la escritura musical con la ayuda

de un programa escrito en lenguaje C, por medio de comandos designados para cada

instruccion, por ejemplo, para generar una nota Do5 con duracion de corchea. Uno

de los problemas de KL es que no contiene una biblioteca de graficos propia para ge-

nerar la salida necesaria de forma grafica, utiizando otros recursos, como MusicTex.

En este trabajo de tesis se presenta el diseno de los algoritmos para la construc-

cion de una biblioteca de funciones graficas (escritas en lenguaje C) de los elementos

necesarios (pentagrama, notas, claves, etc.) para realizar la escritura de musica. El

metodo utilizado para graficar cada sımbolo musical es la concatenacion de los splines

o polinomios de tercer orden, donde cada polinomio representa un segmento de cur-

va perteneciente a una figura mas compleja, debido a que los splines se utilizan para

graficar curvas de gran complejidad. Cada figura se grafico por segmentos para poder

obtener resultados de gran calidad.

Para comprobar que las figuras fueron correctamente graficadas, se creo un pro-

grama con el cual se ejecutan en conjunto todas las figuras, presentando los resulta-

dos en imagenes, ası como la descripcion del metodo de graficacion de la figura mu-

sical clave de fa, demostrando que utilizando los B-splines es posible dibujar figuras

comformadas por curvas de gran complejidad obteniendo resultados graficos de una

calidad profesional. Finalmente, se presenta una partitura mostrando los elementos

de la biblioteca en varios pentagramas.

iii

Page 4: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

AgradecimientosMe siento agradecida con Dios por permitirme alcanzar una de las metas mas im-

portantes de mi vida, se que todos y cada uno de los momentos que he vivido ya sean

buenos o malos han sucedio por alguna razon y me han permitido madurar y valorar

mas todo lo que la vida me ofrece, gracias por nunca dejarme sola y por darme la fuerza

necesaria para seguir adelante, esta tesis te la dedico a ti mi Dios con todo mi amor.

Quiero agradecer a mi asesor Dr. Maximino Pena Guerrero por compartir sus

conocimientos, experiencia y tiempo para la realizacion de esta tesis, gracias por ayu-

darme a comprender de una forma mas sencilla todas las dudas que surgieron en el de-

sarrollo de la misma, me siento muy feliz y agradecida con usted por haberme brinda-

do la oportunidad de contribuir en el desarrollo de un proyecto tan importante.

A mi asesor Ing. Jorge Negrete Redondo le quiero dar las gracias por impul-

sarme a realizar este trabajo de tesis, por ensenarme que la mejor forma de alcanzar

una meta es esforzandose siempre a dar lo mejor de uno mismo, gracias por todo el

apoyo y experiencia compartidos, gracias a sus consejos el dıa de hoy me siento llena

de satisfaccion y orgullo por el trabajo realizado.

Esta tesis se la dedico a mis padres con todo mi amor.

A mi madre le agradezco primero que nada por darme la vida, gracias mami

por toda tu paciencia y comprension en los momentos difıciles por los que pase, me

siento bendecida por tenerte a mi lado, te doy gracias por el apoyo en todas las deci-

siones buenas o malas tomadas desde el inicio hasta la conclusion no solo de mi car-

rera, sino a lo largo de mi vida, espero te sientas orgullosa de mi como yo lo estoy

de tener a una mama tan fuerte y tan valiente como tu, mami te amo con todo mi

corazon. A mi padre que lo amo con todo mi ser, le doy las gracias por haber creıdo

en mı, por brindarme toda su confianza, por ensenarme a luchar para alcanzar mis

iv

Page 5: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

metas y suenos y a nunca darme por vencida, aunque no te podıa ver, se muy bien que

en todo momento estuviste presente apoyandome y cuidandome, todos tus consejos y

amor los tendre guardados por siempre en mi mente y en mi corazon. A ti hermanita

te agradezco toda la paciencia que me tuviste para conseguir uno de los suenos mas

grandes de mi vida, estoy muy feliz de tenerte como hermana, hemos compartido ale-

grias y tristezas, siempre has estado dispuesta a todo con tal de verme feliz, estoy se-

gura que sin tu apoyo y ayuda esto no hubiera sido posible, gracias por alentarme a

seguir adelante, por escucharme y estar a mi lado en todos y cada uno de los mo-

mentos mas importantes de mi vida. A mi novio le doy las gracias por cruzarse en mi

camino y darle un nuevo sentido a mi vida, gracias por toda la paciencia mostrada

cuando lloraba y me enojaba por que las cosas no salıan bien, jamas me dejaste re-

nunciar y en todo momento me impulsaste a luchar, creıas en mi aun cuando yo de-

jaba de hacerlo, me ensenaste a enfrentar la vida de una forma mas positiva y me hi-

ciste ver que yo era mas capaz de lo que pensaba, mi cielo eres el hombre maravilloso

que siempre sone, te amo y te amare por siempre.

Gracias a mis familiares y amigos.

Gracias a mi ESIME y por supuesto, orgullosamente del Instituto Politecnico

Nacional.

Blanca Marisol Hernandez Bolanos

v

Page 6: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

AgradecimientosDr. Maximino Pena Guerrero, quiero agradecerle las facilidades y el apoyo que

nos brindo durante la realizacion de este trabajo de tesis y en los cursos de la especia-

lidad, sus conocimientos compartidos fueron mas que una gran ayuda, ensenandonos

que el camino a seguir siempre sera el del trabajo y el esfuerzo.

Ing. Jose de Jesus Negrete Redondo, le agradezco sus palabras de aliento para

motivarnos y creer que todo es posible si se tiene paciencia y se trabaja correcta-

mente, sus aportes en nuestro trabajo fueron vitales para guiarnos y llegar a la meta,

sin esa ayuda no lo hubieramos logrado.

Papa, Mama, no tengo las palabras adecuadas para expresar mi amor y mi

agradecimiento, les debo mas de lo que les puedo ofrecer. Gracias por la educacion

que me dieron, que aunque a veces parece que me esfuerzo en mostrar lo contrario,

fue la mejor que pude haber tenido. Todo lo que soy es por ustedes. Papa, en todo el

mundo no hay persona alguna que me haya ensenado el significado de ser humilde, y

valerse por sı mismo, sin importar lo dificil que sea el trabajo, como tu me ensenas

hasta ahora. Mama, no conozco a nadie que tenga un dıa pesado y mantenga una

sonrisa como tu, me has ayudado a formar mi parte humana, saber que no soy mas

que nadie, y nadie es mas que yo.

Hermanitos, no se que hubiera sido mi vida sin ustedes, tal vez mas feliz o tal vez

mas triste, pero de algo sı estoy seguro, mi vida no serıa la misma sin los dos. Braulio,

me serviste de inspiracion en mi infancia, y aun lo sigues siendo, me demuestras que

no hay nada que no se pueda aprender y nada que no se pueda hacer, sin importar el

tiempo que tome, siempre lo consigues. Monse, quisiera ser al menos la mitad de fuerte

de lo que eres, jamas te dejas y siempre luchas por tus suenos, sin importar nada.

Marisol, llegaste a mi vida para ponerle orden y regresarme al camino cuando

ya estaba descarrilado, puedo decir con seguridad que si no fuera por ti, yo no estarıa

escribiendo estas lıneas de mi tesis, gracias por los jalones de oreja y reganos cuan-

vi

Page 7: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

do no queria trabajar, gracias por ser mi mejor companera de toda la carrera, y por

ensenarme que se puede tener un gran corazon sin importar lo que la vida nos quita,

gracias por el amor y paciencia que me tienes siempre.

A mi familia y amigos, gracias por todo lo que hacen por mi sin esperar nada a

cambio.

Dios, gracias!

Jair Alonso Perez Ramırez

vii

Page 8: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Indice general

1. Introduccion 4

2. Fundamentos de graficacion 7

3. Graficando con splines 11

4. Figuras musicales 15

5. Programacion de las figuras musicales 20

6. Pruebas y resultados 25

7. Conclusiones y Trabajos Futuros 31

A. Graficos con OpenGL 34

B. Compilador KL 37

C. Codigo fuente 40

1

Page 9: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Indice de figuras

3.1. Puntos de control de un B-spline . . . . . . . . . . . . . . . . . . . . 12

3.2. Graficacion de dos B-splines . . . . . . . . . . . . . . . . . . . . . . . 13

3.3. Concatenacion de dos B-splines . . . . . . . . . . . . . . . . . . . . . 13

3.4. Trazado de una circunferencia . . . . . . . . . . . . . . . . . . . . . . 14

3.5. Circunferencia solida . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5.1. Ventana en la que se graficaran las figuras musicales . . . . . . . . . . 21

5.2. Primer seccion; (a)Curva formada por dos B-splines; (b)Curva solida 22

5.3. Segunda seccion; (a)Curva formada por cuatro B-splines; (b)Curva solida 23

5.4. (a)Clave de Fa con puntos de control visibles; (b)Clave de Fa solida . 24

6.1. El programa prueba kgk.c . . . . . . . . . . . . . . . . . . . . . . . . 25

6.2. Lista de las figuras en kgk . . . . . . . . . . . . . . . . . . . . . . . . 26

6.3. Resultados graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

6.4. Resultados graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

6.5. Resultados graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

6.6. Resultados graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

6.7. Resultados graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

6.8. Resultados graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

6.9. Partitura elaborada con la biblioteca de figuras musicales . . . . . . . 30

A.1. Diagrama seccionado de la clave de fa . . . . . . . . . . . . . . . . . . 36

B.1. Diagrama estructural KL . . . . . . . . . . . . . . . . . . . . . . . . . 38

2

Page 10: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Indice de tablas

5.1. Valores de las coordenadas de los B-splines de la primer curva . . . . 22

5.2. Valores de las coordenadas de los B-splines de la segunda curva . . . 23

5.3. Coordenadas para graficar el primer cırculo . . . . . . . . . . . . . . . 24

5.4. Coordenadas para graficar el segundo cırculo . . . . . . . . . . . . . . 24

5.5. Coordenadas para graficar el tercer cırculo . . . . . . . . . . . . . . . 24

6.1. Lista de figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3

Page 11: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Capıtulo 1

Introduccion

En la actualidad, gracias a su propia evolucion, la tecnologıa se ha convertido en

una herramienta indispensable, y en algunos casos, insustituible; en el ambito de la

composicion e interpretacion musical, la brecha entre el compositor y la tecnologıa es

cada vez menor, ya sea por facilidad en tiempo y trabajo, o por comodidad a la hora de

escribir una melodıa, ya que anteriormente los integrantes de una orquesta tenıan que

suponer el sonido de las notas que se encontraban en la partitura. A traves de los anos,

siempre se ha buscado la manera de vincular la musica con los avances tecnologicos

para que su aplicacion sea mas util, por ejemplo tratar de igualar la expresion y el sen-

timiento que los seres humanos le imprimen a las interpretaciones en vivo de una pieza

musical, o en el ambito educativo, donde se pueden lograr aportes realmente impor-

tantes, como tomar el papel de director marcando el tempo y ayudando a la practica.

Para hacer esto posible, se utilizan los sistemas CAC (Computer Assisted Com-

poser)o Compositor Asisitido por Computadora, los cuales son un conjunto de hard-

ware y software que presentan herramientas para facilitar la composicion e inter-

pretacion musical. Actualmente en el mercado existen comercialmente varios sistemas

CAC, sin embargo, dichos sistemas presentan dos grandes inconvenientes, son exce-

sivamente caros y no son de codigo libre, por lo que no se pueden utilizar sin autor-

izacion por parte de los creadores, razon por la cual es necesario crear un sistema

CAC propio y para uso exclusivo del IPN.

4

Page 12: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

El Proyecto KL(Kernel for a music Language) es un sistema CAC creado por

investigadores del IPN, con el fin de facilitar la composicion e interpretacion musical.

Con este sistema es posible eliminar la necesidad de escribir en papel la partitura, ya

que se puede ir escribiendo nota por nota en una composicion virtual, o bien gener-

arla a partir de la ejecucion de un instrumento real. De este modo se obtiene un gran

avance, puesto que ya no se tendra que interpretar un pasaje musical cientos de ve-

ces hasta que se logre memorizar cada una de las notas. La limitante de este compi-

lador es que no cuenta con una biblioteca de graficos, la cual debera contener una se-

rie de sımbolos musicales que son basicos para el solfeo, por ejemplo, los tiempos que

duran las notas (redonda, negra, corchea, etc.), los sımbolos que se utilizan para in-

dicar una repeticion, las claves musicales, el pentagrama, etc.

En este trabajo de tesis se presenta el diseno y construccion de la biblioteca de

funciones graficas para el proyecto KL el cual es un sistema de ayuda para la com-

posicion musical. Las funciones graficas que se contemplaron para la biblioteca son

las claves musicales como la clave de Fa o la clave de Sol, o la duracion de las notas,

como la corchea, semicorchea, negra, etc. Para la creacion de los dibujos, se aplicaran

fundamentos de graficacion tales como el punto, la lınea recta y la lınea curva, los

cuales estan presentes en la mayorıa de los sımbolos debido a que con ellos se forman

los splines, con los cuales es posible hacer una aproximacion adecuada de las curvas

a los graficos musicales, tomando en cuenta la importancia de establecer puntos fijos

y puntos de control en el trazado de cada spline; hecho lo anterior se procede a una

concatenacion de splines, es decir, unir dos splines punto por punto, lo cual es nece-

sario debido a que se requieren disenos de figuras solidas.

Para el diseno de los sımbolos musicales, se usara una imagen base, sirviendo

como referencia para los trazos que se vayan haciendo en cada dibujo, ası como tam-

bien se utilizara una figura dividida en pequenas secciones del diseno en cuestion, la

cual permite realizar el grafico de una forma mas rapida y sencilla ya que de esta for-

ma se tiene una idea mas definida de los pasos a seguir en la creacion de cada spline.

5

Page 13: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Las figuras se realizan por medio de algoritmos programados en lenguaje C que

ayudan a calcular y obtener los valores de los polinomios que conformaran los splines;

se prepara el ambiente grafico inicializando con un conjunto de librerıas que contienen

las funciones requeridas para este trabajo de tesis, despues se crea una ventana la

cual sera el area de trabajo donde se hara el trazado de los sımbolos, ademas se es-

tablecen los parametros de la misma, tales como su posicion, tamano y el color; al

cumplirse lo anterior se procede a disenar cada uno de los graficos musicales.

Como resultado se presenta el diseno de treinta y cuatro sımbolos musicales

tales como: becuadro, bemol, clave de fa, clave de sol, etc. Se muestra el conjunto de

codigo fuente responsable de la generacion de los graficos musicales, los cuales con-

tienen los comandos necesarios para trabajar en el ambiente OpenGL, ası como tam-

bien las coordenadas obtenidas de cada spline. Para comprobar el correcto funciona-

miento de la biblioteca, se presenta un pequeno programa llamado kgk.c , el cual eje-

cuta los sımbolos de manera conjunta verificando que las mismas estan libres de erro-

res y que estan listas para utilizarse.

La tesis esta estructurada de la siguiente manera: En el capıtulo 2 se presen-

tan los fundamentos de graficacion; el capıtulo 3 explica el modo de graficacion con

splines; el capıtulo 4 proporciona informacion teorica de cada una de las figuras mu-

sicales que estaran contenidas en la biblioteca de graficos; en el capıtulo 5 se expli-

ca detalladamente los pasos a seguir para realizar el diseno de la figura musical clave

de Fa; el capıtulo 6 presenta el resultado del diseno de todas las figuras musicales; fi-

nalmente el capıtulo 7 expone las conclusiones a las que se llegaron al haber realiza-

do este proyecto de tesis.

6

Page 14: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Capıtulo 2

Fundamentos de graficacion

Representar de manera visual algun tipo de informacion ha sido una necesidad

que se ha presentado desde que el ser humano comenzo a desarrollar su inteligen-

cia. Desde un dibujo rupestre en una cueva, hasta el comportamiento de un efecto

fısico, el hombre ha sido capaz de plasmar e interpretar tanto emociones como resul-

tados matematicos por medio de figuras. Para poder realizar estas interpretaciones,

se deben considerar los tres elementos fundamentales de la geometrıa: el punto, la

recta y el plano. Por punto se debe entender como el principal generador de la forma,

ya que es el comienzo de toda representacion grafica. Matematicamente, el punto es

una figura geometrica adimensional ya que no tiene longitud, area, volumen, ni otro

parametro dimensional; ademas indica una posicion en el espacio, en referencia a un

sistema de coordenadas ; dependiendo del sistema con el que se hace la referencia, el

punto se puede determinar en coordenadas cartesianas, polares, esfericas o cilındricas.

A partir del punto, se puede generar una lınea recta, la cual es una sucesion in-

finita de puntos que tienen la misma direccion; dicha sucesion se toma como una so-

la entidad, ya que si se considerara con respecto a los puntos que la conforman, se

obtendrıa un numero infinito de puntos. Es usada en una gran cantidad de aplica-

ciones, por ejemplo, formar figuras geometricas que tengan dos dimensiones (triangu-

lo, cuadrado), o tres dimensiones (cubo, polıgono). Al igual que con el punto, la rec-

ta se debe referenciar en un sistema de coordenadas. Matematicamente, la recta se

7

Page 15: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

puede representar mediante la ecuacion:

y = mx+ b (2.1)

Donde x y y son variables que pueden tomar cualquier valor dentro de un plano,

m es la relacion con la inclinacion que toma la recta con respecto a un par de ejes co-

ordenados que determinan un plano, mientras que b representa la posicion del pun-

to en el cual la recta corta con el eje vertical del plano. Al definir una lınea recta, se

tiene una sucesion de puntos con la misma direccion; en cambio, el resultado de ten-

er la misma sucesion pero variando la direccion es una lınea curva. Se pueden obte-

ner lıneas curvas cerradas, donde el punto inicial es el mismo que el punto final, co-

mo la circunferencia y la elipse, y las lıneas curvas abiertas, donde el punto final es

diferente al punto inicial, como la parabola y la hiperbola. Las lıneas curvas depen-

den ademas de uno o mas centros de curvatura.

La necesidad de representar curvas y superficies proviene de modelar objetos

reales mediante graficas, con la desventaja que no existe un modelo matematico pre-

vio de los objetos, realizando ası una aproximacion por segmentos de lıneas, rectas y

curvas, pero estas no son exactas. Para solucionar esto se utiliza la interpolacion, la

cual consiste en hallar una serie de datos dentro de un intervalo conociendo los va-

lores de los extremos. Generalmente la interpolacion se utiliza cuando se tiene una

funcion de la cual solo se conoce una serie de puntos de la misma, por ejemplo, de la

serie de valores (x0, y0), · · · , (xn, yn), se requiere encontrar el valor de un punto x in-

termedio entre x0 y xn. Ahora bien, por n + 1 puntos pasan un numero infinito de

funciones, pero solo un polinomio pasa por todos los puntos; por lo tanto se busca el

polinomio de menor grado que pase por los puntos n+1 dados. La funcion polinomi-

ca de menor grado que pasa por los puntos es en principio de grado n:

f(x) = anxn + · · ·+ a1x+ a0 (2.2)

Con el cual se obtiene el sistema de n+1 ecuaciones con n+1 incognitas; al re-

8

Page 16: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

solver este sistema se obtiene el polinomio de interpolacion, y sustituyendo valores en

la expresion obtenida, se pueden encontrar nuevos puntos de la funcion. En la inter-

polacion polinomial existen varios metodos usados para obtener el polinomio de inter-

polacion; la forma mas simple de interpolacion consiste en unir dos puntos mediante

una lınea recta, a la que se llama Interpolacion Lineal, cuya ecuacion esta dada por:

f1(x) = f(x0) +f(x1)− f(x0)

x1 − x0

(x− x0) (2.3)

La notacion f1(x) designa que este es un polinomio de interpolacion de primer

grado; se puede observar que la ecucion 2.3 tiene la misma forma que la ecuacion 2.1,

es por esto que se llama interpolacion lineal (se une por medio de lıneas). En gene-

ral, cuanto menor sea el intervalo entre los datos, mejor sera la aproximacion. Por

consiguiente, si los intervalos entre los datos son mayores, existira un porcentaje de

error mayor. Para reducir esta problematica y mejorar la aproximacion, se introduce

una curvatura a la lınea que une los puntos, es decir, si se tienen tres puntos como

datos, estos pueden ajustarse en un polinomio de segundo grado, una interpolacion

parabolica, cuya ecuacion es:

f2(x) = b0 + b1(x− x0) + b2(x− x0)(x− x1) (2.4)

Se observa que los primeros dos terminos de la ecuacion 2.4 son equivalentes de la

interpolacion lineal de x0 a x1, y el ultimo termino, b2(x−x0)(x−x1), determina la cur-

vatura de segundo grado de la ecuacion (con este metodo se une por medio de curvas).

Los dos metodos de interpolacion anteriores son dos casos del metodo de inter-

polacion polinomial de Newton, el cual se basa en el polinomio de n-esimo grado:

fn = b0 + b1(x− x0) + · · ·+ bn(x− x0)(x− x1) · · · (x− xn−1) (2.5)

La desventaja de la interpolacion polinomial radica en que el polinomio interpo-

lador puede oscilar fuertemente entre los puntos interpolados; estas oscilaciones se pre-

9

Page 17: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

sentan con mayor frecuencia en los polinomios de grado elevado, haciendo que la fun-

cion pueda coincidir en muchos puntos, pero tambien es posible que la distancia tien-

da a infinito si el grado de la funcion crece. Para muchas aplicaciones practicas es con-

veniente un algoritmo que proporcione una funcion interpoladora que tenga un com-

portamiento mas suave. Como se ha mencionado, el modelo mas sencillo es la interpo-

lacion lineal constituida por rectas que unen los puntos interpolados; sin embargo esta

interpolacion tiene una derivada discontinua en los puntos de interpolacion. Es conve-

niente obtener un polinomio de interpolacion que tenga derivadas continuas hasta un

orden dado y de no presentar oscilaciones entre puntos de interpolacion, ademas de

ser continua; el metodo de interpolacion por splines se encarga de obtener polinomios

que cumplan con las condiciones antes mencionadas; dichos polinomios que fungen co-

mo conectores son los denominados splines; la idea fundamental de estas funciones es

hacer posible la construccion de graficas suficientemente suaves y faciles de manejar;

en otras palabras, una funcion spline esta formada por varios polinomios, cada uno

definido sobre un subintervalo, que se unen entre sı obedeciendo a ciertas condiciones

de continuidad. Los splines mas utilizados son los splines cubicos, debido a que son los

mas sencillos con segunda derivada continua, haciendolos adecuados para aproximar

funciones que intervienen en ecuaciones diferenciales. Un spline cubico esta dado por:

Sk(x) = ak + bk(x− xk) + ck(x− xk)2 + dk(x− xk)

3 (2.6)

Donde Sk(x) se define como un conjunto de n funciones dentro de una serie de

n+ 1 puntos de interpolacion (x0, y0), · · · (xn, yn)

En conclusion, el punto es el principio de graficacion, con el cual se puede gene-

rar una lınea, ya sea recta o curva, y estas sirven para graficar diferentes problemas

matematicos, como la interpolacion, que es el proceso matematico mediante el cual

es posible calcular nuevos valores a partir de otros ya existentes, y sirve para aproxi-

mar curvas con un mınimo de datos.

10

Page 18: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Capıtulo 3

Graficando con splines

Como se ha mencionado, un spline es una curva definida por segmentos me-

diante polinomios, y se utiliza comunmente para resolver problemas de interpolacion

ya que se obtienen excelentes resultados recurriendo a polinomios de bajo grado. La

diferencia entre un spline y un b-spline es que en el primero, la curva pasa por los

puntos que definen la interpolacion, mientras que en el segundo la curva no pasa por

dichos puntos, sino solo se define la curva en base a ellos; las curvas de tercer grado

empleadas para unir cada par de datos se llaman splines cubicos. Los splines cubicos

proporcionan un excelente ajuste y sus calculos no son estrictamente complejos, de-

bido a esto son los mas utilizados.

Los splines cubicos se representan a traves de un polinomio de tercer orden en-

tre cada par de puntos que se van a interpolar, y tienen la forma:

f(x) = ai(x− xi)3 + bi(x− xi)

2 + ci(x− xi) + di (3.1)

Donde xi ≥ x ≥ xi+1, para cada i = 1, 2, · · · , n− 1 siendo n el numero de pun-

tos a interpolar. Los parametros ai, bi, ci y di se determinan de tal forma que cum-

plan con las condiciones siguientes: el polinomio debe pasar por los puntos termi-

nales xi y xi+1; la pendiente (primera derivada) de los polinomios adyacentes al pun-

to comun deben ser iguales; la curvatura (tercera derivada) de los polinomios adya-

centes al punto comun deben ser iguales.

11

Page 19: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Un spline se especifica a partir de un conjunto de posiciones de coordenadas,

conocidos como puntos de control ; dado el conjunto de puntos de control, por medio

de la interpolacion se genera una curva que pasa por todo el conjunto de puntos. Al

implementar los splines graficamente por medio de programacion en lenguaje C se

necesitan establecer cuatro puntos, de los cuales dos deben ser los puntos donde ini-

cia y termina el spline, y los dos restantes seran los que tienen la funcion de ajustar

el spline; en la figura 3.1 se pueden observar tanto los puntos fijos incial y final, co-

mo los puntos de control que ajustan la curvatura resultante.

Figura 3.1: Puntos de control de un B-spline

Para dibujar el B-spline, se utiliza la funcion:

void DrawCuerno(x1,y1,x2,y2,x3,y3,x4,y4,w1,z1,w2,z2,w3,z3,w4,z4,z);

Esta funcion necesita 17 parametros para graficar un par de splines, es decir,

los valores (x1,y1) y (x4,y4) corresponden a los puntos de control fijos, y los valores

(x2,y2) y (x3,y3) corresponden a los puntos de ajuste de la curva del primer spline;

los valores (w1,z1) y (w4,z4) son los puntos de control fijos y los valores (w2,z2) y

(w3,z3) son los puntos de ajuste de la curva del segundo spline; el ultimo parametro

indica la escala de la figura, o zoom. Esto es debido a que grafica ambas curvas al mis-

mo tiempo, y ademas realiza una concatenacion de splines, es decir, lleva a cabo una

12

Page 20: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

union entre un spline y otro por medio de una lınea. Como el calculo de los splines

se realiza dentro de un bucle1, la concatenacion de splines se hace tambien dentro del

mismo bucle; es decir, el programa calcula un punto (xn, yn) del primer spline, otro

punto (wn, zn) del segundo spline, y la union de estos dos puntos en el mismo ciclo

del bucle. En la figura 3.2 se puede observar dos splines sin concatenar; en la figura

3.3 se observa el par de splines siendo concatenados.

Figura 3.2: Graficacion de dos B-splines

Figura 3.3: Concatenacion de dos B-splines

1Ver Apendice C

13

Page 21: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

La concatenacion se utiliza para rellenar figuras hechas a base de splines, o de

otro modo, crear objetos solidos. Si por ejemplo, se requiere graficar una circunferen-

cia la cual se secciona en dos partes, la concatenacion une cada uno de los puntos de

la primer seccion con la que le corresponde de la segunda (figuras 3.4 y 3.5).

Figura 3.4: Trazado de una circunferencia

Figura 3.5: Circunferencia solida

Con estos principios, se pueden crear infinidad de figuras geometricas, tales co-

mo las figuras musicales que son necesarias para la Biblioteca del proyecto KL.

14

Page 22: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Capıtulo 4

Figuras musicales

Para poder comprender y leer una partitura, es necesario saber los conceptos

basicos de la Teorıa Musical, ası se entendera sin problemas el lenguaje musical, que es

un compas de cuatro cuartos, que es una corchea seguida de una redonda y una ne-

gra. Esto permitira leer, ejecutar, o componer una melodıa con seguridad, precision

y calidad.

Cuando se escribe musica se hace sobre un pentagrama, que no es otra cosa mas

que el sımbolo grafico en el que se centra la grafica musical. Es el lugar donde se es-

criben las notas musicales, silencios, y demas sımbolos musicales, el cual consta de

cinco lıneas y cuatro espacios, enumerados de abajo hacia arriba. En el pentagrama

se pueden representar una serie de elementos, tal es el caso de las claves musicales,

las cuales tienen la funcion de asociar las notas musicales con las lıneas o espacios

del pentagrama; en otras palabras, es una referencia para saber la ubicacion de una

determinada nota musical, de modo que a las notas siguientes les corresponderan los

espacios y lıneas adyacentes. Existen tres sımbolos diferentes para representar a las

distintas claves, que corresponden a las tres claves existentes: clave de Sol (G), clave

de Fa (F), clave de Do(C).

Otro elemento importante en el pentagrama es la nota, que esta representada

por signos que se escriben en las lıneas o en los espacios del pentagrama, la cual in-

dica un determinado sonido musical. Existen sonidos que por su altura no pueden

15

Page 23: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

ser representados en el pentagrama y cuando se presentan estos casos, se utilizan las

lıneas adicionales, que son unas lıneas cortas paralelas y equidistantes a las del pen-

tagrama, encima o debajo del mismo, y las notas se escriben en los espacios o sobre

las lıneas. Ademas existen las figuras musicales que son las que dan valor en tiempo

a las notas que componen una melodıa, ya que si no fuera ası, no existirıa armonıa

en lo que se toca, simplemente, no serıa posible la musica. Las figuras musicales son

sımbolos que indican el tiempo que duran las notas musicales, las cuales son siete, y

de mayor a menor son: REDONDA (valor = 1) se toma como unidad; BLANCA (val-

or = 1\2) dura la mitad de una redonda; NEGRA (valor = 1\4) dura la mitad de

una blanca; CORCHEA (valor = 1\8) dura la mitad de una negra; SEMICORCHEA

(valor = 1\16) dura la mitad de una corchea; FUSA (valor = 1\32 ) dura la mitad

de una semicorchea; SEMIFUSA (valor = 1\64) dura la mitad de una fusa.

El valor de la redonda es referencia del compas de Cuatro cuartos, como se

vera posteriormente. En otras palabras, un compas de cuatro cuartos, quedara com-

pleto con una redonda, o dos blancas, o cuatro negras, y ası sucesivamente.

Si se requiere representar una pausa, es decir el intervalo de tiempo en el que

la voz o el instrumento no genera sonido alguno, se coloca un silencio, que esta sub-

dividido de la misma manera que las notas en terminos de duracion y cada silencio

durara el mismo tiempo que su nota correspondiente. Algunas veces despues de una

figura se puede encontrar un puntillo, el cual tiene la funcion de aumentar la mitad

de la duracion a la que precede, por ejemplo, si se encuentra una blanca con un pun-

tillo, indica que la nota durara una blanca mas una negra.

Existen algunos detalles que pueden pasar desapercibidos, pero que son impor-

tantes para tomarse en cuenta cuando se realiza una partitura, por ejemplo, las no-

tas que se colocan en las lıneas deben estar atravesadas por estas, mientras que las

que se colocan en los espacios, deben tocar interiormente las lıneas que las delimi-

tan. Otro detalle importante consiste en que a las blancas, y a las figuras inferiores a

estas, se escriben con una plica, que normalmente va hacia arriba cuando la nota se

16

Page 24: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

encuentra por debajo de la lınea central del pentagrama, y hacia abajo cuando se en-

cuentren encima de la lınea central.

Para hacer la lectura de la musica mucho mas ordenada, se necesita dividir la

grafıa en una serie de porciones iguales. A cada porcion se le llama compas, que tiene

la funcion de dividir al pentagrama en partes iguales, y agrupar a una porcion de no-

tas musicales en el pentagrama. El compas es la entidad metrica musical, conforma-

da por varias unidades de tiempo (como la negra o la corchea). Esta separacion se

representa graficamente con unas lıneas verticales, llamadas lıneas divisoras o bar-

ras de compas, que se colocan perpendicularmente a las lıneas del pentagrama. En

una composicion musical escrita, las notas y los silencios que esten comprendidos en-

tre dos lıneas divisoras componen un compas. Una porcion musical esta constituida

por el conjunto de compases que la conforman, estos tendran la misma duracion has-

ta que se cambie el tipo de compas. Los mas comunes son: Binario, se dividen en dos

tiempos (dos cuartos); Ternario, se dividen en tres tiempos (tres cuartos); Cuater-

nario, se dividen en cuatro tiempos (cuatro cuartos).

Para separar un compas de otro, se utilizan las barras divisoras, representadas

por una lına perpendicular que une la primera con la quinta lınea del pentagrama. Las

dobles barras representan el final de una obra, cuando la lınea derecha es mas gruesa

que la otra. Cuando las dos lıneas son iguales representan la separacion entre dos sec-

ciones dentro de la misma obra. Los compases se indican por medio de dos cifras, que

se representan en forma de fraccion, y se colocan al principio del pentagrama, detras

de la clave y la armadura, y no se indican de nuevo a menos que el compas cambie.

Dentro de una partitura es muy importante indicar la velocidad con que debe

ser ejecutada una obra musical, se debe tomar en cuenta el tempo para saber la du-

racion de las notas y a que velocidad se ha de interpretar. Para indicar el tempo de

las composiciones musicales se utiliza el instrumento musical llamado metronomo, el

cual genera una senal visual o acustica, con velocidad constante. Generalmente los

musicos usan el metronomo para practicar una pieza musical, ya sea individualmente,

17

Page 25: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

o en conjunto con otros instrumentos o voces. La unidad empleada para medir el

tempo son las Pulsaciones por minuto (Beats per Minute o BPM ), que equivale al

numero de pulsaciones que se generan en un minuto; se indica con una figura (nor-

malmente el sımbolo de negra), igualada con el numero que representa la cantidad

de la figura que se puede tocar durante un minuto. Por ejemplo, si el BMP=60, ca-

da negra en la partitura, valdra un segundo. Se coloca al inicio de la partitura para

indicar el tempo al que se debe ejecutar la obra, desde ese momento hasta la proxi-

ma indicacion, o (en caso de que no exista) hasta el final.

Si se desea modificar la entonacion de las notas, haciendolas subir o bajar de

su estado natural, se colocan alteraciones, que son dislocaciones de tono, tales como:

SOSTENIDO (�), se encarga de subir un semitono a la nota natural; BEMOL (�), ba-

ja a la nota natural un semitono; BECUADRO (�), anula el efecto de los bemoles y

de los sostenidos.

Las alteraciones siempre se colocan antes de las notas provocando que la altura

de las mismas se modifique, ası como tambien se representan despues del nombre de

las notas, cifras y tonalidades, tambien es necesario tomar en cuenta la tonalidad, es

decir la asociacion de bemoles y sostenidos representados junto a la clave musical, la

cual indica la escala en que se expresara la musica.

Existen dos sımbolos encargados de sugerir el aumento o disminucion de volu-

men, tambien llamados crescendo y diminuendo, estos sımbolos se colocan en donde

inicia la alteracion y se estiran hasta donde se interrumpe dicha alteracion causando

que el volumen establecido permanezca ası hasta que se de una nueva indicacion.

En una composicion musical es frecuente encontrar que una o mas frases mu-

sicales se repiten a lo largo de toda la composicion, y a la hora de realizar la parti-

tura esto puede significar escribir una partitura mas larga. Para resolver este proble-

ma, existen unos sımbolos que ayudan a indicar cuales compases se deben repetir al

tocar, haciendo que la lectura de la partitura se realice de una manera mas practica.

La barra de repeticion consiste en una barra ancha que cruza el pentagrama de for-

18

Page 26: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

ma vertical caracterizada por tener dos puntos por encima y debajo de la tercer lınea

de pentagrama; si la barra indica el inicio de la repeticion, los puntos se encontraran

a la derecha de la barra, si la barra indica el final de la repeticion los puntos iran a

la izquierda de la barra. Por otro lado, el calderon es un signo de expresion que se

le coloca a una determinada nota para indicar que se puede extender su duracion a

placer del interprete, generalmente se encuentra al final de la partitura, pero si se en-

cuentra en otro lugar, en la siguiente nota se coloca la leyenda a tempo para indicar

al interprete que regrese al tempo original.

19

Page 27: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Capıtulo 5

Programacion de las figuras musi-cales

En este capıtulo se describe paso a paso el procedimiento a seguir en el diseno

de la figura musical Clave de Fa; es muy importante analizar detenidamente el dibu-

jo que se desea trazar, ya que como se ha venido explicando a lo largo de este traba-

jo de tesis, el uso de los splines es sencillo siempre y cuando se entienda claramente

la definicion y aplicacion de los mismos, dando como resultado un diseno satisfacto-

rio y de buena calidad.

Para poder programar las figuras, se necesita saber el lugar donde se graficaran,

por lo que se necesita crear una ventana de trabajo de Windows donde se dibujara la

figura con OpenGL 1, despues se debe indicar la posicion de la ventana ası como tam-

bien establecer el tamano inicial de la misma, las ventanas pueden ser de nivel su-

perior, sub-ventanas, o superposiciones. Ademas se necesitan determinar los parame-

tros de inicializacion del modo grafico, los cuales se refieren al color que se usara, la

seleccion de la matriz de trabajo y la definicion de una region ortografica en dos di-

mensiones. En la figura 5.1 se puede observar la ventana donde se graficaran las figu-

ras musicales.

1Ver Apendice A, pagina 34

20

Page 28: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Figura 5.1: Ventana en la que se graficaran las figuras musicales

Como bien se ha dicho, para que un B-spline pueda formar una curva requiere de

cuatro puntos, de los cuales (x0,y0) y (x3,y3) son los puntos fijos incial y final respec-

tivamente, (x1,y1) y (x2,y2) son los puntos de ajuste, los cuales modifican la curvatu-

ra que toma el B-spline y no tocan la curva; para comenzar a programar la clave de

fa, se realizo un diagrama de la clave, a su vez este se dividio en partes para ası poder

tener una idea de la cantidad de splines que se iban a necesitar, tambien se utilizo co-

mo referencia para establecer los puntos inciales y finales de cada seccion para poder

obtener splines mas estilizados y cercanos al sımbolo musical de la Clave de Fa. 2.

En este caso, la clave de fa se ha dividido en 5 secciones: dos curvas y tres cir-

cunferencias; cada una de estas secciones esta delimitada por un B-spline, es decir,

el perımetro de cada seccion esta formado por dos B-splines. Se comenzo a graficar

la primer curva, tomando los puntos A y D como inicial y final del primer B-spline,

y los puntos B y C como inicial y final del segundo B-spline. Partiendo de A y D se

debe ajustar la curva con los puntos de ajuste A’ y D’ hasta que sea necesario para

obtener la curva exacta, y se toman las coordenadas de los cuatro puntos; despues de

esto, se toman los puntos B y C para ajustar la curva del segundo B-spline, con los

2Ver Apendice A, pag 36

21

Page 29: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

puntos de ajuste B’ y C’; una vez hecho el ajuste, se toman las coordenadas de los

puntos; en la tabla 5.1 se muestran los valores de las coordenadas que se obtuvieron.

SPLINE 1 SPLINE 2

A(57,588) B(104,671)A’(74,916) B’(180,857)D’(556,896) C’(434,857)D(510,521) C(398,521)

Tabla 5.1: Valores de las coordenadas de los B-splines de la primer curva

Para graficar las coordenadas se utiliza la funcionDrawCuerno del codigo fuente,

la cual utiliza como parametros los puntos obtenidos, graficando dos B-splines al mis-

mo tiempo, como se vio en el capıtulo 3 (Fig. 5.2).

Figura 5.2: Primer seccion; (a)Curva formada por dos B-splines; (b)Curva solida

Ya que se obtuvo la primer curva de la clave de fa, se toman los puntos C y

E inicial y final del primer B-spline para graficar la siguiente curva. Del mismo mo-

do, se requieren obtener las coordenadas de los puntos fijos C y E, y de los puntos

de control, C’ y E’. En la tabla 5.2 se muestran los valores de las coordenadas para

graficar la segunda curva.

22

Page 30: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

SPLINE 1 SPLINE 2

C(398,521) D(510,521)C’(370,215) D’(487,305)E1’(108,116) E2’(273,109)E(31,113) E(31,113)

Tabla 5.2: Valores de las coordenadas de los B-splines de la segunda curva

Como se puede notar, los dos B-splines de la segunda curva comparten el pun-

to fijo final, ya que los dos B-splines convergen en esa posicion. De la figura 5.3: a)se

pueden observar los puntos de control y los puntos fijos necesarios para graficar la cur-

va; b) se puede observar las dos curvas unidas, formando una curva solida mas grande.

Figura 5.3: Segunda seccion; (a)Curva formada por cuatro B-splines; (b)Curva solida

Por ultimo, se graficaron las circunferencias para completar la clave de fa; para

el primer cırculo se tomaron como puntos fijos F y G; para el segundo cırculo se

tomaron los puntos H e I como puntos fijos; para el tercer cırculo se tomaron como

puntos fijos a J y K. Una vez establecidos, se ajusta la curva mediante los puntos de

control para cada uno, obteniendo las coordenadas de estos puntos de control. En las

siguientes tablas, se muestran los valores de las coordenadas para los tres cırculos.

23

Page 31: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

SPLINE 1 SPLINE 2F(127,675) F(127,675)F1’(208,675) F2’(26,664)G1’(233,546) G2’(39.536)G(127,535) G(127,535)

Tabla 5.3: Coordenadas para graficar el primer cırculo

SPLINE 1 SPLINE 2H(594,564) H(594,564)H1”(655,561) H2’(531,560)I1’(654,477) I2’(535,482)I(594,472) I(594,472)

Tabla 5.4: Coordenadas para graficar el segundo cırculo

SPLINE 1 SPLINE 2J(594,736) J(594,736)J1’(652,735) J2’(536,728)K1’(655,649) K2’(533,654)K(594,643) K(594,643)

Tabla 5.5: Coordenadas para graficar el tercer cırculo

Utiizando estas coordenadas se graficaron los cırculos restantes para finalizar la

figura musical Clave de Fa (Fig. 5.4). 3

Figura 5.4: (a)Clave de Fa con puntos de control visibles; (b)Clave de Fa solida

3En el Apendice C, pag 40 se muestra el codigo fuente

24

Page 32: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Capıtulo 6

Pruebas y resultados

Despues de desarrollar cada figura por separado, se utilizo un programa para

ejecutarlas de manera conjunta, a modo de prueba, para verificar que todas las figu-

ras se encontraran sin errores. El programa prueba, llamado kgk.c, funciona como un

compilador general, sin necesidad de tener en el mismo programa el codigo para ca-

da figura, ya que al correr kgk simplemente se tiene que escribir la palabra clave para

cada una de las figuras y busca con ayuda de un comando la ruta donde se encuentra

el archivo ejecutable; para saber las palabras claves existentes, se escribe help para

desplegar la lista (figura 6.1).

Figura 6.1: El programa prueba kgk.c

De manera mas detallada, el programa lee una cadena de caracteres

(gets(string)) introducidas con el teclado, hasta que encuentra un retorno de carro

(tecla enter), despues compara la cadena (strcmp(”figura”,nota)) con las palabras

25

Page 33: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

clave que contiene el codigo, si la comparacion da como resultado 0 quiere decir que

las dos cadenas son iguales. El comando utilizado para esto es:

system("..\\figuras\\becuadro\\becuadro.exe" );

El cual, con la ruta especificada busca el archivo figura.exe para ejecutarlo, y

ası la figura aparecera en la pantalla (figura 6.2).

Figura 6.2: Lista de las figuras en kgk

La tabla 6.1 muestra la lista de las figuras que contiene la biblioteca de figuras

musicales.

26

Page 34: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

N◦ FIGURA N◦ FIGURA1 becuadro 19 negra2 bemol 20 negrainv3 blanca 21 parrafo4 blancainv 22 puntillo5 calderon 23 redonda6 clavefa 24 repcompasder7 coda1 25 repcompasizq8 coda2 26 repeticion9 compas 27 seisoctavos10 corchea 28 semicorchea11 crescendo 29 semiinv12 cuatrocuartos 30 sepcomp13 diminuendo 31 silcorchea14 dosmedios 32 silencioredonda15 fin 33 silsemicor16 grcsol1 34 sostenido17 ligaduradown 35 trescuartos18 ligaduraup 36 tresillo

Tabla 6.1: Lista de figuras

A continuacion se presentan los resultados graficos obtenidos despues de pro-

gramar las figuras, ademas se muestra un ejemplo de la apariencia de los mismos den-

tro de una partitura.

Figura 6.3: Resultados graficos

27

Page 35: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Figura 6.4: Resultados graficos

Figura 6.5: Resultados graficos

28

Page 36: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Figura 6.6: Resultados graficos

Figura 6.7: Resultados graficos

Figura 6.8: Resultados graficos

29

Page 37: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Figura 6.9: Partitura elaborada con la biblioteca de figuras musicales

30

Page 38: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Capıtulo 7

Conclusiones y Trabajos Futuros

CONCLUSIONES

En este trabajo de tesis se presento el diseno de una biblioteca de graficos mu-

sicales para el compilador KL, los cuales cuentan con una imagen de alta calidad, es-

to fue posible gracias a la implementacion de una herramienta llamada B-spline. Los

B-splines son curvas de interpolacion a trozos en las que los puntos que controlan su

forma no son parte de la curva; dependiendo si se trata de B-splines abiertos o uni-

formes los puntos inicial y final formaran parte de la curva; en los B-splines abier-

tos la curva sı va a pasar por el punto inicial y el punto final, a diferencia de los B-

splines uniformes, en los cuales dicha curva no llega a tocar esos puntos. La utilidad

de los B-splines tambien radica en la practicidad, rapidez y facilidad que estos pro-

porcionan, a veces es necesario realizar disenos con cierto grado de complejidad en el

menor tiempo posible, por lo que una vez que se manipula el tema de los B-splines

y se observan las ventajas de su aplicacion, se podran realizar trabajos de una forma

mucho mas precisa. Es posible crear disenos de una forma mas sencilla y rapida, ha-

ciendo un analisis detallado de los mismos, despues se sugiere utilizar una figura que

sirva de base al diseno que se quiere realizar, esta hara el papel de guıa en la aproxi-

macion de los splines. Es recomendable dividir la figura base en secciones, porque un

diagrama dividido de los sımbolos proporciona una idea mas general de lo que se pre-

tende disenar, tanto del tiempo que tomara, la complejidad del mismo, la cantidad

31

Page 39: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

de splines que se pueden utilizar, etc.

El diseno de esta biblioteca de sımbolos musicales se creo para ser incorpora-

do al proyecto KL el cual podra hacer uso de este conjunto de graficos, para realizar

la lectura de un archivo MIDI y a su vez obtener la partitura del mismo. Desde otro

punto de vista, KL es conformado por varios bloques que estructuran su funcion de

manera global. Cada bloque realiza una funcion, ya sea de entrada o de salida. En la

pag. 38 se pueden ver las partes de las que esta compuesta la estructura del compi-

lador KL, en uno de estos bloques se integrara la biblioteca de graficos, la cual se uti-

lizara para poder generar una partitura con todos los elementos que la componen.

LIMITACIONES Y TRABAJOS FUTUROS:

Este trabajo de tesis en general presento algunas limitantes, una de ellas es el

tiempo, ya que la teorıa musical cuenta con una gran cantidad de sımbolos musicales

por lo cual no se pudieron abarcar todos. Al principio no se comprendıa muy bien la

definicion de los splines por lo que las figuras resultantes no eran del todo satisfac-

torias, era algo complicado decidir por donde iniciar el diseno de una figura, es de-

cir, empezar por la parte mas secilla para que ası la complejidad fuera en aumento,

despues se observo que no era posible disenar simplemente viendo la figura, sino que

se tenıa que analizar y para esto se crearon diagramas divididos que proporcionaban

una imagen en partes mucho mas facil de comprender, y que ademas sirvieron co-

mo ”molde”; tambien surgieron inconvenientes que se solucionaron conforme paso el

tiempo y se fue adquiriendo mas experiencia en los temas del trabajo de tesis.

Uno de los obstaculos aparecio en el diseno de las ligaduras, debido a que es-

tas son utilizadas para unir duraciones del mismo sonido aunque no necesariamente

del mismo valor, el problema radica en la prolongacion que puedan llegar a tener, ya

que eso dependera de la cantidad de notas que se deseen ligar. Tambien se presento el

contratiempo de las plicas de las notas musicales, se sabe que la plica se puede encon-

trar hacia arriba a la derecha o hacia abajo a la izquierda de la cabeza de la nota, de-

32

Page 40: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

pendiendo del lugar que ocupen en el pentagrama, por lo que se necesitaria crear los

disenos de las notas con las plicas en distintas direcciones y tomando en cuenta que

la mayoria de las veces las notas musicales se encuentran muy cerca una de la otra,

sera necesario encontrar la forma de unirlas entre sı.

Se creo un pequeno programa que prueba que la biblioteca de graficos no posee

ningun error; este programa ejecuta las figuras de manera conjunta, muestra una a una

y comprueba que el trabajo estuvo bien realizado, ası mismo se requiere encontrar la

manera para que esta biblioteca sea implementada en el compilador KL. Algunos de

los trabajos a largo plazo de esta tesis son: Incorporar la biblioteca de sımbolos mu-

sicales al compilador KL para que este pueda hacer uso de la misma y ası continuar

avanzando en el proyecto principal. Encontrar la manera de controlar la extension de

las ligaduras y de las plicas de cada nota musical, ası como tambien manipular cuando

estas se unen entre sı. Complementar la biblioteca de graficos para el compilador Kl y

hacerla mucho mas extensa, es decir hacer el diseno de muchas mas figuras musicales,

debido a que la teorıa musical cuenta con una gran cantidad de sımbolos musicales que

esta tesis no abarco. Para aplicaciones con archivos MIDI, por medio de programacion

realizar la lectura de un archivo MIDI y a su vez que se obtenga la partitura con todas

las indicaciones con que dicho archivo cuenta, como cual nota se toca, durante cuanto

tiempo se toca, etc. Al concluirse todo lo anterior se busca la posibilidad de mandar

a una impresora todos los resultados obtenidos para ası tenerlos de forma fısica.

33

Page 41: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Apendice A

Graficos con OpenGL

OpenGL es una API (Application Programming Interface) que permite la inter-

accion con dispositivos graficos ası como multiplataforma para escribir aplicaciones

con las que se obtengan graficos 2D y 3D. Los comandos contenidos en OpenGL ayu-

dan en la transformacion de objetos definidos, gracias a este es posible variar el color,

luz, textura, etc. Cabe recalcar que OpenGL es una librerıa grafica, es decir no cuen-

ta con funciones para controlar audio, red, entre otros. El programa para graficar las

figuras musicales fue escrito en Lenguaje C por medio del Visual C++ 2008. Todo

programa se inicializa con un conjunto de librerias, las cuales incluyen todas las fun-

ciones requeridas para la correcta ejecucion del mismo. En este proyecto se utilizaron

las siguientes librerıas:

#include <windows.h>#include <GL/gl.h>#include <GL/glu.h>#include <math.h>#include "glut.h"#include "glext.h"#include "wglext.h"

Para inicializar el modo grafico, se utilizan los comandos de OpenGl:

glutInit(&argc,argv);glutInitDisplayMode(unsigned int mode);

El primer comando sirve para iniciar la librerıa glut.h, mientras que el segundo

sirve para determinar el modo de visualizacion de OpenGL para la ventana que se

creara.

34

Page 42: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Las ventanas creadas pueden ser de nivel superior, sub-ventanas, o superposi-

ciones. Los comandos para realizar esta operacion son:

glutInitWindowPosition(x,y);glutInitWindowSize(winWidth,winHeight);glutCreateWindow("Nombre de la ventana");

El primero es usado para indicar la posicion inicial de la ventana; el segundo

se utiliza para establecer el tamano inicial de la ventana, donde los parametros win-

Width y winHeight deben ser mayores a cero; el tercer comando se utiliza para reali-

zar la creacion de la ventana, entre comillas se coloca el nombre deseado.

Para establecer los parametros del modo grafico se utiliza la siguiente funcion:

void init(void){

glClearColor(red, green, blue, unknown);glMatrixMode(mode);gluOrtho2D(left,right,bottom,top);

);

Con init(), se establece el color que se utilizara, ademas selecciona la matriz de

trabajo, y se define una region ortografica en dos dimensiones (2D).

Ya que se tiene el modo grafico listo, se puede comenzar a dibujar las figuras

musicales (pag. 20).

Como se vio en el capıtulo 3 se utiliza la siguiente funcion para graficar un B-

spline:

void DrawCuerno(x1,y1,x2,y2,x3,y3,x4,y4,w1,z1,w2,z2,w3,z3,w4,z4,z);

La funcion DrawCuerno necesita las coordenadas de dos b-splines, ya que toma

las dos curvas y por medio de otras funciones y algoritmos matematicos rellena el

area formada entre ellas.

En la siguiente figura, se muestra un ejemplo de un diagrama utilizado como

base para graficar la Clave de Fa, explicada en el capıtulo 5.

35

Page 43: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Figura A.1: Diagrama seccionado de la clave de fa

36

Page 44: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Apendice B

Compilador KL

El compilador KL fue construido por investigadores del Instituto Politecnico

Nacional, tiene como finalidad el procesamiento digital de la musica. KL esta con-

stituido por tres bloques principales: el analizador lexico, analizador sintactico y el

analizador semantico. KL tiene la capacidad de crear instrucciones para MusicTEX,

y este a su vez crea instrucciones para TEX, el cual muestra una partitura y a su

vez la manda a la impresora. Uno de los inconvenientes del KL es que no posee una

biblioteca de graficos para el programa. El siguiente trabajo se encarga de la elabo-

racion de todos los sımbolos musicales necesarios contenidos en un pentagrama. Des-

de otro punto de vista, KL es conformado por varios bloques que estructuran su fun-

cion de manera global. Cada bloque realiza una funcion, ya sea de entrada o de sali-

da, como se muestra en la siguiente figura (Figura 5.1)

37

Page 45: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Figura B.1: Diagrama estructural KL

BLOQUES DE ENTRADA -Es necesario que KL obtenga informacion para

poder realizar la compilacion; MIDI IN - En este bloque, el KL recibe un archivo MI-

DI, con el cual, decodificara toda la informacion necesaria contenida dentro del mis-

mo, como duracion, tempo, nota, compas, etc; PARTITURA (MuSicTeX) - KL recibe

un archivo TeX de musica, donde contiene todos los comandos para mostrar la parti-

tura, por ejemplo, si es un Do4 con duracion de corchea, o si es un instrumento de to-

nalidad baja, como un contrabajo, o un instrumento de tonalidad alta, como un cla-

rinete; INSTRUMENTOS MUSICALES - Por medio de una interfaz MIDI se conecta

uno o varios instrumentos musicales, la cual obtendra la informacion de forma similar

que con el archivo MIDI, pero sera en tiempo real, es decir, como se vaya ejecutando

una pieza musical, se leera la informacion; COMANDOS - Con un programa imple-

mentado para el KL en lenguaje C, se utilizan comandos para colocar los elementos

del pentagrama, por ejemplo do3negra, para que aparezca la nota Do3 con duracion

negra. De esta forma la partitura se hace arbitrariamente.

BLOQUES DE SALIDA - Despues de obtener la informacion de cualquier for-

38

Page 46: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

ma de entrada, KL tiene distintas formas de mostrar un resultado de salida; PARTI-

TURA (MuSicTeX) - KL es capaz de trabajar con LaTeX y su aplicacion a la musica

(MuSicTeX), realizando una conversion de la informacion a comandos LaTeX para

imprimir en pantalla la partitura obtenida; PARTITURA (BIBLIOTECA GRAFI-

CA) - En este bloque busca los elementos graficos contenidos en la biblioteca, por

ejemplo, el pentagrama, clave de sol, el tempo, compas, etc., para generar la partitu-

ra; MIDI OUT - KL puede crear un archivo MIDI con la informacion que ha obtenido,

y mandarlo por ejemplo a un teclado conectado a una salida MIDI con configuracion

maestro-esclavo, y ası se reproducira la pieza musical con la cual se leyeron los datos;

IMPRESORA - Se puede habilitar este bloque para permitir tener conexion con una

impresora fısica e imprimir desde KL.

39

Page 47: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Apendice C

Codigo fuente

En este apartado, se muestra el codigo fuente utilizado para graficar las fun-

ciones.

#include <windows.h>#include <GL/gl.h>#include <GL/glu.h>#include <math.h>#include "glut.h"#include "glext.h"#include "wglext.h"

#define TRUE 1#define FALSE 0

void Recta(GLint gx0,GLint gy0,GLint gx1, GLint gy1);void DrawTxt(GLfloat x, GLfloat y, char *text);void DrawSpline(GLfloat x1,GLfloat y1,

GLfloat x2,GLfloat y2,GLfloat x3,GLfloat y3,GLfloat x4,GLfloat y4,GLfloat z);

void DrawCuerno(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2,GLfloat x3,GLfloat y3,GLfloat x4,GLfloat y4,GLfloat w1,GLfloat z1,GLfloat w2,GLfloat z2,GLfloat w3,GLfloat z3,GLfloat w4,GLfloat z4,GLfloat z);

void DrawCoordsSpline(void);void DrawFigura(void);

GLsizei winWidth=660, winHeight=840;GLbyte texto[80];

static GLint mx1; static GLint my1;static GLint mx2; static GLint my2;static GLint mx0; static GLint my0;

40

Page 48: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

static GLint mx3; static GLint my3;static int Click=TRUE;

void init(void){

glClearColor(0.5,0.5,0.5,1.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,660.0,0.0,840.0);

mx0=286; my0=826;mx1=367; my1=557;mx2=441; my2=379;mx3=286; my3=218;

}void displayFnc(void){

glClear(GL_COLOR_BUFFER_BIT);glColor3f(2.0,2.0,2.0);glClear(GL_COLOR_BUFFER_BIT);DrawFigura();

DrawSpline(mx0,my0,mx1,my1,mx2,my2,mx3,my3,1);//9999DrawCoordsSpline();Drawmarca();glFlush();

}void winReshapeFnc(GLint newWidth, GLint newHeight){

glViewport(0,0,newWidth,newHeight);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0,(GLdouble) newWidth,0.0,(GLdouble) newHeight);winWidth=newWidth;winHeight=newHeight;

}void DrawCursor1(GLint x, GLint y){

glBegin(GL_LINES);glVertex2i(x-10,y);glVertex2i(x+10,y);

glEnd();glBegin(GL_LINES);

glVertex2i(x,y-10);glVertex2i(x,y+10);

glEnd();}void plotPoint(GLint x, GLint y){

glBegin(GL_POINTS);glVertex2i(x,y);

glEnd();}void Teclado(GLint flecha, GLint xMouse, GLint yMouse){

switch(flecha){case GLUT_KEY_LEFT:

41

Page 49: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

if (Click==TRUE) mx1--; elseif (Click==FALSE) mx2--; break;

case GLUT_KEY_RIGHT:if (Click==TRUE) mx1++; else;if (Click==FALSE) mx2++; break;

case GLUT_KEY_UP:if (Click==TRUE) my1++; else;if (Click==FALSE) my2++; break;

case GLUT_KEY_DOWN:if (Click==TRUE) my1--; else;if (Click==FALSE) my2--; break;

default: break;}displayFnc();

}void DrawCoordsSpline(void){

sprintf(texto,"(x0=\% d, y0=\% d)",mx0,my0);DrawTxt(5,80, texto);sprintf(texto,"(x1=\% d, y1=\% d)",mx1,my1);DrawTxt(5,60, texto);sprintf(texto,"(x2=\% d, y2=\% d)",mx2,my2);DrawTxt(5,40, texto);sprintf(texto,"(x3=\% d, y3=\% d)",mx3,my3);DrawTxt(5,20, texto);DrawCursor1(mx0,my0);DrawCursor1(mx1,my1);DrawCursor1(mx2,my2);DrawCursor1(mx3,my3);

}void DrawFigura(void){

//BECUADRODrawCuerno(268,815,268,815,268,204,268,204,286,826,286,826,286,218,286,218,1.0);DrawCuerno(268,538,268,538,442,630,442,630,268,436,268,436,442,531,442,531,1.0);DrawCuerno(268,305,268,305,442,403,442,403,268,204,268,204,442,300,442,300,1.0);

//BEMOLDrawCuerno(182,18,182,18,182,801,182,801,209,41,209,41,209,833,209,833,1.0);DrawCuerno(209,322,219,457,605,418,209,86,209,394,341,546,766,324,287,96,1.0);DrawCuerno(209,41,230,62,221,54,287,96,207,81,205,82,284,132,281,130,1.0);

//BLANCADrawCuerno(226,276,48,210,73,-12,313,35,249,216,80,157,129,27,304,96,1.0);DrawCuerno(226,276,439,358,549,115,313,35,249,216,406,273,498,176,304,96,1.0);DrawCuerno(419,829,419,829,419,153,419,153,455,828,455,828,455,153,455,153,1.0);

//BLANCA INVERTIDADrawCuerno(207,681,207,681,207,7,207,7,243,683,243,683,243,8,243,8,1.0);DrawCuerno(330,804,557,877,639,637,432,561,357,755,469,806,615,710,410,615,1.0);DrawCuerno(330,804,134,735,200,473,432,561,357,755,180,691,220,540,410,615,1.0);

//CALDERONDrawCuerno(49,297,96,697,569,680,616,297,75,297,136,616,552,559,588,297,1.0);DrawCuerno(295,329,293,399,380,391,376,329,295,329,296,279,380,280,376,329,1.0);//CLAVE DE FADrawCuerno(127,675,208,675,233,546,127,535,127,675,26,664,39,536,127,535,1.0);DrawCuerno(594,564,655,561,654,477,594,472,594,564,531,560,535,482,594,472,1.0);DrawCuerno(594,736,652,735,655,649,594,643,594,736,536,728,533,654,594,643,1.0);

42

Page 50: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

DrawCuerno(57,588,74,916,556,896,510,521,104,671,180,857,434,857,398,521,1.0);DrawCuerno(510,521,487,305,273,109,31,113,398,521,370,215,108,116,31,113,1.0);//COMPASILLODrawCuerno(438,599,453,686,564,698,585,599,438,599,444,493,578,494,585,594,1.0);DrawCuerno(546,272,550,291,580,292,585,272,546,272,547,243,585,245,585,272,1.0);DrawCuerno(585,599,533,912,43,858,41,422,529,671,426,824,210,749,215,422,1.0);DrawCuerno(41,422,59,-3,547,-38,585,272,215,422,210,32,531,51,546,272,1.0);

//CODA1DrawCuerno(327,662,508,617,525,221,327,174,327,686,622,704,620,148,327,150,1.0);DrawCuerno(327,662,140,631,141,221,327,174,327,686,29,709,36,139,327,150,1.0);DrawCuerno(16,424,16,424,641,424,641,424,16,412,16,412,641,412,641,412,1.0);DrawCuerno(321,807,321,807,321,29,321,29,332,807,332,807,332,29,332,29,1.0);

//CODA2DrawCuerno(108,707,108,707,108,166,108,166,188,707,188,707,188,166,188,166,1.0);DrawCuerno(188,707,188,707,188,684,188,684,550,707,550,707,550,684,550,684,1.0);DrawCuerno(470,707,470,707,470,166,470,166,550,707,550,707,550,166,550,166,1.0);DrawCuerno(188,189,188,189,188,166,188,166,470,189,470,189,470,166,470,166,1.0);DrawCuerno(325,825,325,825,325,51,325,51,335,825,335,825,335,48,335,48,1.0);DrawCuerno(20,445,20,445,20,432,20,432,638,444,638,444,638,431,638,431,1.0);

//CORCHEADrawCuerno(122,62,43,187,322,291,354,174,122,62,158,-8,404,17,354,174,1.0);DrawCuerno(342,122,342,122,342,792,342,792,367,122,367,122,367,792,367,792,1.0);DrawCuerno(349,837,349,837,349,792,349,792,349,837,349,837,367,792,367,792,1.0);DrawCuerno(349,837,364,819,398,739,418,720,368,623,371,628,378,623,410,596,1.0);DrawCuerno(418,720,524,580,621,398,449,227,410,596,486,528,585,440,449,227,1.0);

//CRESCENDODrawCuerno(641,596,641,596,9,428,9,428,641,551,641,551,101,401,101,401,1.0);DrawCuerno(101,452,101,452,641,301,641,301,9,428,9,428,641,257,641,257,1.0);

//DIMINUENDODrawCuerno(18,600,18,600,650,431,650,431,18,552,18,552,557,401,557,401,1.0);DrawCuerno(650,431,650,431,18,256,18,256,557,456,557,456,18,305,18,305,1.0);

//DOS MEDIOSDrawCuerno(35,688,49,609,151,631,144,688,35,688,38,816,158,707,144,688,1.0);DrawCuerno(35,688,24,799,185,809,241,782,99,744,89,768,184,778,200,749,1.0);DrawCuerno(241,782,325,742,335,630,199,585,200,749,241,697,201,621,169,606,1.0);DrawCuerno(169,606,121,567,4,530,30,440,199,585,99,533,69,528,55,440,1.0);DrawCuerno(55,440,65,506,121,492,165,454,119,541,141,548,199,540,213,531,1.0);DrawCuerno(213,531,245,512,278,503,284,560,165,454,232,402,318,435,307,560,1.0);DrawCuerno(48,474,48,474,99,546,99,546,61,469,61,469,122,536,122,536,1.0);DrawCuerno(163,456,163,456,209,531,209,531,170,453,170,453,215,528,215,528,1.0);DrawCuerno(558,604,558,604,69,226,69,226,580,577,580,577,92,200,92,200,1.0);DrawCuerno(367,296,381,217,483,239,476,296,367,296,370,424,490,315,476,296,1.0);DrawCuerno(367,296,356,407,517,417,573,390,431,352,421,376,516,386,532,357,1.0);DrawCuerno(573,390,657,350,667,238,531,193,532,357,573,305,533,229,501,214,1.0);DrawCuerno(501,214,453,175,336,138,362,48,531,193,431,141,401,136,387,48,1.0);DrawCuerno(387,48,397,114,453,100,497,62,451,149,473,156,531,148,545,139,1.0);DrawCuerno(545,139,568,120,610,111,616,168,497,62,564,10,650,43,639,168,1.0);DrawCuerno(380,82,380,82,431,154,431,154,391,77,391,77,451,141,451,141,1.0);DrawCuerno(495,64,495,64,541,139,541,139,502,61,502,61,547,136,547,136,1.0);//LIGADURA ABAJODrawCuerno(11,458,154,396,385,355,656,458,11,458,127,347,513,334,656,458,1.0);//LIGADURA ARRIBADrawCuerno(7,377,112,497,537,497,652,377,7,377,101,425,405,492,652,377,1.0);

//NEGRADrawCuerno(135,71,30,204,382,389,454,229,135,71,195,3,471,5,454,229,1.0);

43

Page 51: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

DrawCuerno(431,264,431,264,431,831,431,831,455,189,455,189,455,831,455,831,1.0);//NEGRA INVERSA

DrawCuerno(207,681,207,681,207,7,207,7,243,683,243,683,243,8,243,8,1.0);DrawCuerno(330,804,557,877,639,637,432,561,330,804,134,735,200,473,432,561,1.0);

//PARRAFODrawCuerno(523,538,523,597,610,599,610,538,523,538,524,470,617,476,610,538,1.0);DrawCuerno(45,295,40,353,135,355,135,295,45,295,43,232,137,229,135,295,1.0);DrawCuerno(224,804,136,804,136,671,224,673,224,804,314,799,310,677,224,673,1.0);DrawCuerno(433,160,346,154,346,32,433,28,433,160,516,163,529,32,433,28,1.0);DrawCuerno(224,804,15,814,-51,480,287,359,168,776,38,715,61,533,367,475,1.0);DrawCuerno(367,475,668,407,655,-13,433,28,287,359,615,282,608,96,490,58,1.0);DrawCuerno(554,775,554,775,82,56,82,56,573,777,573,777,103,58,103,58,1.0);

//PUNTILLODrawCuerno(25,469,71,834,578,890,620,468,25,469,43,58,614,45,620,468,1.0);

//REDONDADrawCuerno(14,410,65,721,626,665,639,407,177,394,64,566,300,715,482,404,1.0);DrawCuerno(14,410,29,133,625,131,639,407,177,394,361,126,549,251,482,404,1.0);

//REPETICION COMPAS DERECHADrawCuerno(125,528,121,574,202,580,203,528,125,528,122,473,205,471,203,528,1.0);DrawCuerno(125,322,124,372,201,379,203,322,125,322,130,268,198,270,203,322,1.0);DrawCuerno(283,835,283,835,283,6,283,6,304,835,304,835,304,6,304,6,1.0);DrawCuerno(363,835,363,835,363,6,363,6,486,835,486,835,486,6,486,6,1.0);//REPETICION COMPAS IZQUIERDADrawCuerno(205,833,205,833,205,7,205,7,328,833,328,833,328,7,328,7,1.0);DrawCuerno(386,833,386,833,386,7,386,7,404,833,404,833,404,7,404,7,1.0);DrawCuerno(484,514,490,561,562,566,563,514,484,514,490,463,561,465,563,514,1.0);DrawCuerno(484,313,484,373,567,366,563,313,484,313,488,263,561,261,563,313,1.0);// REPETICION DE SECCIONDrawCuerno(87,586,96,663,188,650,191,586,87,586,98,516,188,526,191,586,1.0);DrawCuerno(470,325,473,397,567,397,573,325,470,325,476,265,566,259,573,325,1.0);DrawCuerno(540,716,540,716,32,216,32,216,645,716,645,716,136,216,136,216,1.0);

//SEIS OCTAVOSDrawCuerno(218,684,220,630,312,608,321,684,218,684,240,774,333,736,321,684,1.0);DrawCuerno(233,723,217,767,140,718,150,579,298,732,203,822,-24,706,108,449,1.0);DrawCuerno(108,449,163,375,256,405,274,416,173,565,130,463,181,396,233,440,1.0);DrawCuerno(150,579,321,674,400,481,274,416,173,565,246,630,274,470,233,440,1.0);DrawCuerno(150,579,150,579,98,476,98,476,173,565,173,565,119,464,119,464,1.0);DrawCuerno(482,447,353,426,346,316,432,266,497,422,381,411,468,309,542,302,1.0);DrawCuerno(482,447,631,455,678,357,579,283,497,422,590,426,608,344,542,302,1.0);DrawCuerno(432,266,287,183,410,58,513,85,464,248,366,182,438,100,562,107,1.0);DrawCuerno(579,283,673,239,671,100,513,85,464,248,607,199,590,108,562,107,1.0);DrawCuerno(432,266,432,266,542,302,542,302,464,248,464,248,579,283,579,283,1.0);DrawCuerno(103,247,103,247,549,626,549,626,122,219,122,219,618,597,618,597,1.0);DrawCuerno(578,624,578,624,89,246,89,246,600,597,600,597,112,220,112,220,1.0);

//SEMICORCHEADrawCuerno(122,62,43,187,322,291,354,174,122,62,158,-8,430,16,354,174,1.0);DrawCuerno(342,122,342,122,342,792,342,792,367,122,367,122,367,792,367,792,1.0);DrawCuerno(349,837,349,837,349,792,349,792,349,837,349,837,367,792,367,792,1.0);DrawCuerno(349,833,366,811,486,698,494,684,369,685,473,631,370,686,477,626,1.0);DrawCuerno(494,684,556,624,547,549,531,467,477,626,516,602,523,571,519,493,1.0);DrawCuerno(369,658,410,606,489,551,519,493,369,533,399,512,491,478,514,425,1.0);DrawCuerno(519,493,532,474,584,354,452,167,514,425,540,330,481,226,452,167,1.0);

//SEMICORCHEA INVERTIDADrawCuerno(384,801,227,737,306,565,468,632,384,801,513,868,649,723,468,632,1.0);DrawCuerno(293,719,293,719,293,50,293,50,323,719,323,719,323,50,323,50,1.0);

44

Page 52: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

DrawCuerno(310,6,104,227,116,188,126,392,292,153,130,227,137,259,145,345,1.0);DrawCuerno(292,178,52,386,102,487,211,666,292,306,258,346,30,324,211,666,1.0);DrawCuerno(310,6,310,6,310,50,310,50,299,30,299,30,299,50,299,50,1.0);

//SILENCIO DE CORCHEADrawCuerno(97,706,112,866,299,825,303,706,97,706,101,584,299,548,303,706,1.0);DrawCuerno(97,706,80,588,380,494,554,755,284,636,389,622,503,753,526,779,1.0);DrawCuerno(526,779,526,779,244,63,244,63,554,755,554,755,265,14,265,14,1.0);

//SILENCIO DE REDONDA Y BLANCADrawCuerno(10,599,10,599,10,366,10,366,648,599,648,599,648,366,648,366,1.0);

//SILENCIO SE SEMICORCHEADrawCuerno(189,759,205,843,310,837,328,759,189,759,185,653,344,653,328,759,1.0);DrawCuerno(114,473,121,564,237,553,251,473,114,473,113,371,259,370,251,473,1.0);DrawCuerno(315,702,368,700,451,760,476,810,189,759,217,607,442,692,448,730,1.0);DrawCuerno(235,418,249,406,388,430,404,567,114,473,98,362,312,358,366,437,1.0);DrawCuerno(474,816,474,816,254,40,254,40,497,790,497,790,285,16,285,16,1.0);

//SOSTENIDODrawCuerno(265,831,265,831,265,18,265,18,291,808,291,808,291,35,291,35,1.0);DrawCuerno(400,831,400,831,400,18,400,18,426,808,426,808,426,35,426,35,1.0);DrawCuerno(204,571,204,571,481,674,481,674,204,460,204,460,481,570,481,570,1.0);DrawCuerno(204,313,204,313,481,418,481,418,204,205,204,205,471,310,481,310,1.0);

//TRES CUARTOSDrawCuerno(37,673,37,747,135,747,139,673,37,673,41,612,132,612,139,673,1.0);DrawCuerno(48,712,67,755,206,789,267,735,111,723,103,755,203,752,207,695,1.0);DrawCuerno(267,735,314,694,330,576,112,576,207,695,206,675,232,609,112,600,1.0);DrawCuerno(29,491,44,543,113,564,137,491,29,491,30,405,136,430,137,491,1.0);DrawCuerno(112,600,212,601,332,578,295,468,112,576,146,573,223,564,215,488,1.0);DrawCuerno(295,468,269,383,72,377,45,445,215,488,225,441,127,388,117,448,1.0);DrawCuerno(450,425,447,423,455,283,348,188,577,425,576,425,487,289,380,188,1.0);DrawCuerno(348,188,348,188,635,188,635,188,348,160,348,160,635,160,635,160,1.0);DrawCuerno(500,263,495,152,519,84,454,87,593,351,601,178,572,68,633,87,1.0);DrawCuerno(454,87,454,87,633,87,633,87,454,57,454,57,633,57,633,57,1.0);DrawCuerno(89,241,89,241,581,616,581,616,108,215,108,215,603,591,603,591,1.0);

//TRESILLODrawCuerno(22,471,22,471,22,413,22,413,31,471,31,471,31,413,31,413,1.0);DrawCuerno(22,471,22,471,255,471,255,471,22,462,22,462,255,462,255,462,1.0);DrawCuerno(401,471,401,471,634,471,634,471,401,462,401,462,634,462,634,462,1.0);DrawCuerno(625,471,625,471,625,413,625,413,634,471,634,471,634,413,634,413,1.0);DrawCuerno(314,495,314,478,336,481,329,505,314,495,329,526,346,517,329,505,1.0);DrawCuerno(314,495,347,563,409,462,315,467,329,505,343,533,369,482,317,474,1.0);DrawCuerno(317,474,401,464,296,373,294,448,315,467,357,463,320,411,307,429,1.0);DrawCuerno(294,448,296,458,326,455,307,429,294,448,295,406,339,422,307,429,1.0);}void mousePtPlot(GLint button, GLint action, GLint xMouse, GLint yMouse){

if (button==GLUT_LEFT_BUTTON && action== GLUT_DOWN){

mx1=xMouse;my1=winHeight-yMouse;Click=TRUE;

}elseif (button==GLUT_RIGHT_BUTTON && action== GLUT_DOWN){

mx2=xMouse;my2=winHeight-yMouse;Click=FALSE;

45

Page 53: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

}if (action==GLUT_DOWN) displayFnc();

}int main(int argc, char** argv){

glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(winWidth,winHeight);glutCreateWindow("becuadro");init();glutDisplayFunc(displayFnc);glutReshapeFunc(winReshapeFnc);glutMouseFunc(mousePtPlot);glutSpecialFunc(Teclado);glutMainLoop();return(1);

}void DrawTxt(GLfloat x, GLfloat y, char *text){

char *p;glRasterPos2f(x,y);for (p = text; *p; p++) glutBitmapCharacter(GLUT_BITMAP_9_BY_15,*p);

}void DrawCuerno(GLfloat x1,GLfloat y1,

GLfloat x2,GLfloat y2,GLfloat x3,GLfloat y3,GLfloat x4,GLfloat y4,GLfloat w1,GLfloat z1,GLfloat w2,GLfloat z2,GLfloat w3,GLfloat z3,GLfloat w4,GLfloat z4,GLfloat z)

{GLint i;GLint j;

GLfloat t;GLint x;GLint y;GLint x11;GLint y11;for(t=0.0;t<1;t+=0.0001){

x = pow((1.0-t),3.0)*(x1*z) + 3.0*t*pow((1.0-t),2.0)*(x2*z)+ 3*pow(t,2.0)*(1.0-t)*(x3*z)+ pow(t,3.0)*(x4*z) ;

y = pow((1.0-t),3.0)*(y1*z) + 3.0*t*pow((1.0-t),2.0)*(y2*z)+ 3*pow(t,2.0)*(1.0-t)*(y3*z)+ pow(t,3.0)*(y4*z);

x11 = pow((1.0-t),3.0)*(w1*z) + 3.0*t*pow((1.0-t),2.0)*(w2*z)+ 3*pow(t,2.0)*(1.0-t)*(w3*z)+ pow(t,3.0)*(w4*z) ;

y11 = pow((1.0-t),3.0)*(z1*z) + 3.0*t*pow((1.0-t),2.0)*(z2*z)+ 3*pow(t,2.0)*(1.0-t)*(z3*z)+ pow(t,3.0)*(z4*z);

46

Page 54: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

plotPoint(x,y);plotPoint(x11,y11);Recta(x,y,x11,y11);

}}void Recta(GLint x,GLint y,GLint x11, GLint y11){

GLint t;GLfloat b, j, k, m;for (t = 0; t <= 1; t++)

{float dy = y11 - y;float dx = x11 - x;float stepx, stepy;if (dy < 0) { dy = -dy; stepy = -1; } else { stepy = 1; }if (dx < 0) { dx = -dx; stepx = -1; } else { stepx = 1; }//dy <<= 1;dy *= 2;dx *= 2;//dx <<= 1;plotPoint(x,y);if (dx > dy){

float fraccion = dy - (dx * 2); //(dx >> 1);while (x != x11){

if (fraccion >= 0){

y += stepy;fraccion -= dx;

}x += stepx;fraccion += dy;plotPoint(x,y);

}}else{

float fraccion = dx - (dy * 2); //(dy >> 1);while (y != y11){

if (fraccion >= 0){

x += stepx;fraccion -= dy;

}y += stepy;fraccion += dx;plotPoint(x,y);

}}

}}

void DrawSpline(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2,GLfloat x3,GLfloat y3,

47

Page 55: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

GLfloat x4,GLfloat y4,GLfloat z)

{GLint i;GLint j;

GLfloat t;GLfloat x;GLfloat y;for(t=0.0;t<1;t+=0.01){

x = pow((1.0-t),3.0)*(x1*z) + 3.0*t*pow((1.0-t),2.0)*(x2*z)+ 3*pow(t,2.0)*(1.0-t)*(x3*z)+ pow(t,3.0)*(x4*z) ;

y = pow((1.0-t),3.0)*(y1*z) + 3.0*t*pow((1.0-t),2.0)*(y2*z)+ 3*pow(t,2.0)*(1.0-t)*(y3*z)+ pow(t,3.0)*(y4*z);

plotPoint(x,y);}

}

A continuacion, se presenta el codigo fuente del programa kgk.c

#include <windows.h>#include <stdio.h># include <string.h>unsigned long error;void man(void);int graficar(char s[]);char string[80];int main(void){

char *token;printf("K2K: Draw figures. (c) Dr. Max P.G., fabruary 9 2011.\n");printf("Press [quit] for quit or [help] for help.\n");for(;;){

printf(">>");gets(string);token=strtok(string," ");if (token)

{printf("[%s]",token);if (strcmp("quit",token)==0) break;

graficar(token);}

while(token){

token=strtok(’\0’," ");if(token)

{printf("[%s]",token);

graficar(token);}

elseprintf("\n");

48

Page 56: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

}}

return(0);}

int graficar(char nota[]){

if (strcmp("becuadro",nota)==0){

system("..\\figuras\\becuadro\\becuadro.exe" );return(0);

}if (strcmp("bemol",nota)==0){

system("..\\figuras\\bemol\\bemol.exe" );return(0);

}if (strcmp("blanca",nota)==0)

{system("..\\figuras\\blanca\\blanca.exe" );return(0);

}if (strcmp("blancainv",nota)==0)

{system("..\\figuras\\blancainv\\blancainv.exe" );return(0);

}if (strcmp("cuatrocuartos",nota)==0)

{system("..\\figuras\\cuatrocuartos\\cuatrocuartos.exe" );return(0);

}if (strcmp("grcsol1",nota)==0)

{system("..\\figuras\\grcsol1\\grcsol1.exe" );return(0);

}printf("\nFigura desconocida:");return(0);

}void man(){

printf("\n");printf("blanca\n");

printf("clavefa\n");printf("coda1\n");

printf("compas\n");printf("cuatrocuartos\n");printf("fin\n");printf("ligaduraup\n");printf("puntillo\n");printf("repcompasizq\n");printf("seisoctavos\n");printf("sepcomp\n");printf("silsemicor\n");

49

Page 57: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

printf("tresillo\n");}

A continuacion se presenta el codigo fuente del programa para realizar el pen-tagrama penta.c

#include "../common/openglsb.h"#include<math.h>void grlineas(GLint spos);void grcsol(GLfloat z,GLfloat x, GLfloat y);void grcorl(GLfloat z, GLfloat x, GLfloat y);void grsil4(GLfloat z, GLfloat x, GLfloat y);void grnota4l(GLfloat z, GLfloat x, GLfloat y);void grclvfa(GLfloat z, GLfloat x, GLfloat y);

void mimain(void){

glClear(GL_COLOR_BUFFER_BIT);grlineas(10);grcsol(0.05,10,740);grcorl(0.027,50,740);grsil4(0.025,90,750);

grnota4l(0.03,110,745);grclvfa(0.03,160,745);glFlush();

}

void init(void){

glClearColor(0.0,0.0,1.0,0.0); // color de la ventana.glMatrixMode(GL_PROJECTION); // Parametros de proyecciongluOrtho2D(0.0,660.0,0.0,840.0); // xmax=660.0 ymax=840.0

}

int main(int argc, char **argv){

glutInit(&argc,argv); // Iniciar glutglutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // modo de display.glutInitWindowPosition(100,100);glutInitWindowSize(660,840);glutCreateWindow("penta.c -pentagrama con componentes");init();glutDisplayFunc(mimain);glutMainLoop();return(0);

}

50

Page 58: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Bibliografıa

[1] Richard S.Wright Jr.,Michael Sweet. “Programacion en Open GL”EdicionesAnaya Multimedia,1997.

[2] Carl De Boor “A practical guide to splines”Springer

[3] Chui,Charles K “Multivariate Splines”

[4] Larry L.Schumaker “Spline Functions:Basic theory”Third Edition CambridgeMathematical Library

[5] Moncada Garcıa Francisco “La mas sencilla,util y practica teorıa de la musica”

[6] Latham Alison “Diccionario enciclopedico de la musica”

[7] Hill Francis S. “Computer graphics: Using Open GL”

[8] Pena Guerrero Maximino “Captura de Multiples Eventos MIDI en tiempo deejecucion”, Tesis Doctorado.

[9] Pena Guerrero Maximino “Proyecto KL”, Proyecto de Investigacion.

[10] Alberto Williams “Teorıa de la musica”

[11] Harry y Michael Baxter “Como leer musica”2007,Ediciones Robinbook

[12] Narcis Llongueras(Traduccion y Adaptacion) “Guıa de Lenguaje Musi-cal”Editorial Icaria

[13] Joost Langeveld “Escuchar y mirar”,Teorıa de la musica. Ediciones Akal, 2002.

[14] Felipe Pedrell “Diccionario Tecnico de la musica”Editorial Maxtor, 2009

[15] Roger Evans “Como leer musica”Editorial Edaf

[16] Dave Astle, Kevin Hawkins “Beginning OpenGL”,Game Programming. 2004 byPremier Press

[17] Robert Whitrow “OpenGL Graphics Through Applications”Springer

51

Page 59: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Φ

52

Page 60: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

Glosario

ALTERACION: Se le llama ası a la dislocacion de tono, puede ser becuadro, be-

mol o sostenido.

BEMOL: Alteracion que se coloca antes de una nota para que disminuya un

semitono.

BECUADRO: Sımbolo musical que se encarga de anular el efecto de un sostenido

o bemol, se coloca a la izquierda de una nota.

BLANCA: Es una figura musical que dura la mitad de una redonda, su valor es

igual a 12.

B-SPLINE: Funcion spline que posee el mınimo apoyo en relacion a un determi-

nado grado,suavidad y particion del dominio.

BPM: Beats Per Minute: Unidad empleada para medir el tempo en musica.

CALDERON: Sımbolo musical que indica que se debe alargar mas tiempo la du-

racion de una nota, hasta que el director o la partitura indique la nota siguiente.

CLAVE MUSICAL: Sımbolo que tiene la funcion de asociar las notas musicales

con las lıneas o espacios del pentagrama.

CODIGO FUENTE: Conjunto de lıneas de comando que un programa o soft-

ware interpreta como instrucciones para realizar alguna accion.

COMPAS MUSICAL: Entidad metrica musical,conformada por varias unidades

de tiempo.

CORCHEA: Figura musical que es igual a 18del valor de la figura denominada re-

donda.

CRESCENDO: Se encarga del incremento de volumen y se coloca donde inicia

una alteracion y permanece ası hasta que se de una nueva indicacion.

53

Page 61: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

DIMINUENDO: Se encarga de la disminucion de volumen,se coloca al inicio de

una alteracion y tiene efecto hasta donde se interrumpe dicha alteracion.

FIGURA MUSICAL: Sımbolos que indican el tiempo que duran las notas musi-

cales.

FUSA: Equivale a 132

de valor de la figura redonda, dura la mitad de una semi-

corchea.

INTERPOLACION: Permite encontrar una serie de datos dentro de un interva-

lo conociendo los valores de los extremos.

KL: Kernel for Music Languaje Compilador construido por investigadores del In-

stituto Politecnico Nacional para el procesamiento digital de la musica.

METRONOMO: Dispositivo musical utilizado para indicar el tempo de las com-

posiciones musicales.

MIDI: Musical Instrument Digital Interface, Protocolo industrial estandar que per-

mite la comunicacion entre los ordenadores, secuenciadores, sintetizadores y otros dis-

positivos electronicos musicales.

MusicTEX: Paqueterıa de LATEXpara la escritura de partituras musicales po-

lifonicas.

NEGRA: Es una figura musical que equivale a 14, dura la mitad de una blanca.

NOTA: Sımbolo que representa un determinado sonido musical.

OPEN GL: Es una API (Application Programming Interface)que permite la in-

teraccion con dispositivos graficos ası como multiplataforma para escribir aplicaciones

con las que se obtengan graficos en 2D y 3D.

PENTAGRAMA: Sımbolo grafico en el que se centra la grafica musical, la cual

representa una melodıa.

POLINOMIO: Es una expresion algebraica compuesta de dos o mas monomios.

54

Page 62: INSTITUTO POLITECNICO NACIONAL ESCUELA ... - max.esimez.ipn… · INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA ZACATENCO ICE Biblioteca de Funciones

PUNTO: Figura geometrica adimensional que no posee area, longitud o volumen,

indica una posicion en el espacio.

REDONDA: Figura musical con valor igual a 1,es decir se toma como unidad.

SEMICORCHEA: Figura musical que equivale a 116, dura la mitad de una corchea.

SEMIFUSA: Esta figura musical tiene un valor equivalente a 164

del valor de la re-

donda, dura la mitad de una fusa.

SILENCIO: Representa la pausa, intervalo de tiempo en el que la voz o el instru-

mento no genera sonido alguno.

SISTEMA DE COORDENADAS: Conjunto de valores y puntos que permiten

definir unıvocamente la posicion de cualquier punto de un espacio.

SOSTENIDO: Sımbolo musical, encargado de elevar medio tono la altura de la

nota inmediata derecha.

SPLINE: Curva definida por segmentos mediante polinomios.

TEMPO: Velocidad a la que debe ser ejecutada la obra musical. Se mide en BPM

(Beats Per Minute)

TONALIDAD: Asociacion de bemoles y sostenidos representados junto a la clave

musical, indica la escala en que se expresara la musica.

VISUAL STUDIO: Entorno de Desarrollo Integrado (IDE) para sistemas ope-

rativos Windows que soporta diferentes lenguajes de programacion (C,C++,C#), el

cual permite crear aplicaciones que se pueden intercomunicar entre estaciones de tra-

bajo, paginas web y dispositivos moviles.

55