• No se han encontrado resultados

UNIVERSIDAD AUTONOMA METROPOLITANA IZTAPALAPA PROYECTO DE INVESTIGACION "BIBLIOTECA DE FUNCIONES GRAFICAS Y GRFICACION POLIEDRAL"

N/A
N/A
Protected

Academic year: 2018

Share "UNIVERSIDAD AUTONOMA METROPOLITANA IZTAPALAPA PROYECTO DE INVESTIGACION "BIBLIOTECA DE FUNCIONES GRAFICAS Y GRFICACION POLIEDRAL""

Copied!
124
0
0

Texto completo

(1)

CLa&&ddli

PROVECTO DE INyESllGACJON BIBLIOTECA DE FUNCJONES GRAFleAS Y GRAFlCACJON PWUlRAI

UNIVERSIDAD AUTONOMA METROPOLITANA

IZTAPALAPA

PROYECTO DE INVESTIGACION

"BIBLIOTECA DE FUNCIONES GRAFICAS

Y

GRFICACION POLIEDRAL"

... ... :.; ~. ... ...

REALIZADO POR:

HERNANDEZ HERNADEZ EVERARDO MISAEL

90323392

LUG0 MARTINEZ ELOY DAVID

90322873

ORTIZ MARTINEZ OSVALDO

90325121

ASESOR DE PROYECTO:

MIGUEL ANGEL PIZAÑA LOPEZ

México, D.F. octubre de 1995.

*

(2)

Caalbartldti

BIBUOlECA DE FUNCIONES GRAHCAS V GRAFlCAMON PWEDRAL

(3)

Caa*dti

BIBUOTECA DE FUNCJONES G W C A S Y GRAFICACJON PWEDRAL

.4

mis padres y hermanos.

A los profesores: Fernándo Vallejo, Guillermo Oaxaca, Hans Fetter, Eduardo Rico, y en especial a Miguel Angel Pizaña López quien con su dedicación hizo posible la realización de éste proyecto.

A mis amigos Eloy, Everardo, Hector, Alejandro, Hidolfo, Liliana Awedondo, Gaby y hermana,

Beatriz Polo, Alicia y Joel, Laura y Pedro, Miguel Paredes, Javier Herrera, Poncho y Chino, Hugo y primas, Alejandra y hermana, Moisés y Beatriz, Rosy y Selene, los cuales de una u otra manera influyeron en mí para

culminar mi carrera de licenciatura.

Osvaldo.

, . . . . . . . . ._

(4)

A

DIOS

por darme la vida, salud y la oportunidad de culminar mi licenciatura. A mis padres Graciela y Eloy.

A mis hermanos Lilián, Oscar y Lupita

A mi prima Marianela, a todos mis.familiares y amigos.

A Elva por su apoyo y comprensión durante toda mi carrera; a todos mis profesores; a mis amigos y

compañeros de la universidad; y a todos aquellos que de forma directa ó indirecta me ayudaron a culminar

mi licenciatura; especialmente a mi asesor Miguel Angel Pizaña López que siempre estuvo dispuesto a

ayudarme en la realización de este proyecto; a Bernardo Guerrero por el apoyo proporcionado para poder

editar e imprimir este trabajo.

Eloy.

(5)

Caadbmdtam

BIBLIOTECA DE FUNcIDNES 6RMCA.S Y 6RMCABON POUEDRAl

Primero que nada agradezco a Dios por permitirme vivir estos momentos y poder lograr una de mis principales metas en la vida.

Dedico este trabajo a :

A mi madre Maria Henández, por todo el apoyo que me ha brindado durante toda mi vida, por su

amor y comprensión, ya que igual que mis hermanas Angélica, Verónica y Rocío han sido una de las

principales motivaciones para que pudiera terminar mz carrera.

A toda mi familia, principalmente a mis abuelos Ignacio Hernández y Angélica Ortíz ya que sin ellos no hubiera podido llegar a ser lo que soy y lograr lo que tengo.

A Edith por haber sido parte importante de este logro, por todo su cariño, apoyo y comprensidn en esta etapa tan importante de mi vida.

A la familia Enrlquez Ovando por su amistad apoyo y motivación, sobretodo a Araceli por su gran amistad y todo el apoyo brindado en momentos dificiles no sólo de la carrera.

Everardo Misael

(6)

1

INDICE

GENERAL

Pag. PROYECTO DE INWSTIGACI~N

“Biblioteca de funciones gráficas para Turbo C y graficación poliedral Objetivo general

Objetivos particulares Justificación

Requisitos

4

5 6

6 7 8

8

8 9 9

so

10

10

10

10 11

11

PARTE

2

6

6

DE LAS FUNCIONES GRÁHCAS DE LA BIBLIOTECA

~

~

~

~

~

~

~

ó

~

GVESA256” 13

Libreria de funciones gráficas GvESA256 14

Introducción 14

El ambiente para la programación 14

Requerimientos 14

Descripción de las funciones 15

bar() 15

circle() 16

cleardevice() 57

clearviewport() 17

(7)

11

BIBUOlEeA DE FUNAEIONES GRAHGAS Y GRARGAAEION PWEDRAL

drawPoly0 ellipse() fillellipse() fillPOlY0 flodfill() getgraphmode0 getmaxcolor() getmaxx() getmaxyo getpixel() getxo getyo

- Hline() initgraph() line() linerel()

lineto() ... . . .

moverel() .;Y.

- Vline()

PARTE 3 "DESCRIPCI~N DE LAS FUNCIONES PARA LA GRAFICACI~N POLIEDRAL"

Técnicas de despliegue tridimensional Proyección en paralelo

Proyección en perspectiva draw_3d() drawP3d() proyectaquntos() trasladar() rotar() cornparaglanos() Manual técnico 19 20 21 22 23 25 26 26 26 27 27 27 27 28 28 28 29 30 30 30 30 31 31 32 32 32 32 32 33 34 34 34 34 35 35 35 36 36 37

(8)

m

111 ...

PROYECTO DE INMSllGAClON

Caalb*tldtm

BIBLIOTECA DE FUNClONES GRAFICAS Y GRAFICACION PWEDRAL

PARTE 4 “ELEMENTOS DE COMPILADORES PARA IMPLEMENTAR LA FUNCIÓN

EVALUADORA DE PUNTOS” 38

Descripción de las funciones para generación de puntos a gráficar 39

Análisis del programa fuente 40

Análisis Léxico 40

Análisis sintáctico 41

Análisis Léxico 42

Función del analizador léxico 43

Análisis Sintáctico 44

Función del analizador sintáctico 45

APENDICE B “EL CODIGO FUENTE DE LA LIBRERIA GRÁFICA GVESAXV vesa_getinfo() vesa_getmodeinfo() initgraph() busca-font-bios() ini-tabla-sin-cos() get_graphmode() setgraphmode() restorecrtmode() rectangle() moveto() moverel() lineto() linerelo line()

- Vline()

47 48 48 49 49 50 51 52 52 53 53 54 54 56 59 59 60 61 61 61 62 62 62 62 62 63 63 63 65

(9)

iv

Cgadimdlsrm

BIBLIOTECA DE FUNCJONES GRALlCAS Y GRAFICACJON POUEDRAL

APENDICE C "EL CODIGO FUENTE PARA LA GRAFICACION POLIEDRAL" definiciones de macros, variables globales y estructuras de datos utilizadas definición del punto de observación

prototipos de las funciones de análisis vectorial drawP3d() cornparaglanos() transformagtos-nvo-sistema() proyectaguntos() resta-vector() suma-vector() producto-cruz() productogunto() divide-vector() normaliza-vector() magnitud() 66 67 67 68 69 70 70 70 71 72 72 73 74 75 75 75 75 76 76 77 77 78 78 78 80 80 80 80 80 80 81 82 83 83 83 85 86 87 87 87 87 88 88 88 88

(10)

V

C a a d i m d l i

BlBUOlEEA DE NNWONES GRAFIEAS V GRAFIEACION PWEDRAL

transformaciones-interactivaso getkey0

trasladar()

moverglanogroyección() rotar()

89 90 90 92 92

APENDICE D "EL CODIGO FUENTE PARA LA EVALUACION Y GENERACION DE PUNTOS DE LAS

FUNCIONES A GRAFICAR " 95

declaración de la estructura que contiene los tokens y su inicialización 96 prototipos de las funciones utilizadas 96

max-min() 97 busca() 98

evalua() 98

BIB1

101 102 1 04

110

110 112

113.

(11)

PROVECTO DE INVESTIGAUON csSaabsr$dllmm BIBUOTECA UE FUNUONES GRAFICAS Y GRAFlCA,l\aON PWIEURAI

PROYECTO DE I N V E S T I G A C I ~ N

"

BIBLIOTECA

DE

FUNClONES GRÁFICAS

PARA

TURBO

C

Y

GRAFlCACIdN POLIEDRAL

"

Objetivo General:

Elaboración dc una libreria de funciones grAikas y de graficación poliedral para el estandard SVGA (VESA), con funciones altamcnte optimizadas en tiempo.

P

(12)

PROVECTO DE INVESTIGACION

h*dlkIW

RIRUOTECA DE FUNCIONES GRAFICAS V GRAFICACJON POLIEURAL

Justificación:

-

El Turbo C para DOS no cucnta con t a l librería de funcioncs .

-

El proyecto es altamcnte fonnati\,o.

-

El producto final scrá útil cn el desarrollo dc futuros proyectos de investigación relacionados con la graficación por computadora.

S

UNIVERSIDAD AUTONOMA METROPOLITANA "IAAPALAPA"

(13)

PROYECTO DE INMSTIGACION

caaaimaltii

BIBUOECA DE FUNUONES GRAFICAY Y GRAFICACION POLIEDRAL

S Requisitos:

-

Serán necesarios conocimientos profundos de programación en “C“ y ensanblador. así como el manejo de interrupciones

-

También será necesario usar intcnsivamente herramientas de álgebra lincal y análisis vectorial

-

Para el desarrollode dicho proyecto. serán necesarias computadoras -186 o superior

.

con tarjeta de video SVGA y

monitor SVGA, cornpatiblcs con el cstandard

VESA.

S

S

(14)

S

PROVECTO DE INVESTIGACXON RIBUOTECA DE FUNUONES GRAFICAS Y GRAFKACION POUEDRAL

UNIVERSIDAD AUTONOMA METROPOLITANA "ITTAPALAPA"

(15)

PROYECTO DE INWESTIGAUON CSnaMdtmpo BIRLIOTEGA U€ NNCIONES GRAFICAS Y GRAFlGAClON PWEDRAL

Breve historia

Cerca de los SOs la grafcación solo cubría algunos de los campos especializados, ya que el hardware era muy costoso y alsapliccaciones eran pocas. Entonces alscomputadoras personales con "rasters grafkos" integrados, como Macintosh y el IBM PC, popularizaron el uso de mapeo de bits. Un mapeo de bits es una representación de "ceros" y "unos" de un arreglo de puntos llamados pixeles sobre la pantalla. Esto dló lugar a que alsaplicaciones pronto progresaran. Ello permitió a millones de usuarios un control simple, bajo costo en los programas de aplicación, tales como hoja de cálculo, procesadores de palabras y programas de grafcación.

El concepto de "dessktop" vino a mejorar la organización del espacio en la pantalla con ayuda del mouse. Hoy en día todos los programas interactivos permiten interfaces de este tipo para visualizar y manipular la aplicación especifica. Esta manera de comunicación gráfka usada viene revolucionado la interfaz de als

computadoras modernas y probablemente es la mas grande contribución de los gráfkos por computadora y será por

(16)

PROVECTO DE INMSTIGACION 5 RlBLlOTEGA DE FUNClONES GRAFKAS Y GRAFICACION POLIEDRAL

INTRODUCCI~N

A LOS GRÁFICOS POR COMPUTADORA

Los gráfkos por computadora es uno de los campos mas interesantes y que crece mas rapidamente dentro de la computación. Algunos de los sistemas de computación mas complejos que se usan hoy en día estan diseñados para la generación de despliegues gráiicos. Se conoce el valor de una figura como eficaz medio de comunicación, y la capacidad de conversar en forma grái3ca con una computadora está revolucionando la forma en que als

computadoras se están utilizando en todas las áreas.

Las gráfkas están seguramente cerca del tope de la lista de ventajas de la revolución de alscomputadoras. Cada una de sus aplicaciones es muy útil y estas ayudan a justificar el costo de la computadora. Es claro que los gráfícos tienen que desarrollarse mucho mas ya que el futuro es alentador. Nuestros ojos son nuestra ventana a dispositivos y día con día muchos usuarios conocen lo fantástico de alsgrM1cas. Los gráfkos son lo más disfrutable y muy cerca de ser uno de los mas importantes aspectos de alscomputadoras.

En su corto tiepo de vida las gráfkas tienen atraidas a las personas creativas del mundo. Estas personas

Los diseñadores de automóviles, aviones, naves espaciales y barcos, utilizan técnicas CAD en el diseño de varios ti6os de vehículos. Los trazos con estructuras de alambre, se utilizan para modelar componentes individuales y planear perfiles de Superficies de automoviles, aviones, naves espaciales y barcos. Las secciones de superficies y componentes de vehículos pueden diseñarse por separado y conjuntarse para exhibir el objeto en su totalidad. A menudo se corren simulaciones de la operación de un vehículo para probar su rendmiento. Producciones realistas permiten al diseñador observar como será el producto terminado.

Los diseños de edificios también se crean con sistemas de grafkación , los arquitectos diseñan ineractivamente planos de pisos o plantas, dispocisiones de puertos y ventanas y la construcción integral de un edificio. Trabajando a partir del despliegue visual del proyecto de un edificio, el diseñador electric0 puede

UNIVERSIDAD AUTONOMA METROPOLITANA " I A A P A U P A "

(17)

PROVECTO DE INYESTIGACJON

[ a a h d l m

RlBLlOTECA UE FUNClONES GRAflCAS Y GRAflCAClON PWEDRAL

experimentar dispocisiones del cableado. torna de corrientes de electricidad y sistemas de prevención de incendios. La utilkación del cspacio cn la oficina o en la fábrica se planea utilizando paquetes de gráficas especialmente diseñados. Los diseños de edificios en tres dimensiones. permiten a los arquitectos estudiar el aspecto de un solo edificio o de un grupo de ellos como una universidad o bien un complejo industrial. Mediante paquctes de gráficos complcjos, los disefiadores pueden realizar un recorrido simulado atravéz de las habitaciones o por los exteriores de edificios para apreciar mejor cl efecto integral de un diseño particular.

Gráficas diagramas

y modelos.-

Muchas aplicaiones de graficación de datos de ocupan de la graficación de alg6n tipo de información geográfica. Con frecucncia tales graficas se usan para exhibir diferentes tipos dc estadísticas regionales o globalcs. corno la graficación de datos sobre ventas en \,arios distritos. Los programas disefiados para producir mapas clin~atológicos pueden tomar datos de estaciones de observación individuales para originar grhficas. Se disponc de programas cartogrhficos para generar mapas de algunas Areas geogrhficas o del mundo entero. Algunos de cstos programas permiten sombrear o colorear las dhcrsas áreas geográficamente que clcgirA cl usuario y algunos pcrmiten separar secciones para destacarlas.

S

(18)

PROVECTO DE I M X T l G A C l O N

Cara&rhdiimp,

RlRLlOTECA UE FUNCIONES GRAFKXS Y GRAFIMCION POUEURAL

Arte por Computadora.-

d as aplicaciones creativas y comerciales del arte hacen uso intenso de alsgráfícas de computadora. La exhibition abstacta se crea grafcando una serie de funciones matematicas en Varios Colores. LOS programas de pincel permiten a los artistas crear pinturas en la pantalla de un monitor de video.

En realidad el artista podría hacer una pintura en una "Tableta de Gráficas" usando un estilo de entrada. Tambien se usó un programa de pincel para crear caricaturas, también se utilizan para producir la clase de arte que se aprecig en muchas partes.

El arte generado por computadora se usa ampliamente en aplicaciones comerciales. Los logotipos y dlseños publicitarios de TV ahora se producen comúnmente con sistemas de gráficas. Además los programas de gráficas se han elaborado para aplicaciones de procesamiento de publicaciones y palabras, que permiten combinar operaciones de grafcación y edición de texto.

En algunas aplicaciones de capacitación, se diseñan sistemas especiales. Algunos ejemplos de estos

sistemasgspecializados.son.10~ -simuladryes para ,capacita a capitanes ~e.t>arcos-pilot~ p de aviones. Un tipo de

simulador de vuelo, .m,uGtra algun+.escen@que.&eden 'presentarse .*a

un

pitoto qu&.opeTa un avión. Otro tipo de simulador es el d6 'conducción 'de automovil, ' este s e 'emplea para investiwr reacciones 'de los conductores en

situaciones críticas. Dichos resultados se utilizan despues como base de optimización del diseño del vehiculo con el objeto de maximizar la seguridad en el transito.

. . .. . . .. .;, . :: .

Interfaces con el Usuario de Gráficas (GUI).-

Las opciones de entrada a muchos programas de computadora se diseñan como un conjunto de íconos, simbolos gráficos que se @wen a la opción de procesamiento que deben representar. Los usuarios seleccionan opciones de procesamiento señalando el ícono adecuado. La ventaja de estos sistemas es que los íconos pueden ocupar menos espacio en la pantalla que la descripcion textual correspondiente de las funciones y pueden entenderse más rápidamente si están bien diseñados. En estos programas, el proceso de aííadlr un elemento a un archivo, gaveta de archivo o carpeta de archivo. La supresión de un archivo puede representarse con un icono de bote de basura. Una señal de alto puede representar una operación de salida y un dibujo de regla puede utilizarse para ajustar márgenes de un texto. Los íconos son útiles en muchas aplicaciones.

UNNERSIDAD AUTONOMA METROPOLITANA "IAAPALAPA"

S

(19)

PROVECTO DE INMSTIGAUUN Ihecaatadlierpo BIBLIOTECA DE FUNCIONES GRAFICAS V GRAFICACAUN PWEDRAL

Gráficas para uso doméstico.-

Un uso importante de las gráficas de computadora en aplicaciones del hogar es en los juegos de video. Todos estos juegos emplean métodos de gráticas en una forma u otra. Algunos sistemas despliegan g r á f k ~ ~ en pantallqntegradas, pero muchos están diseñados para conectarse a un aparato de TV.

Con la creciente popularidad de las computadoras personales y las capacidades de grafkación cada vez mayores de estos sistemas , alsaplicaiones de alsgrS1cas en el hogar se han ido extendiendo constantemente. Las

computadoras personales permiten al usuario doméstico generar gráiicas financieras, de conteo de calorias o bien para crear diseños, tarjetas de felicitación sobres de cartas fabricados, etc.

Procesamiento de imágenes.-

Los rastreadores de medicina nuclear recogen datos digtales de la redioacción emitida por radionúclidos ingeridos e imágenes gráfkas codificadas en color. Los métodos ordinarios también se usan en aplicaciones médicas para modelar y estudiar funciones físicas y en diseño de extremidades artificiales.

Muchos otros campos hacen uso de técnicas de creación de imágenes, para generar dibujos y analizar datos reunidos, por ejemplo grafkación de datos llamados solares, se reconstruyen galaxias a partir de observaciones

S

(20)

PROVECTO DE INMSTIGAUON

c a p a a t r w d t ~

BIBLIOTE(.A DE FUNCJONER GRAFICAS Y GRAFlCAClON POLIEDRAL

astronómicas colectadas y dispuestas en grandes bases de datos. Sería posible continuar con la lista de aplicaciones, pero esto1 ejemplos son suficientes para indicar la gran amplitud de aplicaciones prácticas.

En resumen , la generación y el control de imágenes requieren conocimientos en muchos campos de computación, desde el detallado conocimeinto de Hardware especial, la presentación y programación orientada a objetos. El propósito escencial de la graficación es generar y manipular imagenes graficas.

Niveles de Interactividad

En un sistema gráiico existen tres niveles de interactividad, los cuales son:

*

Nivel funcional

*

Nivel procedimental

*

Nivel dispositivos

. . . . . . . . Nivel funcional.- . . . < . . . . . . ... I .... ... .,:,..,. ,...:. ... :....

..

. . ... . . . ... -;,. ... .:...

.

. . . . ... ....: .:. '. ..yv.. . . .

.::

..

... . . . % ... . . .

.. .... . . . ...;y.'.<... :.':.~ .:..><::

El nivel mas alto es $l'#&l funciond:ii;;Es este l&j~am8;idos son:,$x@~ados en terminos de requisitos gráficos. Informalmente, estcjs+qu#lstos pue&&i:.ier especi@c$&$..:,éq. ter@.&&mo: "Dibuja una figura de los

'..' ' % '.

. .

.. .... .::;.:. ... ... ... % ... :. .. .II\, ,: . . . ..,:,:..::+::. , ... - : ' X ..

. . . . . .

. . \ ! .

; ..,..., . .

El nivel más bajo es el nivel de dispositivo.. Este es el nivel donde las escenas actuales son generadas. Dsposltwos gráfífic.0~ (seg9idci se ,refie;'$. al"li+dwar$)'son .$aturataente 6jasifí~dos:fi dwgrUpos, de entrada y de salida, donde el puntii'de .re€&re$cia.e+,

la

Foniputidot;ti.Ei dispo$itivb.,&&ntrada provee datos a la computadora mientras que los de salida generan imágenes gráficas de los datos almacenados o generados por la computadora,

. . . . ~ ;.

Dispositivos de entrada- Este tipo de dispositivos se reducen a dos clases: Aquellos que son manipulados por el usuario por ejemplo, mouse, lápiz electrónico, touch screen (tabla sensitiva montada sobre la pantalla) la interacción no requiere de conocimiento de programación solo un poco de conocimiento en el manejo del dispositivo, el usuario da la opción requerida solo seleccionando los botones del menú o los íconos. El otro tipo de dispositivo de entrada son aquellos que convierten imágenes reales en datos digitales, por ejemplo video cámaras y scanners ópticos.

Dispositivos de salida- Los dispositivos de salida también pueden se clasificados en dos tipos un tipo es usado interactivamente y es referido a los dispositivos de despliegue tales como monitores, el otro tipo produce copias de salida e incluyen dispositivos como plotters, impresoras laser y de matriz. Aunque la atención debe ser enfocada sobre los tipos interactivos de dispositivos de salida, el uso efectivo de los dispositivos que produce copias es tambien un importante aspecto de la computación gráfka.

S

UNIVERSIDAD AUTONOMA METROPOLITANA "IAAPAIAPA"

(21)

PROY

y:

TO DE INVESTlGAClW BIBLIOTECA DE FUNCIONES GRAFICAS Y GRAFICIClON POLIEDRAL

El mapeo de bits en un tubo de rayos catódicos monocromático,contiene un bit por pixel y el mapeo de bits completo para una pantalla de este tipo con una resolución de 1024 x 1024 pixeles es de solo 220 bits o cerca de 128 Kb. Algunos sistemas contienen 8 bits por pixel permitiendo 256 colores simultaneamente, sistemas mas costosos tienen 24 bits por pixel permitiendo opciones de 16 M de colores, otras computadoras ofrecen 32 bits por pixel y resolución de 1280 x 1024 pixels de los cuales 24 bits son usados para representar color y 8 para propósito de control. Un sistema de color típico de 1280 x 1024 pixels con 24 bits por pixel requiere 3.75 Mb de R A M .

Hace 50 años se requerían bastantes recursos para producir figuras monocromaticas. Ahora con solo unos

$2 O00 dls, podemos dibujar sólidos de 256 colores (o más) en muy poco tiempo.

Los dispositivos gráfkos de hoy son altamente complejos y pueden los mismos contener software de complejo multiprocesamiento, largos sistemas de memoria y procesadores paralelos o pipeline. A causa de la naturaleza de la interacción (tiempo real) la velocidad de procesamiento es una importante consideración para los diseñadores de software y esta velocidad es muy influenciada por la utlización de facilidades del nivel de dispositivos. Esto es muy dificil para discutir en terminos generales, ya que la gran variedad de funcionalidad encontrada en el nivel dispositivo es diferente en cada sistema.

. . . ... .:I,. ;, . .,-. . ... . . . :

, ::.,: :::.;., . . . ... Nivel pr8cedimental.- . . . . , . . I . , . . , :.: . . ... .., ... . . . <:..: < . .

... ... ... :.: . ,

. . . . . . . . . ;.

.~ ::.::: .:

. . . I

~. . < . . :. .

j . ..

. . . ....

... . . .

Este nivel incluye:;::&$idfitk6s especlaies que eficientemente y procediqq$w::q& incluyen est& algorit

juega un papel i m p o r t a n t ~ ~ ~ i t ; ~ ~ ~ ~ ~ ~ e n ~ ~ ~ . de nuevos algol creación de nuevos alg?r@x?.&.+ alt&&l. Otro importa

estructura de la base:.::&:.:datds grSi$q'::t@pbién ... :.:<:: .. '>. ... ;...: .... ~.,. . influye. complejidad de procei@WUijs gr~~lcor&~~:~;:.::"..

, ::;>::: 2'.' '. '

...

:,,.:>:,:.~

.%.% ,:.,. :: c ' I

...

:';,~::.:%

. . . . . .

. . . . . . . I . . . . .

En resúmen los tres niveles de un sistema gráfko, la base de datos así como el sistema operativo de la computadora juegan un papel muy importante en la comunicacion de los elementos del sistema y el usuario.

Ventajas de gráficos interactivos

Los gráfkos proveen uno de los mas naturales conocimientos de comunicación con computadora, esta es capaz de procesar los datos rápida y eficientemente.

En muchos diseños, implementaciones y construcción , la información que puede proporcionar es virtualmente omportante. La visualización científica es muy importante, cuando científicos e ingenieros realizan lo que ellos no podrían interpretar de las cantidades enormes de datos que producen las supercomputadoras.

S

Las

gráficas son el más importante conocimiento de producir imágenes, desde la invención de la fotografía y la televisión. Estas tienen una ventaja adicional , que con las computadoras podemos hacer imágenes reales de objetos, y además cosas abstractas y de datos que no tienen geométria inherente.

Con movimiento los objetos pueden ser colocados con respecto a un observador estacionario. Los objetos pueden ser también estacionarios y el observador puede moverse alrededor de ellos, seleccionar una porcion de ellos para observarlos, ver al objeto con mayor o menor detalle, o mover al objeto con determinada velocidad y

(22)

PROVECTO DE INMPTIGACAON BIBLIOTECA DE FUNCIONES GRAFUAS Y GRAFICAUON POLIEDRAL

observar sus reacciones. En muchos casos el objeto y el observador se mueven simultaneamente, por ejemplo en un simulador de vuelo, el cual combina el movimiento del avión, con los movimientos de los objetos que se encuentran debajo de el.

Con la actualización dinámica se logra el actual cambio de alsfiguras, el color y otras propiedades del objeto, tales como sombra, etc conforme al movimiento que éste tiene , o a los diferentes cambios que hay en su

alrededor.

La grafcación interactiva permite un alto grado de interacciones, alscuales desarrollan aún mas nuestra habilidad de comprender aún mas datos y visualizar imágenes reales, abstractas o imaginarias de objetos.

UNIVERSIDAD AUTONOMA METROPOLITANA "ITTAPAMPA"

(23)

PROVECTO DE INMSTlGAClON

IhsSeMdlWl

BIBLIOTECA DE FUNClONES GRAFICAS Y GRAflCAClON POLIEDRAL

DESCRIPCION

(24)

PROVECTO DE INVESTlGAC'JON

I h ~ a l t ~

BIBLIOTECA DE FUNCIONES GRAFICAS V GRAFICACION POLIEDRAL

LIBRERIA DE FUNCIONES GRÁFICAS GVESA256

Para programadores de Turbo C/C++ Abril de 1995.

La Video Electronics Standar Association (VESA) a desarrollado un conjunto de extensiones BIOS el cual estandarizo el ambiente gráiico Super VGA (SVGA). La libreria gráfka GVESA256 proporciona a los programadores de Turbo C/C++ alsherramientas necesarias para manejar un adaptador de video corriendo con el estandar VESA Ver. 2.1.

El nombre "GVESA256" refleja el hecho de que esta libreria fue realizada fundamentalmente para soportar

estandar

EL AMBIENTE PARA LA

PROGRAMACI~N

definidos en el

Requerimentos de Hardware para el ambiente W S A :

La libreria gráfka GVESA256 trabaja con cualquier computadora IBM PC, XT, AT o compatible equipada con un adaptador de video Super VGA y un monitor con capacidades similares a 256 colores y un adecuado driver para alsextensiones de la BIOS VESA. Un coprocesador matemático no es requerido; sin embargo

si lo tiene , esta libreria sacará provecho de él.

Incluir el archivo de cabecera:

a

UNIVERSIDAD AUTONOMA METROPOLITANA "ITTAPALAPA"

(25)

PROVECTO DE INVESTlGAClON cssSs3ertaallerp3 RIBLIOTECA DE FUNUONES GRAFICAS Y GRAflCAUON POLIEDRAL

El archivo GVESA256.H es usado como un archivo de inclusión (Include File) durante el desarrollo de cada programa; ya que este archivo incluye todos los prototipos de las funciones y este define los parámetros gráfkos gobales que describen el adaptador de video especifico instalado en la PC.

Los parámetros gráfkos globales son inicializados por la función initgraph( ), por lo que debe asegurarse de llamarla en primer lugar para que puedan utilizarse correctamente las demás funciones.

Nota:

cuando usa el IDE de

Turbo

C), ya que es una o la otra, no ambas.

incluir esta libreria y su programa, debe deshabilitar la libreria gr%ica de Turbo

c

graph1cs.h (esto

DESCRIPCION DE LAS FUNCIONES

void bar(lefl,top,right, bottom)

entrada: int left,top,right,bottom

regresa: Nada

descripcion: La función bar0 dibuja una barra rectángular, cuya esquina superior izquierda está definida por Zejttop y la esquina inferior derecha está definida por

right, bottom

La barra se rellena con el color de relleno actual especificado por setfillcolor(). No se traza el contorno.

ejemplo:

S Este ejemplo dibuja un tablero de barritas de diferentes colores

(26)

PROVECTO DE INVESTlGAClON

cSre&3UdIlsrm

BIBLIOTECA UE FUNCIWES GRAFICAS Y GRAFICACION POCIEURAL

#include <gvesa256.h> #include <stdlib.h>

main0

{

int i j ;

clrscro;

initgraph(Ox103);

rectangle(O,O,getmaxxO,getmaxyO);

rectangle(3,3,getmaxx()-3,20);

void circle(x,y,r)

. . . . . . . . . . . . . . . . . . . entradi: . .,, ;. .i int.3

9

r: i'' ' . ' . " . . . . . . . . .

. .

. . . . . . . . . . . . . , .

. . . .

:I.

, . . I

. . . . ~ : ' . . . '. '

. . . .. .

. . . : . . . . .

. % .

3 , . , . . . . . .

. .. x . . . . . . . Nada." .: . . . . ... . ' " ' .. . . . . . . . .. . . . ~ .

regresa: '

descripción: La función circle0 dibuja un circulo con centro en x,y de radio r (en pixeles)

I

con el color de dibujo actual.

ejemplo:

Este ejemplo dibuja circulos concentricos de dlferentes colores.

#include <gvesa256.h> #include <conio.h>

main0 g {

int i;

I

clrscro;

initgraph(Oxl05);/* poner modo grafico de 1024~768x256 */

UNIVERSIDAD AUTONOMA METROPOLITANA " I A A P A I A P A "

(27)

S

PROVECTO DE INMSTIGAUON

CS?ddiE#Jdtsnpo

BIBLIOTECA nE FUNCIONES GRAFMAAS v GRAFIC~UON POLIEORAL

rectangle(O,O,getmaxxO,getmaxyO); rectangle(3,3,getmaxx0-3,20);

for(i=O;i<=getmaxy0/2-25;i++)

{

setcolor(i);

circle(getmaxx0/2,getmaxy0/2,i);

f

outtextxy((getmaxx0/2)-120,9,"CUALQUIER

TECLA

PARA

TERMINAR...");

getcho;

1

va la

void clearviewport(void)

descripción: La función clearviewport0 limpia la ventana gráfka activa (el viewport) y la desaparece, restableciendo como nueva ventana grafica a la pantalla completa.

ejemplo:

Este ejemplo muestra el uso de als funciones cleardevice() y clearviewport(), así como setviewport(). Dibuja puntos en toda la pantalla crea un setviewport0 en el centro escribe texto luego limpia el viewportc(clearviewport()) a continuación limpia la pantalla completa (cleardevice()).

#include <gvesa256. h> #include <stdlib. h> #include <time.h>

I{

main()

(28)

PROVECTO DE INMSTIGACION

CsssUtiWbdtlsrm

BIBLIOTECA DE FUNCIONES GRAFICAS V GRAFIGICION P W W R A L

int i,x,y,c=O; int figura[20];

clrscr();

initgraph(Ox103);/*modo 800x600~256 */

randomize();

cleardevice();

rectangle(O,O,getmaxx(),getmaxy()); rectangle(3,3,getmaxx()-3,20);

outtextxy(getmaxx()/12,9,"Ejemplo drawpoly()");

outtext~y((getmaxx()/2)-60,9,"CUALQUIER TECLA PARA CONTINUAR.. .");

outtextxy(25,100,"Cualquier <<tecla>> para activar"); outtextxy(25,120,"cleardevice() 'borra la pantalla'"); outtextxy(25,140,"y terminar.");

getch0; cleardevice(); delay(2500);

. .

. . . . . . .. . . . . .... I . . . . . . . . , . . . .. '. . . I

. I ...

: <

. . . . . . . .. . . . . . . . : . . . . . . . . . . . . . . 1 ..

: > '.

UNIVERSIDAD AUTONOMA METROPOLITANA "IZTAPALAPA"

(29)

PROVECTO DE INMSTIGACNMI

k3SstrtadtW

BIBLIOTECA DE FUNCIONES GRAflCAS Y GRAFICNION POLIEDUAL

void drawpoly(num,vertices)

entrada: int num, int *vertices. regresa: Nada.

descripción: La función drawpolyo dibuja una polilínea de num vertices donde cada vertice de la pollínea está especificado en el arreglo de vertices vertices, el tamaño del arreglo vertices debe ser de por lo menos 2xnum.

La polilínea se dibuja con el color de dibujo actual.

Sjemplo:

Este ejemplo dibuja polilíneas aleatorias de 10 segmentos con colores diferentes cada vez.

Yinclude <gvesa256. h> Yinclude <stdlib. h> &include <time.h>

main()

... : : ,; ~, . . . . . .

. . .

{ . . j ... \: . . . , I . . I.:::: .:.: Y;.:.. . . . ' . . ..,.... . . ' . . int i,x,y; int figura[20]; ... . . . . . . '.,;..:%:%:., ... : , ... \. . . . , ...

.

. ' . ' . . . . .:.::.,:, ..,.'' %.... . . . . . . . :, . .~ .. :. ... . . . . . . . . . . . . ,, ., , . < ~ .>

..:. ... i. ....

.,:.,;,;.:::: :.

outtextxy(getmaxx()/12,9,"Ejemplo drawpoly()");

outtextxy((getmax~()/2)-60,9,"CUALQLJ€ER

TECLA

PARA,CONTINUAR.,,");

. . . . . .

. . . .. . . . . . . . .

S . . . . .

. , . . . . ... . . . . ,: I . .

' . .. . . . . : . . . . . . .. . . . .:.. .. . .. . . . . . . .

f o r ( ~ ~ o ; ~ < l ( j ; ~ + ~ ) ~ . . ~ . . . . . . . . . . . .. . . .:. . . . . . . : >. .. ... . . . . . . . . . . . . .

x = random(getmaxx()- I O); y = random(getmaxy()- 1 O); 1f(x<3

11

y<25){

x+=8; y+=25;

I

figura[2*i] =x;

figura[2*i+ 11 =y;

setcolor(random(getmaxcolor())); drawpoly( 10,figura);

delay(2500); }while(!kbhit());

1

(30)

cssaatntadtisrm

BIBLIOTECA DE FUNCIONES GRAFICAS Y GRAFICACION PWEDRAI

-

#incl #incl

void ellipse(x,y, ini,jin,rx,ry)

S

entrada: int x,y,ini,fin,rx,ry. regresa: Nada.

descripción: La función ellipse() dibuja una elipse centrada en x,y desde el úngulo ini hasta el úngulofin de radio rx para el eje x y de rado ry para el eje y.La elipse se dibuja con el color de dibujo actual.

comentario: La sección de la elipse que se dibuja está detreminada por los ángulos ini y fin,por ejemplo para dbujar una elipse completa centrada en (1 00,100) ,de radio horizontal 100 y de radio vertical 70, introducir ini=0 y fín=360.

O

Ahora para dibujar una sección de elipse (la cuarta parte de la elipse en el primer cuadrante) introducir ini=0 y fín=90.

#include <time. h>

main()

{

int x,y,c;

. . . .

. . . < . . . . . . . . . . . . . . . . . . . . . . . ~ ..: . . . .

. % . :.

. . . . . . . . . .

.. .; 1 . , , ..

. . . ... . . . . ' . . . . .. . . : . . . . . . . . . . . . . . . . . . . . . . . :. ... . . . . . . .. .. .. . .. , . : . . . . . . . . . . . . . . . . clrscr(); initgraph(Ox103); randomize(); rectangle(O,O,getmaxx(),getmaxy()); rectangle(3,3,getmaxx()-3,20);

outtextxy(getmaxx()/12,9,"Ejemplo: ellipse()");

outtextxy((getmaxx()/2)-60,9,"CUALQUIERTECLA PARA CONTINUAR...");

for(x=3,y=2,c=0;x<260;x+=20,y+=1O,c+=25)

setcolor(0); /* color negro de dibujo */

ellipse(getmaxx()/2,getmaxy()/2+220-c,0,36O,x,y);

getch0; S

...

UNIVERSIDAD AUTONOM METROPOLITANA "ITTAPAMPA"

(31)

PROVECTO DE INVESTIGACION 818LIOTECA DE FUNCIONES GRAFICAS V GRAFICACION POLIEDRAL

for(x=3,y=2,c=0;x<260;x+=20,y+=1O,c+=25)

ellipse(getmaxx()/2,getmaxy()/2+220-c,0,36O,x,y);

setcolor(5);

for(x=3,y=2,c=0;x<260;x+=20,y+=lO,c+=lO)

ellipse(getmaxx()/2,getmaxy()/2+ 1 OO-c,0,36O,x,y);

void Jillellipse(x,y,rx,ry)

#include <gvesa256.h> #include <stdlib. h i . '. . . % . . . . ..

#include <math.h> .. .; . ., . ., .. ii .: . . . . .. . .. I .. . . . .,

. .

main()

{

int i,c=O; float x,y;

clrscr();

initgraph(Ox105);

rectangle(O,O,getmaxx(),getmaxy()); rectangle(3,3,getmaxx()-3,20);

outtextxy(getmaxx()/12,9,"Ejemplo: fillellipse()"); for(isO;i<760;i+=20){

setcolorEíll(c++);

x = R*cos(i*M-PIASO)

+

(getmaxx()/2); y = R*sin(i*M_PI/lSO)

+

(getmaxy()/2);

(32)

PRO CTO DE INVESTIGAUON

5

BIBLIOTECA DE FUNCIONES GRAFlCAS Y GRAFICAUON POLIEDRAL

fillellipse(x,y,100,50); setcolor(c+ 1);

outtextxy(x-25.y,"HOLA"); delay(600);

1

fillellipse(x,y,100,50); setcolor(0);

outtextxy(x-45,y,"! ! ADIOS ! ! 'I); setcolor(5);

outtextxy((getmaxx()/2)-60,9,"CUALQUIER TECLA PARA CONTINUAR.. . ");

getch0;

I cada el

Este ejemplo dibuja poligonos aleatorios y los rellena cada vez con colores diferentes

#define N 20

main(void)

{

int i,x,y,c=l; int figura[N];

clrscr();

initgraph(0x 103);

P

randomize(); do{

cleardevice();

setcolor(l5); /* color de dibujo blanco */

UNIVERSIDAD AUTONOMA METROPOLITANA "ILTAPAIAPA"

(33)

U

PROVECTO DE INVESTIGACION

CaCedlWbdlWtl

BIBLIOTECA DE FUNCIONES GRAFICAS V GRAFICACION POCIEDRAL

rectangle(O,O,getmaxx(),getmaxy()); rectangle(3,3,getmaxx()-3,20);

outtextxy(getmaxx()/12,9,"Ejemplo fillpoly()");

outtextxy((getmaxx()/2)-60,9,"CUALQUIER TECLA PARA TERMIN

m...(

ESC)");

for(i=O;i<N;i++){

x = random(620); y = random(470);

if(x<3

11

y<25){ x+=3;

y+=25;

1

fígura[2*i] = x; u fígura[2*i+l] = y;

entrada: int x,y,borde. regresa: Nada.

descripción: La funciónfloodfll0 rellena un objeto con el color de reelleno actual, dadas las coordenadas de cualquier punto interior al objeto especificadas por x,y U y el color de su borde (el color de las líneas o arcos que forman el contorno del objeto).

comentario: Es necesario asegurarse que el objeto sea completamente cerrado, porque de lo contrario producirá resultados inesperados(tal vez el área exterior también se rellene). El color de relleno se puede cambiar mediante setfillcolor().

ejemplo:

Este ejmplo dibuja un paisaje de noche "El mar, la montaña, la luna.. ...

#include <math.h> #include <stdlib.h> #include <conio.h>

(34)

PROVECTO DE INVESTlGAClON BIBLIOTECA DE FUNCIINES GRAFICAS Y GRAFICACJON POLIEDRAL

#include <time.h> #include <gvesa256.h>

#define MAXSIZE 1000

const int MAXLEVEL = 6 ;

const int WATER = 1;

const int SUN = 2; const int SKY = 31:

double frctl[MAXSIZE];

subdivide(int p1,int p2,double std,double ratio)

{ int midpnt; double stdmid; S . . . . . . . .

;.. . . ' . . \ ... >',' ...

... . . . . .

frctl[midpnt] = (frctl[pl]

+.,fr$d(pg

stdmid = std*ratio;

subdivide(pl,midpnt,stdm$x&i& .,, <,;: .s... '::

subdivide(midpnt,p2,st1&.iiQ&ii);

:.:;." ... . , . , . .. .,.\ ll

... <...: . . . :.::::,. ,%

. . . . . . . . \ ...

a

. . . . ;;.: ,+<:..,:.. ..:.. ''

:x<;,:;.,

i.. ;.::;;:

c

int first,last;

double ratio,std; . . . % . . . . . . . . . . . . . . . . . . . .

first =O; . , " . .; . . : . : ' . . . . . . .

. . . .

. . . .

. . . . . . . . . ... . . . . . . . . . , ..I .' . . . . . . . . ... :; 1. .. . . . .I . .

. . . .: . . . . . . . . . . . . . . . .~ . . : . . % . . . . . . : ~ . ..:. . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . \ . S

last = (int)pow(2.O,(double)maxlevel); frctl[first]=yl;

frctl[last]=y2;

ratio = 1.0 I pow(2.0,h); std = scale

*

ratio;

subdivide(first,last,std,ratio);

}

draw-fractal()

{

int i,x,xinc,l;

1 = (int)pow(2,O,(double)MA

xinc = getmaxx() / 1*3 / 2;

XLEVEL);

UNIVERSIDAD AUTONOMA METROPOLITANA "IflAPAMPA"

24

(35)

PROVECTO DE INMSTlGAClUN

c a p a ~ d l ~

BIBLIOTECA DE FUNClONES GRAFICAS V GRAFICAClON POLIEDRAL

moveto(0,lOO);

for(i=O,x=O;i<l;i++,x+=xinc) lineto(x,(int)frctl[i]);

1

main()

{ c

initgraph(0x 1 O 1); randomize(): setcolor( 1);

rectangle(O,O,getmaxx(),getmaxyO);

int getgraphmode(void)

entrada: Nada.

regresa: int modo vesa.

descripción: La función getgraphmode0 devuelve el modo de video VESA actual.

Solo funciona después de haber llamado ainitgrapho.

comentario: El valor devuelto corresponde al que asocia la BIOS con ese modo de video (el valor devuelto es un número hexadecimal, por ejemplo, 0x101 ,Ox 103,etc). El valor devuelto puede ser uno de los siguientes, definidos en GVESA256.H:

(36)

PROYECTO DE INVESTIGACION DlRLlOTECA DE FUNCIONES GRAFICAS Y GRAINAClON POLIEDRAL

S

MODO GRFICO VALOR RESOLUCION

VESA OX100 640X400X256

VESALO 0x101 640X480X256

VESAME OX103 800X600X256

VESAHI ox105 1024X768X256

VESAPLUS

OX107 1280X1024X256

NOTA: Una tarjeta de video puede soportar cierto modo de vido, pero el monitor no y viceversa, por lo que hay que verificar tales datos en la documentación respectiva del monitor y la tarjeta de video. Aunque esta situación la detecta la función initgraph().

int getmaxcolor(void)

entrada: Nada.

.regresa: . . . . int.maxX . . . .: . .:: . . . . . . . .

:descri@.ción.:,: La’funclon

get&()

&vuel&;el

may&

VSor v&ltdo:&$la coordenada “x” en

. .

. . .

. . . .

.;

: I ’.’ . . , .: % .

. .

. . . .. . . . . . . .~ .

. I

.er

.mod’o ~slco’vEs.A~ actual, : . . . . ,

int getmaxy(v0id)

entrada: Nada. regresa: int maxY.

descripción: La función g e t m a y o devuelve el mayor valor válido para la coordenada

‘y’

en el modo gráfko VESA actual.

S

UNIVERSIDAD AUTONOMA METROPOLITANA “IAAPALAPA”

(37)

PROYECTO DE INMHTlGAClON cssS%N8-hdtSrm BIBLIOTECA UE FUNCIONES GRAFICAS Y GRAFICAClON POLIEORAL

entrada: int x,y.

regresa: unsigned valor-de-color.

descripción: La función gelpixel0 devuelve el valor del color del pixel situado en la coordenada especificad en x,y.

comentario: La posición es con respecto a la ventana gráfica actual.

int g&(void)

void _Hlineflt$,right,high)

c

entrada: int left, right, high. regresa: Nada.

descripción: La función-HlineO dibuja una línea horizontal definida por [@,high y right,high. La línea es dibujada con el color de dibujo actual (ver setcolor()).Para dibujar líneas horizontales esta función es mucho más rápida que usar la función line()

(38)

S

PROVECTO DE INVESTlGAClON

k a s r t a d t m

BIBUOTELA DE FUNCIONES GRAFICAS V GRAFICAClUN POUWRAL

int initgraph(mod0)

entrada: int modo. regresa: int badera.

descripción: La función initgraph0 inicializa el sistema de grafkos para el estandar VESA con el modo de la BIOS VESA especificado en modo (en hexadecimal), inicializa los parámetros y variables globales que son necesarios para que alsdiferentes funciones de la biblioteca gráfka trabajen correctamente.

comentario: Esta función es vital, ya que de ella dependen todas alsdemás funciones de la librería, por lo que debe asegurarse que siempre que quiera trabajar en modo gráfko, sea la primer función en ser llamada.

El parámetro modo debe ser un número hexadecimal y solo puede tener uno de los siguientes valores que corresponden con los valores de los modos de video de la BIOS que son

l

assiguientes macros definidas en GVESA256.H:

void lini(lefi;top,right,bottom)., . . . ,I.. .:: . . . . . . . . . . . . . ... ... ... . . . . .

. . ... . . . . . . . . . . . . . :

. . : . . . . . ' :

. .

. I I.' . ' . '

. . .

. . .. .. .. . . . . . .

. . . \'

~ . . . . . . ..

entrad&: ... : . . . . . . . . . . . . . . .~ , . . . regresa: Nada.

descripción: La función line0 dibuja una línea con el color de dibujo actual desde left,top

hasta right,bottom. La posición actual (CP) del cursor no cambia. ejemplo:

P

void linerel(deltaX,deltav

entrada: int deltaX,deltaY. regresa: Nada.

descripción: La función llinerelo dibuja una línea desde la CP hasta la posición que queda a

deltaX unidades en la dirección "x" y a deltaY unidades en la dirección "y". El CP se

mueve a la nueva posición (o sea CPx=CPx

+

d e l t a y Cpy = Cpy

+

deltaY).

UNIVERSIDAD AUTONOMA METROPOLITANA "ITIAPAUPA"

(39)

PROVECTO DE INVESTIGACION BIHLIOTECA DE FUNCIONES GRAFIUS Y GRAFICACION POLIEDRAL

void lineto(x,y)

entrada: int x,y. regresa: Nada.

descripción: La función linetoo dibuja una línea con el color de dibujo actual desde la ción actual (CP) del cursor hasta x,y. La posición actual (CP) del cursor cambia a x,y.

ejemplo:

Este ejemplo muestra la función lineto()

#include <gvesa256. h> #include <stdlib. h> #include <time. h>

S

main()

{

randomize();

m o v e t o ( x a = g e t ~ a x x ( ~ / ~ , ~ ~ = ~ ~ ~ m ~ y ~ ) ~ ) ; .. ci

:,:

...

:

: . : :

setcolor(2); . .:: '. .; ..:: . , . ' , '

fillellipse(getmaxx()/2,getmaxy()/2,3,3); do{

. . . . . . '. ' ' . > . . ' . . .

. . :. : . .

. . .

. . . . . . . . . . . . . .

S

x = random(getmaxx()- 1 O);

y = random(getmaxy()- 1 O);

setcolor(random(getmaxcolor()));

if(x<3

11

y<25){ x+=g y+=25 ;

1

fillellipse(x,y,3,3); x a = x ;

lineto(x,y); ya = y; moveto(xa,ya);

(40)

PROYECTO DE INVESTIGACJW

C a a m m d i i

BIIILIOTECA I)E FUNCIONES GRAFICAS Y GRAFICACIDN POLIEORAL

}while(getch()!=27);

1

yoid moverel(deltaX, delta y)

entrada: int deltaX,deltaY.

regresa: Nada.

descripción: La función moverelo desplaza la posición actual (CP) del cursor sobre la

pantalla de gráfkos a deltaX unidades en la dirección "x" y deltaY unidades en la dirección ''y".

void o,uttext(cad)

descripción: La función outtext() muestra una cadena de texto cad en la posición actual

de la pantalla en modo gráiico usando los valores por defecto de la BIOS 8x16 y el color dibujo actual. El (CP) se incrementa en la longtud de la cadena para la dirección X. En modos gráfkos no hay cursor visible, pero la posición actual (CP) en pantalla se iene como si fuera un cursor invisible.

void outtexixy(x,y,cad)

entrada: int x,y; char *cad;

regresa: nada

descripción: La función outtexfxy() es igual a outtext( ) excepto en que muestra la cadena

a partir de la posición que especifica x,y.

UNIVERSIDAD AUTONOMA METROPOLITANA "IAAPALAPA"

S

(41)

PROVECTO DE INVESTlGAClON

CaraXMEdllfipl

BIBLIOTECA UE FUNCIONES GRAFICAS Y GRAFICAUON POLIEDRAL

void putpixel (x,y,color)

entrada: int x,y,color regresa: nada

S descripción: La función putpixel0 dibuja un pixelel color especificado por color en la posición x,y.

ejemplo:

Este ejemplo dibuja puntos aleatorios de diferentes colores en toda la pantalla hasta que se pulsa una tecla.

#include <gvesa256.h> #include <conio.h> #include <stdlib.h> main()

I

setcolor(c);

}while(!kbhit@); :

pufpixel(x,y,c); . .

. . . . . . . . . . . . . . . . .

. . . . . . . . ... . .: . .

. . . . - .

i . .

. . . . . . .

. . . . . . .. .. . . . . . .

. . . . . . .

getcho; . ... ... % . . . .. .. . . . . . . . . . . . . . . . . .

. . . . . .

void rectangle @efl,top,right,bottom)

entrada: int left,top,rigth,bottom regresa: nada

descripción: La función rectangle() dlbuja un rectangulo con el color de dibujo actual definido por las coordenadas de la esquina superior izquierda (lefitop) y la esquina inferior derecha (right,bottom).

S

(42)

csSaW#Jdllsmr

BIBLIOTECA DE FUNOONES GRAFICAS Y GRAFICACJW PUUEURAI

w i d rectangle-to(x,y)

entrada: int x,y regresa: nada

descripción: La función rectangle-to() es similar a rectangle( ) sólo que aquí el rectángulo está definido por una esquina puesta en (CP) y la otra en x,y.

void

void

D

void

restorecrtmode(void)

entrada: nada regresa: nada

descripción : La función restorecrtmode() restaura la pantalla al modo de video en que se encontraba anteriormente de la llamada a initgraph.

regresa: nada

descripción: La función sercolorfill0, establece el color de relleno actual al color que se especifica en colorfill, el valor de colorfrll puede ser desde O hasta 255.

void - Vline(column,top, bottom)

c

entrada: int column,top,bottom regresa: nada

descripción: La función- VlineO dibuja una línea vertical desde column, top hasta column,

bottom con el color de dibujo actual.

UNIVERSIDAD AUTONOMA METROPOLITANA "ITTAPAIAPA"

(43)

PROV&TO DE INWSTIGACION

capa*itrtadllma

BIBLIOTECA DE FUNCIONES GRAFIUS V GRAFlCACAON POLIEDRAL

DESCRIPCION

. .

. . .

(44)

PROVECTO DE INMSTIGACION

C a w ~ d l i s r m

RIRLIOTECA DE FUNCIONES GRAFICAS Y GRAFICACJON PULIEORAL

Técnicas de despliegue tridimensional

Las representaciones de un objeto sólido en una superficie de visión por lo general contienen información de profundidad para que un observador pueda identificar con facilidad, para una visión seleccionada dada, cuales son als partes anterior y posterior del objeto. Existen varias técnicas que pueden utilizarse para incluir informaciónde profunddad en la representación bidimensional de objetos sólidos, la elección de la técnica de despliegue depende de los requisitos de la aplicación.

Proyección en paralelo.-

Función draw-3d para el manual de usuario.

P

draw_3d(struct PLANOS Plan [N*M], int proygersp):

Esta función se encarga de dibujar un objeto definido en la matriz de planos.

Sólo requiere como parámetros uns estructura de planos del tipo que se menciona. La opción de proygersp, se refiere al tipo de proyección que se desea, ya sea ortogonal ó perspectiva. En caso que se desee proyección perspectiva deberá contener PERSPECTIVA, definida al inicio; en caso contrario ORTOGONAL será el valor que espere dicha función.

UNIVERSIDAD AUTONOMA METROPOLITANA "ILTAPAIAPA"

(45)

PROVECTO DE INMSTIGACJON

caSaabertadlmp3

RIRLIOTE(X DE FUNCIONES GR4FICAS V GRAFICACION POLIEORAL

Manual Técnico

draw_3d(itruct PLANOS Plan[N*MJ, in2 Roy-Persp):

La primera función que es llamada dentro de la función drawV3d(), se compone de dos partes, la primera de ellas se refiere a la opción de proyección ortogonal, la otra parte se refiere a proyección perspectiva. El ciclo: for(i=O;i<N*M;i++), se ejecutará N*M veces, ya que éste es el tamaño de la matriz de planos.

La línea siguiente: for(k=O;k<( ( (struct PLANOS *) Plan

+

i ) -> nogtos)*2;k+2), y en particular la condicióq, se refiere a que entrará en este ciclo (nogtos*2) veces, es decir si tenemos un plano con 4 puntos, tendremos que serán 8 veces las cuales se repetirá este ciclo, pero como k se incrementa en2, relamente serán 4 veces.

Las operaciones:

punt0.x = (punto.x)*D/punto.z

punt0.y = (punto.y)*D/punto.z

punt0.z = (punto.z)*D

corresponden a la siguiente figura:

(46)

PROVECTO DE INVESTlGAClON

C a a l b a t a a l l n p o

RIRLIOTECA DE FUNCIONES GRAFICAS V GRAFICACION POLIELIRAL

plano de proyección

i.

I

I

D

Z

I

z

I

Si observamos los triángulos rectangulos que se forman facilmente podemos decir que:

entonces:

La cual es la

De la misma

En el caso en que la coordenada z sea cero, tenemos que el valor de cada uno de las coordenadas X y Y

aumentará, lo cual provoca que la imagen se vea mas grande, lo cual es . . lo esperado.

Trasladar(itruct PLANOS P/N*MJ,int eje, int direc):

Esta función traslada al objeto sobre el eje seleccionado.

El parámetro "direc" se refiere a la dirección en la cual se llevará a cabo la traslación sobre dicho "eje". Si el eje seleccionado es X, a cada coordenada X de los puntos del plano le es sumado el valor

dX

(en este caso para la traslación en X), el cual corresponde al incremento en la traslación.

Rotar(struct PLANOS P[N*MJ, int eje, int direc):

Esta función rota al objeto sobre el eje seleccionado.

El parámetro "direc" se refiere a la dirección en la cual se llevará a cabo la rotación sobre el "eje" seleccionado.

z

UNIVERSIDAD AUTONOMA METROWLITANA "IZTAPALAPA"

(47)

PROVECTO DE INVESTIGACWN Caa*artadtm RIRLIOTECA DE FUNCIONES GRAFICAS Y GRAFICACION PWEDRAL

Para lograr una rotación en cualquiera de los ejes, lo que hacemos es multiplicar, la matriz de rotación correspondiente respecto al cual rotaremos al objeto por cada punto del plano de la matriz de planos, esto es:

t

Para el eje X,Y, Z respectivamente , tenemos:

O 1 X X

Y

-

-

ycos @,

+

zsen @

Z -ysen @+zcos @,

ángulo-X es el ángulo al que se encuentra rotado el objeto con respecto al eje X. En las líneas posteriores se cambian los valores de los puntos de toda la matriz de planos. Para los ejes Y y Z son efectuadas operaciones similares.

comparaglanos(void *PLANOl,void *PLAN02):

Esta función es la encargada de regresar al qsort(), dados dos planos, cual de ellos se encuentra más cerca del observador, esto es:

Si el elemento1 es menor que el elemento 2 deberá regresar (-1) Si el elemento1 es mayor que el elemento 2 deberá regresar (1)

Si ambostelementos son iguales la función cornparaglanos(), regresará (O)

(48)

PROVECTO DE INMSTIGACION

kabrrtadtBTC0

BIBLIOTECA DE FUNCAONES GRAFICAS V GRAFlCAClON POLIELIRAL

ELEMENTOS

DE PUNTOS

UNIVERSIDAD AUTONOMA METROPOLITANA “IZTAPAIAPA”

(49)

S

PROVECTO DE INMSTIGAUON IhSa&dtYG RIBLIOTECA DE RINUONEE GRAFICAR Y GRAFI(M!JON POLIEDRAL

DESCRIPCION DE LAS FUNCIONES PARA GENERACION DE PUNTOS A GRAFICAR

Uno de los aspectos más importantes en lo que se refiere a la grafcación de funciones, es precisamente el reconocer y evaluar estas funciones para obtener los datos necesarios que requiere nuestra función de grafkación, estos datos los obtenemos al analizar y evaluar las expresiones que son introducidas como parámetros por los usuarios de nuestra función de graficación, la cual acepta todo tipo de funciones matématicas.

En la función de graficación se requieren como parámetros, la función a evaluar, que debe constar como máximo con dos variables, así como los rangos entre los cuales se van a evaluar estas variables dentro de la función. Para poder calcular los valores de la función a evaluar lo primero que se requiere es analizar la función de la misma manera como lo hace un compilador en sus etapas iniciales que son el análisis lexico y el análisis sintáctico, esto es para que no existan errores en la escritura de la función y en su lógica, para esto recordamos estos dos análisis tan importantes y que vimos en nuestro curso de compiladores.

Nuestro conocimiento sobre cómo organizar y escribir compiladores ha aumentado mucho desde que comenzaron a aparecer los primeros compiladores a principios de los años cincuenta. Es dificil dar una fecha exacta de la aparición del primer compilador, porque en un principio gran parte del trabajo de experimentación y aplicación se realizó de manera independiente por varios grupos. Gran parte de los primeros trabajos de compilación estaba relacionada con la traducción de fórmulas aritméticas a códlgo de máquina.

S

En la década de 1950, se consideró a los compiladores como programas notablemente dificiles de escribir. El primer compilador de FORTRAN, por ejemplo, necesitó para su implantación 18 años de trabajo en grupo (Backus y otros [1975] ). Desde entonces, se han descubierto técnicas sistemáticas para manejar muchas de las importantes tareas que surgen en la compilación. También se han desarrollado buenos lenguajes de implantación, entornos de programación y herramientas de soffware. Con estos avances, puede hacerse un compilador real incluso como proyecto de estudio en un curso de un semestre sobre diseño de compiladores.

(50)

PROVECTO DE INMSTIGACAON

ANALISIS DEL PROGRAMA

FUENTE

En la compilación, el análisis consta de tres fases:

1. -Análisis lineal, en el que la cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha y se agrupa en componentes léxicos, que son secuencias de caracteres que tienen un significado colectivo.

estructuradel programa fuente preprocesador

programa fuente compilador

programa objeto en lenguaje ensamblador ensamblador

código de máquina relocalizable

e&tor de carga y enlace biblioteca,

En este documento sólo revisaremos lo que es el ana1izador.léxico y el analizador sintáctico que son los

que utilihmos en .la funcjón grai3cadora.j .. ’.. :j

;;

’ ..

:

’.

. . . .. . . . . . . . . ;.. I : ’. , . .

. . . . . . . :: . . . .

: >

. . . .

. j .

. .,.’ . . . . . ... . . . . . . . . . . . . .. : . . .. . . ,

. .

. . . .

I . .

. .

. . . .. ... . . . . .. .. .

. . . . . I . . . . . . . .: . . . . .. . . . . . . . . . .

. . . . . . . . . . . . .

Análisis léxico

En un compilador, el análisis lineal se llama análisis léxico o exploración. Por ejemplo, en el análisis léxico los caracteres de la proposición de asignación

posición := inicial

+

velocidad

*

60

se agruparian en los componentes léxicos siguientes:

1.- El identificador posición. 2.- El símbolo de asignación

3.- El identificador inicial. 4.- El signo de suma.

5 .- El identificador velocidad. 6.- El signo de multiplicación.

UNIVERSIDAD AUTONOMA METROPOLITANA “ITTAPAIAPA” c

(51)

PROVECTO DE INMSTIGAUON

kSaartsdl&XIlLC

RIRLIOTECA DE FUNCIONES GRAFICAS V GRAFICAWON POLIEDRAL

(52)

PROVECTO DE INVESTIGA(I0N

camdkladtiarpo

RIRLIOTECA DE FUNCIONES GRARCAS V GRAFICAAWON POLIEDRAL

análisis léxico.

Análisis sintáctico

El análisis jerárquico se denomina análisis sintáctico. Este implica agrupar los componentes léxicos del programa fuente en frases gramáticales que el compilador utiliza para sintetizar la salida. Por lo general, alsfrases gramaticales del programa fuente se representan medante un árbol de análisis sintáctico como el que se ilustra en la siguiente figura.

proposición de asignación

identifícador número

Arbol deranálisis sintáctico para posición := inicial

+

velocidad*60.

En la expresión inicial

+

velocidad

*

60, la frase velocidad

*

60 es una unidad lógica, porque las convenciones usuales de las expresiones aritméticas indican que la multiplicación se hace antes que la suma. F'uesto que la expresión inicial

+

velocidad va seguida de un

*,

no se agrupa en una sola frase independiente.

La estructura jerárquica de un programa normalmente se expresa utilizando reglas recursivas. Por ejemplo, se pueden dar alssiguientes reglas como parte de la definición de expresiones:

1 .- Cualquier identiJcador es una expresión. 2.- Cualquier número es una expresión.

3.- Si expresión1 y expresión2 son expresiones, entonces también l o son expresión 1

+

expresión2

expresiónl

*

expresión2

( expresión1 )

UNIVERSIDAD AUTONOMA METROPOLITANA ''IZIAPALAPA"

Referencias

Documento similar

Debido al riesgo de producir malformaciones congénitas graves, en la Unión Europea se han establecido una serie de requisitos para su prescripción y dispensación con un Plan

Como medida de precaución, puesto que talidomida se encuentra en el semen, todos los pacientes varones deben usar preservativos durante el tratamiento, durante la interrupción

dente: algunas decían que doña Leonor, &#34;con muy grand rescelo e miedo que avía del rey don Pedro que nueva- mente regnaba, e de la reyna doña María, su madre del dicho rey,

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

La campaña ha consistido en la revisión del etiquetado e instrucciones de uso de todos los ter- mómetros digitales comunicados, así como de la documentación técnica adicional de

El contar con el financiamiento institucional a través de las cátedras ha significado para los grupos de profesores, el poder centrarse en estudios sobre áreas de interés

Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados

Fuente de emisión secundaria que afecta a la estación: Combustión en sector residencial y comercial Distancia a la primera vía de tráfico: 3 metros (15 m de ancho)..