i a hi tema - 148.206.53.84148.206.53.84/tesiuami/uam1182.pdf · tpu, superf ic. tpu, is01 ineas....

200
PROYECTO TERMINAL EN I NGENI ERI A HI DROLOGI CA TEMA: Representaciones grhficas en Geología estructural de los mantos acuíferos. (programa en turbo pascal para creaci6n de isolíneas: de nivel topogrflico, de nivel freatico y de altitud de estratos rocosos). UNIVERSIDAD AUTONOMA METROPOLITANA UN1 DAD I ZTAPALAPA. Divisibn de Ciencias Bsicas e Ingeniería. Licenciatura: Ingeniería Hidrolbgica. Alumno: Lozano Torres Sergio Asesor del Proyecto: Dipl. Geol. Horst Blaesig Schlotfeldt. (matrícula: 85329548). México, D.F., septiembre de 1995. 2

Upload: dangtram

Post on 27-Sep-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

PROYECTO TERMINAL EN I NGENI ERI A HI DROLOGI CA TEMA: Representaciones grhficas en Geología estructural

de los mantos acuíferos. (programa en turbo pascal para creaci6n de isolíneas: de nivel topogrflico, de nivel freatico y de altitud de estratos rocosos).

UNIVERSIDAD AUTONOMA METROPOLITANA UN1 DAD I ZTAPALAPA.

Divisibn de Ciencias Bsicas e Ingeniería. Licenciatura: Ingeniería Hidrolbgica. Alumno: Lozano Torres Sergio

Asesor del Proyecto: Dipl. Geol. Horst Blaesig Schlotfeldt. (matrícula: 85329548).

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

2

D e d i c o e s t e t r a b a j o . . .

. . . a m i m a m á y a m i p a p á .

1

f NDICE

Pbg i na

Dedicatoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Portada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

fndice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Resumen con comentarios de algunos métodos de interpolación y de aproximación:

1)Método geométrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2)Método del algoritmo para el trazo de una red regular de puntos y su representación como un mapa topogrbfico según John C. Davis. (Explicación. Rutinas GRID y PLOT en lenguaje Fortran) . . . . . . . 12

graficar curvas de nivel en áreas pequeñas . . . . . . . . . . . . . . . . . . . 25 3)Método de secciones transversales o emparrillada para

4)Método de curvas y superficies de Bézier. (CURVAS: E l algoritmo de de Casteljau, cálculo geométrico y procedimientos DECAS y BEZ TO POINTS en lenguaje C. La forma Bernstein. Propiedades. Derivadas. La forma matricial. Procedimiento HORNBEZ en lenguaje C. SUPERFICIES: Explicación. El algoritmo de de

Casteljau directo y un ejemplo. La aproximación del producto tensorial y el procedimiento PLOT SURF en lenguaje C. Propiedades de los parches de Bézier. Una observación.) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Aplicación del método de Bézier en el diseño de un programa para trazar isolíneas en turbo Pascal 5 . 0 . . . . . . . . . . . . . . . . . . . . . . 59

Manual de usuario del programa para trazar isolíneas: 1)Instrucciones de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 2)Limitaciones del programa y como hacer las modificaciones más comunes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Manual técnico del programa para trazar isolíneas: 1)Pseudocódigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 2)Esquema de organización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

ANEXO 1. Programa "Curva de Bézier XY" (explicacion, pseudocódigo, limitaciones, comentarios y corrida).

ANEXO 2. Observaciones para poder hacer que el programa sea útil para representar cualquier zona de la Tierra y no sólo zonas con longitud Oeste y latitud Norte.

ANEXO 3. 1)Listado de un ejemplo de archivo de datos en turbo Pascal 5.0 usado en el programa para trazar isolíneas . . . . . . .3-1 3

ANEXO 4. Diskette que contiene: llpaquete Turbo Pascal 5.0. 2)programa isolineas contenido en los archivos: entrada. tpu, superf ic. tpu, is01 ineas. map, is01 inea. ovr, isolinea. exe.

conecta los archivos isolinea.ovr y superfic.tpu. 3)espacio para el archivo provisional matamap que

4)archivo de datos de ejemplo: isolinel.dat. 5)programa Curva de BCzier XY.

ANEXO 5. Impresi6n de grhficos.

Agradecimientos.

Bib1 iograf ia.

_ _ _ NOTA: El diskette no se incluyó en este trabajo porque

podía perderse dentro de la biblioteca. Las perso nas interesadas en consultarlo o en poseerlo pue- den comunicarse con Lozano Torres Sergio al telé- fono 6-89-04-86.

4

I NTRODUCCI ON

El presente trabajo lo presenta un estudiante de Ingeniería

Hidrológica como Proyecto Terminal. Se realizó en el plantel

Iztapalapa de la Universidad Autónoma Metropolitana.

En la mencionada licenciatura, un proyecto terminal se realiza

durante los tres últimos trimestres de estudio. No forzosamente debe

realizarse un proyecto grande como el presente sino que pueden

presentarse dos o tres pequeños.

El proyecto que propuso el profesor asesor fué la realización de un programa en lenguaje Pascal para computadora que mostrara ciertos

aspectos de la topografía y de la geologia de un lugar mediante mapas

con curvas de igual elevación: del terreno, del nivel freático y de

los contactos entre tres estratos de rocas; curvas de igual

profundidad de los dos planos de contacto entre los tres estratos;

curvas de igual espesor de l o s dos primeros estratos; cortes

geológicos; y diagramas tridimensionales. Se debía poder elegir

distintas escalas. También el trabajo debía contener un análisis

comparativo de los métodos de interpolación en una superficie. No se

lograron todos los objetivos iniciales, pero sí se logró crear los

mapas que representan los puntos de igual elevación: del terreno, del

contacto entre el suelo y el primer estrato rocoso y del nivel

freático (o superficie superior del agua subterránea).

Se utili26 el método de curvas y superficies de Bézier como el

método de interpolación para conocer las elevaciones (mencionadas

arriba) de cualquier punto situado en una superficie. Y se modificó un poco para crear los mapas con puntos de igual elevación. La representación de la topografía es básica para muchos de los trabajos

de ciertos ingenieros y la del manto freatico puede ser útil en

algunos trabajos.

El programa servir& en Hidrología para apreciar globalmente la

topografía del terreno, para visualizar el relieve de la superficie

del manto frehtico y permitirá ver las inclinaciones del techo de

algún estrato rocoso (no necesariamente el más proximo a la

superficie), ello ayudaría a suponer la dirección del movimiento del

agua, o a saber hasta qué altura perforar un pozo; aunque en la

5

actualidad el problema no es tanto perforar, sino administrar la

extracci6n del agua y cuidarla de la contaminación o de la intrusi6n

salina.

No se lograron todos los objetivos porque aquellos que sí se

completaron requirieron de mucho tiempo. Se quería que el programa

pudiera representar cualquier zona de la superficie terrestre pero no

se alcanz6 a meter esta sección y sólo pueden exhibirse zonas de

latitud Norte con longitud Oeste, pero sí se incluye en el trabajo los

principios que permitirían a alguien meter al programa dicha sección.

Debido a que restaba poco tiempo para concluir el programa, se decidió

no trabajar con tres estratos rocosos sino únicamente con uno, no

sería muy complejo incluir después los otros, porque sólo se

requeriría modificar un poco la creación de archivos de datos, la

presentación de la tabla de datos y aumentar el manejo de isolíneas de

uno a tres estratos. El problema de exhibir los cortes del terreno sí es más complejo, porque se deben calcular en varios puntos sobre la

linea de corte sus distintas elevaciones, necesitando para ello: 1)

hacer una interpolación directa y no inversa como se maneja en el

presente trabajo y 2 ) trabajar por separado la topografía, el manto

freático y cada estrato, y después juntar l o s valores calculados para

exhibirlos en un esquema de corte.

aa.

Tampoco se pudo implementar en el programa la elección de

distintas escalas por cuestión de tiempo. Por otro lado, el programa

produce mapas con puntos de igual elevación y varias elevaciones, pero

no une puntos para formar isolíneas, eso se deja al usuario del

programa para que lo haga a mano. La razón es que es otro problema de

estudio el decidir y programar el orden en que se deben ir uniendo los

puntos de igual elevación.

Se había dicho que se hiciera un análisis comparativo de los

metodos de interpolación, pero no se hizo. El método elegido se

escogi6 porque parecía tener posibilidades de ser usado, por novedoso,

porque existe un libro (el de G. Farin) muy detallado sobre é l y que

incluso tiene programas para computadora) y porque después de buscar

en libros de geografía y de mapas en las bibliotecas de la UAMI y del

Instituto de Geografia de la UNAM, se encontró poca información y como

en esa época se comenzaba a estudiar uno de los métodos (el de Davis),

6

ya no se estudiaron algunos de l o s ya hallados. Durante una visita

posterior a la UNAM, algunos investigadores sugirieron alternativas de

búsqueda, tales como en la sección de Topografia de la UNAM y también

el método de Spline; pero se decidió abandonar la búsqueda y escoger

el &todo de Bézier. No se recordó revisar dos métodos que en un

principio se habían propuesto: el de Lagrange y el Kriging. También se

había sugerido buscar en algunos temas de matemáticas relacionados con

la interpolacih, pero se dejó de lado para trabajar con los

pendientes del programa y con l o s métodos de Davis y de Bézier.

"Un mapa isoplCtico es aquél que por medio de isolíneas

representa l o s valores (x, y, z) en dos dimensiones para datos

distribuidos irregularmente sobre el mapa. Por ejemplo isoyetas,

isobaras, curvas de nivel, densidad de población, etc". ( 1 )

"Si se contara con una densidad suficiente de datos distribuidos

en el Brea de estudio, el trazo de isolíneas se reduciría a unir

puntos de igual valor. El problema del trazo de isolíneas es la falta de datos, pués se requiere de una red regularmente espaciada, éSta se

puede obtener a partir de l o s valores originales mediante

interpolación. S S ( 2 ) Un mapa de is01 íneas lo puede ralizar una persona

con dos escuadras y una escala (ver método geométrico).

En el presente trabajo se presentan: un resumen, analizado en

unos puntos, de algunos métodos de interpolación, detallando más al

método de BCzier por ser el que se emplea para el programa; y respecto

al programa se muestran: 1) un manual rápido de uso con una sección al

final que indica l o s ajustes que pueden hacerse tales como cambiar

datos, limites de datos, número de puntos producidos, etc; 2) un

manual con los detalles técnicos que es el pseudocódigo en el cuál se

explica qué hacen l o s procedimientos del programa, cómo de dedujeron

algunas fórmulas y la división de los procedimientos grandes en o t r o s

pequeños; 3) el listado del programa tal y como aparece en el

diskette; 4 ) un ejemplo usando el programa, es decir una corrida del

programa, donde aparecen l o s datos, los mensajes y resultados

parciales asi como los mapas; y 5) el diskette que contiene a l o s

archivos necesarios del paquete Turbo Pascal 5.0 para que funcione el

programa, a un archivo con datos de ejemplo, al programa "Curva de

Bezier XY" y al programa de creación de isolíneas.

7

Al final del trabajo se incluye como un anexo al programa del autor Gerald Farin para el método de Bézier de trazo de una curva

sobre el plano XY con una modificación que sirve para encontrar los puntos de la curva que tengan sus coordenadas Y igualmente espaciadas. Este programa sirvió como un ensayo de lo que vendría después:

mofificar el método de superficies para que no se reportaran

culesquiera puntos sino varios conjuntos de puntos, cada conjunto con

puntos de igual valor de altura, y l o s valores de altura igualmente

espaciados (a cada 10m o 2 G m , etc. 1 . En varias ocasiones durante la realizaci6n de este trabajo se

programaron las actividades de la forma siguiente: definiendo bien

cada actividad y asignandole un tiempo posiblemente suficiente pero no

muy largo con el fin de tener un ritmo rápido de trabajo. A veces algún tiempo previsto resultó muy corto.

Lamentablemente es necesario comentar algo que se descubrió

cuando el estudio ya estaba muy avanzado, que es que el programa

produce un mapa cuya apariencia no es un reflejo muy fiel de la

realidad debido a dos dificultades que surgieron al tratar de usar el

mCtodo de Bkzier para nuestros fines: 1) se requiere de una

interpolación previa al empleo del método para crear una red regular

de puntos que por ser interpolación ya produce valores posibles pero

no seguramente reales y 2 ) el método de Bézier es un método de

aproximación y no de interpolación (lo que significa que una curva o

una superficie que crea no toca los puntos intermedios sino que pasa

lo m& cerca que puede de ellos), así que, para nuestros fines, es

inexacto porque la superficie que crea no contiene a todos los puntos

de la red que recibe como datos sino sólamente a l o s puntos de las

esquinas de esa red regular. Aún con ésto en mente, puede servir corno

apoyo en los estudios pués dá una aproximación del relieve

topográfico, del manto freatico y de un estrato rocoso que se desee

traba jar.

8

RESUMEN CON COMENTARIOS DE ALGUNOS METOWS DE INTERPOLACION Y

DE APROXIMACION.

9

@TODO GEOMPTRICO")

Se trata de encontrar grhficamente la posici6n de valores

intermedios entre dos puntos.

Sup6ngase un ejemplo prkctico: dos estaciones meteorol6gicas R y S con datos de observación de 534 y 561 mm anuales de precipitación respectivamente. Entre ellos pasan las isoyetas de 535, 540, 545, 550, 555 y 560 mm de lluvia si se escoge un intervalo de 0.5 mm.

Procedimiento (ver figura 1). Se necesitan dos escuadras y una

tira de papel en la que se escriba una escala conveniente por ejemplo

de O cm a 11 cm, indicando l o s milímetros. Se localizan las estaciones

R y S sobre el mapa y se unen por una línea recta. Se coloca apoyada sobre R la escala de papel, situando ingeniosamente el punto R sobre el valor 3.4 cm de la escala. Con una escuadra se une el punto S con

el valor 6.1 cm de la escuadra. Los valores en la escala de 3.5, 4. O, 4.5, 5. O, 5.5 y 6 . O cm se deben proyectar a la recta RS paralelos a la

-

recta imaginaria 6.1s y &to se logra primero manteniendo fija la

escala y segundo usando otra escuadra como riel para deslizar,

paralela a la recta imaginaria 6. I s , a la primera escuadra; luego se

va deteniendo la primera escuadra en las posiciones 3.5 cm, 4 .0 cm,

etc. y se marca la proyección de esas posiciones sobre la recta RS. -

A veces es mas cbmodo usar una de las dos escalas que la otra. Y a veces es conveniente usar marcas de la escala no a cada milímetro sino a cada dos o a cada tres o cinco para que las líneas RS y la

imaginaria no estén con un ángulo tan agudo que dificulte el trazado

de las proyecciones.

-

(''Tomado del método descrito en la Tesis de Frumkin, Michelle y ampliado con el ejercicio que explica en su clase de Hidrogeologia el Dr. Henrick Niedzielski en la Universidad Autónoma Metropolitana - Iztapalapa, México, D.F.

10

5311

o 561

sv2

. S3Y

511

S38

5Y9

8

c

c;

: 5- 8

x

c

Figura 1. Uso de dos escuadras y de una escala conveniente de papel para interpolar entre dos puntos con valores conocidos y así hallar las posiciones donde deben cruzar las 1 ineas de nivel.

11

&TODO DEL ALGORITMO PARA EL TRAZADO DE UNA RED REGULAR DE PUNTOS Y SU FEPRESENTAC16N COMO UN MAPA TOPOGRAFICO, SEGúN JOHN C. DAVIS.

El autor propone un método para el trazado de mapas topográficos cuya caracteristica principal es su simplicidad. Menciona que hay

muchos paquetes comerciales que hacen dicho trazado. Con el método

cre6 un programa (que é1 maneja como las rutinas: GRID, READM, PRINTM

y PLOT) el cual se incluye en su libro y aquí también. Se describirá

ahora el mCtodo con etapas numeradas y luego se explicarán algunos

pasos que hay en el programa.

1 ) Se tienen la posición (definida por dos coordenadas, la de

direcci6n Este-Oeste y la de dirección Norte-Sur) y la elevación de

cada uno de 11 puntos en una región de estudio, lo cuál se puede

representar con un rectangulo que contenga en su interior los n puntos colocados según su posicibn, y al lado de cada punto se lee su

elevaci6n sobre el nivel del mar (ver figuras 2a y 3a). Posición y elevaci6n son datos de entrada en el programa.

2) Imaginando que momentáneamente se pone una cuadrícula sobre el

recthngulo de la región de estudio, se tendrán varios puntos en los

sitios donde se cruzan las líneas de la cuadrícula (ver figura 2b). En

seguida se calcula la elevación de esos puntos y se anota al lado de cada uno de ellos (ver figura 2d).

Cabe hacer la siguiente observaci6n: cada elevación resulta de

buscar los m puntos originales más cercanos al punto de la red

considerado (en la figura 2c se consideraron puntos &is cercanos) y hacer un promedio en el que intervengan: las elevaciones de esos

puntos más cercanos y l o s inversos mult iplicat ivos de las de las

distancias, 1/D, que hay entre dichos puntos y el punto de la red. Se

calcula la distancia entre el punto dato i y el punto k de la red asi:

donde X l k y Xli son las coordenadas E-O del punto k y del punto i,

mientras que X2k y X21 son las coordenadas en la dirección N-S de esos

1 2

mismos puntos. Y luego, considerando los n puntos datos más cercanos al punto k en cuestibn, se promedian con peso (l), las elevaciones Yi de esos puntos datos para hallar la elevación Yk deseada:

h

. . . ( 2 )

3) Se redondean las elevaciones de los puntos de la red obligando

a que solamente existen nueve intervalos de elevaciones. Luego, cada

una de esas nueve elevaciones se reemplaza por un caracter

alfanumkrico (símbolos como A, $, 2, espacio vacío, etc. 1 que será impreso en el mapa final. A s í , en cada uno de todos los puntos de la red aparecer& uno de los nueve posibles símbolos.

4) En el lugar de cada punto hay un caracter, y en el mapa,

claramente, quedan reunidos todos los caracteres iguales en alguna

regi6n del recthngulo (ver figura 3b). El resultado es un rectángulo cuyo interior tiene nueve regiones, unas no impresas ( o vacías)

alternadas con otras impresas. Todas están hechas con los nueve

caracteres alfanuméricos, de los cuales un caracter sí, y otro no, se

el igi6 como espacio vacío para que el mapa final fuera más fAci 1 de

leer. El símbolo de cada región representa al conjunto de elevaciones

que se redondearon a cierto valor.

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

("Promedio pesado (tomado de: F I S I C A parte 1. Resnick y Halliday. pág. 174.): Supóngase que se nos suministran dos cajas con clavos. En una de las cajas hay nl clavos de la misma longitud 11; en la otra hay n2 clavos de longitud 12. Se nos pide que obtengamos la longitud promedio de los clavos. Si nl=n2, la longitud promedio es simplemente (11+12)/2. Pero si nlfn2, debemos tomar en cuenta el hecho de que hay más clavos de una longitud que de la otra con un factor "de peso" para cada longitud. El factor de peso de 11 es nl/(nl+n2) y el de 12 es n2/(nl+n2), que corresponden a la fracción del número total de clavos que hay en cada caja. Entonces la longitud promedio pesada es

nll1 +n212 - 1 = [nl::.] - 11 + [z] 12 o bien i =

nl+n2

13

0 7

0 7

# I 0 8

x2 I 0 6

e7

e5

L - x1 o 5 10

O

c

6.1 5.7 5.3 5.8 O O O O

7.6 7.0 6.0 5.7 O O O

7.2 7.0 6.2 5.5 O O O O

Figura Z(Basada en la figura 6.7 del libro de Davis). (a) Conjunto original de puntos de control irregularmente espaciados en un mapa. Los números son "elevaciones". (b) Red de puntos regularmente espaciados. Las elevaciones en esos puntos se van a calcular. (c) Los cuatro puntos de control &S cercanos a un punto de la red. Se pueden elegir no cuatro sino cualquier otro número. Sus distancias al punto de la red así como sus elevaciones se usan en el cálculo de la elevacibn de ese punto de la red. (d) Los puntos de la red y sus elevaciones ya encontradas. Luego, cada elevación se redondea y queda en uno de nueve valores que se reemplazan por nueve símbolos. Estos Últimos quedaran en el mapa final en el lugar de los puntos regularmente espaciados, como en la figura 3b.

1 4

*780 85:

a ) Figura 3(Tomada de las figuras 6 . 6 y 6.8 del libro de Davis). (a) Mapa en el que se desean trazar curvas topográficas. Se muestra la posicidn y la elevación de los puntos de control (b) Con los datos de los puntos de control, se usan los programas GRID y PLOT y luego una impresora produce este mapa, el cuál tiene nueve "bandas "

topográficas. Las curvas de nivel son las líneas imaginarias que separan una banda de otra. La banda de signo de dinero ( $ 1 incluye elevaciones entre 825 pies (orilla más próxima al símbolo 1 ) y 850 pies (orilla más próxima al símbolo A ) .

15

Tomada de "Statistics and data analysis in geology",

edición. Davis, J. C. primera

C C

PROI;RMI 6. I

C ROUTINE GRID m L

C C C C C C C C C C C C C C C C

C C... C... C C C C

C

,7

PROtBRMI TO COMPUTE A RECTANGULAR GRID OF VALUES INTERPOLATED FROM IRREGULARLY SPACED MAP DATA. MATRIX OF GRID VALUES I S PRINTED OUT AND ALSO PLOTED AS A LINE PRINTER CONTOUR HAP BY SJBROUTINE PLOT. A CONTROL CARD I S FIRST READ THAT

SPECIFlCATION. NEXT DATA ARE READ IN AS AN N BY 3 MATRIX,

TAINS XI(EAST-dEST OR ACROSS THE MAP) CO-ORDINATE, M E SECOND HHERE N IS THE NUMBER OF OBSERVATIONS. THE FIRST COLUMN CON-

CONTROLS rrlE SIZE OF THE FINISHED MAP. SE BELOW FOR FORMAT

COLUMN COKTAINS X2(NORTH-SOUTH O R DOWN THE MAP), AND THE THIRD COLUMN CONiAINS THE DEPENDENT VARIABLE. M E XAP AS PRODUCED BY PLOT WILL HAVE 9 EQUALLY SPACED CONTOUR BANDS SCALED BETWEEN THE HAXIMUM AND MINIMU'A VALUES OF Y.

SUBROUTINES REQUIRED ARE READM, PRINTU, AND PLOT.

DIh!ENSION DAiA(200,3),DIST(2OO),Ah~-ZP(60,1 C O ) ND=200

- """""""" "

READ MAP CONTROL CADO FORMAT " - . . - -. - . . - - - . . . -

OF CONTQOL CARD COL. 1-8 WIDTH OF YAP I:{ IN'Z'HES COL. 9-16 XI VALllE O F LEFT Z D i f O$ 'IAP COL. 17-24 X 1 VALUE OF R I i X T EDGE O 5 !.IAP

COL. 33-A0 X2 X2 VALUE OF TOP E D E OF MAP COL. 25-32 x2 VALUE OF a o r r m EDGE OF ~ A P

READ (5,ICOI 1 W I D T H . X l h l I ~ ~ . X I ~ A X . X 2 I I N , X Z U A X C C... CALCULATE MAP S I Z E AND SCALE PARAMZTERS C

I H=WI DTH* 10.0

D X I = ( X I M A X - X I U I N ) / I - ~ O A T ( I W - I l IH=WIDTH*6.O*(X2MAX-X2AII'Lf)/(Xlr(AX-XI!.~IN)

OX2=(X2MAX-X2MII~)/FLOAT(IH-I) SMALL=(DXI*DXI+DX2*DX2)/10000.0

C C... READ AND PRINT INPUT 3AT.4 MATXIX ,. -

CALL READM(DATA.N.M.ND.3) CALL PRINTM(DATA.N.M,ND.3) WRITE ( 6 . 2 0 0 1 )

C C.. . CALCULATE MAP VALUES C

16

Routine Grid (continuacibn).

90 100 I=I.Iil X2=X2MAX

XI=XIMIN DO 101 J=I.I;Y

CALCULATE DISTt*2 BETWEEN CURRENT GRID POINT AND ALL DATA POINTS

-DO 102 K=I .N

C. .. FIND THE 6 IIEAREST DATA POINTS AND CALCULATE SUVS C

S1=0.0

33 103 K=1,6 s2=0. o

DO 104 L=2,K IC= I

I F (DIST(L) .Li. DIST(IC)) IC=L

G=SORi(DIST(IC)) IF (DIST(IC) .LT. SYALL) (0 TO IO

SI=SI+DATA(IC.3)/D S2=S2+l . O / D DIST(IC)=+9.0E+35 r 104 COVTI NUE

IC3 CONTI ?NE C C... CALCULATE & I D POINT A!IG CTORE Ih‘ VATRIX L

SMAP(I,J)=SI/S2 ~

~

LO TO I I

1“ IC .~!.{AP(I,J)=DAT~(IC.3) 1 1 xI=xI+DxI

X2zX2-DX2 1 O I CONTI SUE

I CO CONTI NUE C t... SINT G I 9 VALUES c

CALL PRII~TM(A!~A?.IH.IW,6r), 100) g I R I i E (6.20C2)

C C... PRIKT UAP C

CALL PLOT(AbIAP.IH,Iil,60.l00)

1001 FORZAT ( 5 F B . O ) CALL EXIT

2001 FOR!IAT (IHO,AX.’INPUT DATA MAT9IX’) 2302 FORCAi (IH0,4X.’MAT?IX OF a 1 9 VAL3ES’)

3 D

17

primera

18

Tabla 1 (Tomada de la tabla 6.4 del libro de Davis). Coordenadas geograficas y elevaciones de los puntos de control de la figura . Las coordenadas estan en unidades de SO pies medidas desde el origen en la esquina suroeste.

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

Coordenada Coordenada Elevación Este-Oeste Nor t e-Sur sobre el / (unidades / (unidades nivel del arbitrarias) arbitrarias) mar / (pies)

O . 3 6 .1 870. O 1.4 6.2 793. O 2 .4 6 . 1 755. O 3 .6 6 .2 690. O 5 .7 6 .2 800. O 1.6 5.2 800. O 2 .9 5 .1 730. O 3.4 5.3 728. O 3 .4 5 .7 710. O 4.8 5.6 780. O 5.3 5. O 804. O 6.2 5.2 855. O o. 2 4.3 830. O o. 9 4.2 813. O 2.3 4.8 762. O 2.5 4.5 765. O 3. O 4 .5 740. O 3.5 4.5 765. O 4 .1 4 .6 760. O 4.9 4.2 790. O 6 .3 4 .3 820. O o. 9 3.2 855. O 1.7 3.8 812. O 2.4 3.8 773. O 3 .7 3 .5 812. O 4 .5 3 .2 827. O 5.2 3.2 805. O 6 .3 3 .4 840. O O. 3 2 . 4 890. O 2. o 2.7 820. O 3 .8 2 .3 873. O 6 .3 2 .2 875. O O . 6 1.7 873. O 1.5 1.8 865. O 2.1 1.8 841. O 2 . 1 1.1 862. O 3 . 1 1.1 908. O 4 .5 1 .8 855. O 5 .5 1 .7 850. O 5 .7 1. o 882. O 6 . 2 1.0 910. o O . 4 O . 5 940. O 1 . 4 O. 6 915. O 1 .4 o. 1 890. O 2 . 1 O. 7 880. O

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

19

Tabla 1. Continuación. .................................

Coordenada Coordenada Elevación Este-Oeste Norte-Sur sobre el / (unidades / (unidades nivel del arbitrarias) arbitrarias) mar / (pies)

2.3 O. 3 870. O 3 . 1 o. o 880. O 4.1 O. 8 960. O 5 . 4 O . 4 890. O 6 . O o . 1 860. O 5 . 7 3 . O 830. O 3 . 6 6 . O 705. O

"""~"""""""""""~""""-""""""""""""-

""""""""""""""""""""""""""""""""

Comentarios al programa.

1) En la rutina GRID, se dice que se requieren las subrut inas

READM, PRINTM y PLOT pero las dos primeras no aparecen en el 1 ibro.

Sin embargo, no son difíciles de construir pues sólo son para leer l o s

datos y para imprimir resultados.

2) En la rutina GRID, al final del comentario acerca del formato

de la tarjeta de control dice "X2 X2 value of top edge . . . I ' pero

debería decir sólo "X2 value of top edge . . . ' I .

3) En la rutina GRID, en la secci6n "C&lculos de tamaño de mapa y

parametros de escala" sólamente piden al usuario el valor de Width y

no piden el de Heigth porque en el programa se calcula la altura

respecto al ancho, de acuerdo con la siguiente regla de tres:

Width (Xlmax - Xlmin) =$ Height = Height (X2max - X2min)

(X2max - X2min) x Width (Xlmax - Xlmin)

. . . ( 3 )

4) La rutina GRID pide como datos los valores mínimo y máximo de

la coordenada X1 y también de la coordenada X2. Esos deben ser

buscados por el usuario pero no sería difícil contruir órdenes en el programa para que automáticamente se hiciera la búsqueda a partir del conjunto de datos.

20

5) En la rutina GRID, en la parte de "Cálculos de tamaño de mapa

y parametros de escala" aparecen los números 10. O y 6. O en los

c&lculos de ancho y alto. Estos números aparecen para que la imagen

sea corregida de una distorci6n que ocurre y la cuál consiste en que

la hoja obtenida en algunas de las impresoras de la época en la que

escribib Davis, una pulgada horizontalmente está compuesta de diez caracteres pero verticalmente se necesitan s a caracteres para dar

la medida de una pulgada. Cabe mencionar que en el libro GRAFICACION

POR COMPUTADOR CON PASCAL publicado en inglés en 1991, se menciona que

hay una distorci6n de la imagen en la pantalla de una computadora y a

ella se refiere con el término de "formato de imagen". Tal formato es de 4 / 3 , o sea que son necesarios 4 pixeles horizontales para que midan

lo mismo que 3 pixeles verticales. Menciona que se tratan de hacer

pantallas con formato de imagen de 4/4, o sea, sin distorción. Al hacer el presente trabajo, se usaron pantallas en las que el formato

de imagen es muy cercano 414 unas y , aproximadamente 2.8/3.9 otras.

Sin embargo, es de suma importancia decir que el libro de Davis se

refiere a caracteres horizontales o verticales por pulgada, mientras

que el formato de imagen se refiere a pixeles horizontales o

verticales. El caracter se usa en el modo Texto pero los pixeles se

usan en el modo Grafico.

6) En la rutina GRID, en la parte de "CAlculos de tamaño de mapa y parametros de escala" aparece dentro del calculo de las variables

DX1 y DX2 un valor 3. Tomando como partida un punto de una esquina de la pantalla, el valor que obtenga DX1 significa la distancia en la direcci6n E-O, mientras que el valor de DX2 es la distancia en la direccibn N-S, que el programa debe añadir a la posici6n del punto

considerado, para asi colocar un punto más en la direccibn E-O y otro en la direcci6n N-S. Dicho de otro modo, DX1 es la separacibn

horizontal entre dos puntos contiguos, mientras que DX2 es la

separacibn vertical entre dos puntos vecinos en la red regular de puntos. PuCs bien, en cuanto a la direcci6n E-O (aunque es analog0

para la direcci6n N-S), se explicara en seguida el porqué del valor -1. Véase la figura 4. El programa debe calcular la coordenada X1 de todos l o s puntos que habran horizontalmente pero como las coordenadas

Xlmax y Xlmin ya son conocidas, solamente faltaran averiguar las

2 1

coordenadas de los puntos intermedios. Supóngase que seran 15 puntos

en la dirección E-O, entonces sea

r = número de puntos-1 = 15-1 = 14 . . . (4)

se tiene:

Xlmax = Xlmin + (r)x(DXl); . . . ( 5 )

donde DX1 es aún desconocido, pero se requieren r veces su valor para

añadir a Xlmin y así hallar Xlmax.

Luego

Xlmax-Xlmin DX1 = . . . ( 6 )

r

En el programa no se manejaran puntos sino caracteres. El número de caracteres en. la dirección que se ha considerado ya fué calculado

por el programa como IW, pués IW consideró el tamaño en pulgadas del ancho y la corrección de la distorción de imagen. Entonces:

r = IW-1 . . . ( 7 )

y, entonces queda:

Xlmax-Xlmin

IW-1 DX1 = . . . ( 8 )

Por alguna razón que no fué terminada de conocer, en el programa

se puso como denominador de la fórmula anterior a FLOAT(1W-1).

DX 1 . . . . + l . . . . . . . . . .

Xlmin X 1 max

Xlmax = Xlmin + (r)x(DXl); r = número de puntos-l.

F i g u r a 4 . Una l í n e a h o r i z o n t a l d e l a r e d d e p u n t o s r e g u l a r m e n t e e s p a c i a d o s . E n este ejemplo se suponen quince puntos . La separac i6n

e n t r e e l l o s es D X 1 .

2 2

7) En la rutina GRID, al final de la sección "Encontrar los 6

puntos datos (puntos originales) mBs cercanos y calcular las sumas"

esta la linea:

DIST(1C) = +9.0E+35 . . . (9)

Esta, casi seguramente fue una cantidad escogida arbitrariamente,

con tal de que fuera muy grande, que sirve para que en el proceso de

comparacih de DIST(L1 con DIST(1C) (de la misma sección de la rutina GRID), se vayan eliminando los puntos vecinos mAs próximos a medida que sus distancias y elevaciones van siendo consideradas en el cálculo

de las sumas que posteriormente conducirAn a hallar la elevación de cierto punto de la red.

8 ) En la rutina GRID, en la misma sección a la que se refiere el

comentario anterior, se encuentra la variable SMALL, la cuál evita

hacer todos los cAlculos de las sumas y del promedio pesado cuando es

detectado un punto dato extremadamente cercano al punto de la red cuya

elevaci6n se desea calcular. La instrucción "GO TO 10" lleva a

asignarle a ese punto de la red, la elevación de su muy cercano

vecino.

Lo que resultó un poco extraño es la forma compleja en la que el

autor define a la variable SMALL. En efecto, si el autor quería que fuera un número muy pequeño para comparar valores, ¿por qué no

asignarle arbitrariamente un pequeño valor tal y como, al parecer, asignó el valor grande de 9.0E+35? Es posible que la explicación sea

que, como el programa es capaz de representar un mapa topográfico para

una Area de estudio que sea, indistintamente, chica o grande, entonces

es posible que un valor preasignado a la variable SMALL detectara un

punto vecino muy próximo a un punto de la red si el mapa fuera de una

Area chica pero quizás esa cercanía no sería detectada en el mapa de una Brea grande. Entonces, la variable SMALL se construyó usando los

valores de D X 1 y D X 2 , 10s cuáles consideran la longitud horizontal y

la vertical del Brea de estudio. Esa variable fu6, al parecer, definida como un diezmilksimo del cuadrado de la distancia que hay

entre dos puntos de la red situados oblicuamente; o , en otras

23

palabras, es el diezmil6simo del valor del cuadrado de la hipotenusa

de un trihngulo recthngulo con catetos DX1 y DX2.

9 ) Las curvas de nivel no aparecen como curvas dibujadas en e 1

recthngulo sino se deben entender como las curvas imaginarias que

separan a las regiones representadas en el mapa.

24

&TODO DE SECCIONES TRANSVERSALES O EMF'ARILLADA PARA GRAFICAR

CURVAS DE NI VEL EN AREAS PEQUEÑAS.

Datos tomados del libro: Parker, Harry y MacGuire, John W. INGENIERIA DE CAMPO SIMPLIFICADA PARA ARQUITECTOS Y CONSTRUCTORES. Editoriales LIMUSA - WILEY, S.A. y Centro Regional de Ayuda TCcnica, Agencia Para el Desarrollo Internacional (A. I. D. 1, Departamento de

Estado Del Gobierno De los Estados Unidos De Amkrica. Primera edición,

Mbxico, 1972. paginas: 139-142.

"El mejor mCtodo para graficar curvas de nivel para Breas

relativamente pequeñas, como terrenos para construcción, se conoce

como el mCtodo de secciones transversales o emparrillada". En seguida

se resume el mCtodo descrito por los autores del libro.

1.- Por medio de un transito y de una cinta se divide primero el

terreno en una serie de cuadrados que se llama reticula.

2.- Se usa un sistema de notación para identificar puntos

específicos de la parcela, las líneas horizontales se

denominan A, B, C, . . . y las verticales se numeran 1, 2, 3, . . . y la pareja cualquiera formada de una letra y un número es la etiqueta para designar un Único punto; por ejemplo C-4 es

el centro de la figura 5.

3.- Se toma la elevación del terreno en las esquinas de los

cuadros y se indica en el plano.

4.- El tamaño de los cuadros, entre 3 y 30 metros, será

determinado por el desnivel del terreno y por el propósito

para el que se utilizara el mapa de curvas de nivel.

5.- Se escogen intervalos de un metro entre las curvas de nivel

que se trazarán (así dice el libro pero se pueden escoger

otros intervalos).

6 . - Se deben encontrar los puntos de las líneas (horizontales y

de las líneas verticales) de la reticula en donde cruzan las

2 5

curvas de nivel. La figura 6 muestra aumentado al cuadrado de

la esquina superior derecha de la figura 5 y el prop& i to es

encontrar los puntos de interseccibn de las curvas de nivel

78, 79 y 80, con las líneas de la reticula. Se colocan las

escalas junto al cuadrado y en la figura se indica el

procedimiento para encontrar l o s puntos. El principio

fundamental es la división de una línea en un número

cualquiera de partes iguales por medio de una regla graduada.

"Sin embargo, no es necesaria una gran exactitud y el

topbgrafo experimentado hace las interpolaciones mentalmente".

7. - DespuCs de determinar los puntos de las curvas de nivel en todas las líneas de la reticula se dibujan las curvas con

líneas continuas, como se muestra en la figura 5.

2 6

F i g u r a S (tomada de Parker y Machire). Mapa c o n l a s c u r v a s y a

d i b u j a d a s . Los v a l o r e s d e e l e v a c i ó n e n las e s q u i n a s se midieron en e l t e r r e n o .

~~ -

F i g u r a 6 ( tomada de Parker y MacGuire). Trazado de las c u r v a s d e

e l e v a c i ó n 78, 79 y 80 e n la e s q u i n a s u p e r i o r d e r e c h a d e l a f i g u r a S

(aumentada). Con ayuda de escalas se b u s c a e n l o s c u a t r o l a d o s d e l cuadrado l a p o s i c i 6 n d e las e l e v a c i o n e s 78 , 79 y 80 y esas marcas se u n e n c o n l í n e a s a las que se señala s u v a l o r .

27

METODO DE CURVAS Y SUPERFICIES DE BEZIER

2 8

EL ALGOR1 TMO DE DE CASTELJAU.

"(Este) algoritmo . . . es probablemente el más fundamental en el

campo del diseño de curvas y superficies, sin embargo es

sorprendentemente simple." (FUENTE: libro de G. Farin, capítulo tres).

Parábolas. - Puede construirse una parábola tomando como guía una línea

quebrada o polígono formado por dos segmentos de línea recta. Sean bo,

bl, b2 los tres vértices del polígono (Ver figura 7 1 dividir el

segmento del intervalo real [O, 11 en dos por el punto t . La misma proporci6n en que ha quedado dividido este intervalo es la que se usa

para dividir en dos cada segmento recto del polígono. Los puntos de

divisi6n de los segmentos (b' b' de la figura) se unen a su vez con

un segmento de recta que también ha de ser dividido en dos según la misma proporci6n. El punto final de divisi6n (b 1 es un punto de la

parábola. Algebraicamente ese punto se obtiene asi:

o' 1

2 O

. . . (10)

Insertando las primeras dos ecuaciones en la tercera, se 0

bi(t) = (1-tI2bo + 2t(l-t)bl + t 2 b2 . . . (11)

lbt iene:

FIGURA 7 . Parabolas. ~onstrucci6n por interpolaci6n lineal repetida.

2 9

Si se escogen después otros puntos t entre O y 1, para dividir

los segmentos en otras distintas proporciones procediendo para cada

punto t como se hizo con el primer punto t , se obtendrán varios puntos

mAs de la parhbola.

El Algoritmo. - Puede generalizarse la forma en que se construyó la parábola a

fin de indicar la construcción de una curva de grado n. Para ello se

requiere de guia un polinomio formado de n segmentos de recta y con

n+l vértices: bo, b l , . . . , bn E [E3. El parámetro de división de

segmentos es t E IR.

Dados: bo, bl, . . . , bn E E?, se pone

bY(t.1 = (l-t)bl-l(t) + tbiy:(t)

con

r = 1, . . . , n i = O, . . . , n-r . . . (12)

y by(t 1 = bi. Entonces bn(t 1 es el punto con valor de parámetro t en la curva.

O

El polígono que sirve de guía se llama polígono de control de la

curva b" y la curva es la Curva de Bézier.

Se puede usar el esquema de De Casteljau (un arreglo triangular

de puntos) para colocar los coeficientes intermedios que se van

calculando. Para el caso cúbico:

En computación no se debe desperdiciar memoria empleando un

arreglo bidimensional para trabajar el algoritmo. En un arreglo simple

se meten los coeficientes de los puntos de control. Un segundo arreglo

simple servirá para guardar momentáneamente l o s coeficientes

intermedios. A s í , los primeros puntos calculados b b1 y b pueden

colocarse en las posiciones 0 , l y 2 del arreglo. Los segundos puntos

calculados se colocan sustituyendo a b y b y así se llega al último punto (que debe ser igual al punto de control final b para el caso en

1 1 0 ) 1 2

1 1 O 1

3

30

que t=l, esto es b ( t=l )= b3) 3 O

3

-

A

FIGURA 8 A ) El polígono de control con sus vértices b . O i

B) Se interpola para hallar los primeros puntos calculados b 1 . C) Se interpola para hallar los segundos puntos calculados b 2 . D) Se interpola para hallar un punto de la curva b

E) Interpolando con otros valores t se encuentran otros

i

i 3

O'

valores b y se construye la curva. 3 O

1 I o t.

13- I

31

Procedimientos tomados de "Curves and surfaces for computer aided geometric design. A practical guide". Farin, G .

float decas(degree,coeff ,t) / * uses de Casteljau to compute one coordinate

"-

value -oy a Bezier curve. Has to be called for each coordinate (x,y, and/or z) of a control polygon.

Input: degree: degree of curve. coeff: array with coefficients of curve. t: parameter value.

Output: coordinate value. */

float coef f [I ; float t; int degree; i int r,i; -I' float tl; float coef f a [io1 ;

tl = 1.0 - t; for(i=O; i<=degree; i++)

coef f a [i] =coef f [i] ;

/ * an auxilidy array*/

/ * save input array * /

"

for ( r -1 ; r<= degree; r++) for (i=O; i<= degree - r; i++) c

> return (coeffa[Ol);

coeffa[il= t1* coeffaci] + , t * coeffa[i+ll ;

void,,b*yeoi.g(degree,npoints,coeff ,points) /* Converts Bezier curve into point sequence. Works on

one coordinate only. ~ -. _". ~

Input: degree: degree of curve. ,npoints: # of coordinates to be generated. (counting

from O!) coeff: coordinates of control polygon.

Output: points: coordinates of points on curve.

Remark: For a 2D curve, this routlne needs to be called twice, once for the x-coordinates and once for y.

*/ int degree, npoints; float coeff [I .points[] ;

float t,delt; int i; float decaso;

I

Debe ser

delt=l.O/(float)npoints; /* step length */ taO.0; for(ri=O; i<=npoints; i++) c

points[i]=decas(degree,coeff ,t); t = t+delt; '

3 2

Debe notarse que la generación del polígono no es así: obtenido

un punto de la parhbola, se usa su valor para hallar, mediante la

expresibn algebraica anterior, al siguiente punto. Sino que lo

correcto es que la obtención de un punto de la curva es independiente

de los otros puntos de la curva, y su valor se halla calculando

necesariamente todos l o s coeficientes intermedios correspondientes a

su valor t .

Entre las propiedades de las curvas de Bézier, una parece tener

utilidad para el presente trabajo y es:

Diseño con las curvas de E%ézier.-

Si se quiere reproducir la forma de una curva hecha a mano, es

suficente especificar un polígono de control que de cierta manera

exagera la forma de la curva. Se puede ajustar la localización (y

posiblemente también el número) de los vkrtices del polígono.

OBSERVACIONES. 1. Se trató de construir la misma figura que describe Gerald

Farin pero no se logró hacerla igual. Sólo en el primer tercio,

aproximadamente, de la curva, son ambas parecidas. Pidiendo opinión a

un experto se concluye que la figura propuesta por Farin tiene

distorsión de impresión en el libro. En cuanto a la parhbola, ésta si

concuerda con la figura de Gerald Farin.

3 3

Una posible aplicacibn del algoritmo de d e Casteljau para el

presente trabajo es la que sigue.

PiCnse que se tiene mostrado en la pantalla de la computadora un

mapa con las coordenadas de latitud y longitud y en é1 hay varios

puntos; junto a cada uno se exhibe en pantalla el valor de una tercera

coordenada, por ejemplo la altitud. Piénse despuCs que se ha elegido un m6todo que calcula, con base a las tres coordenadas de los puntos

conocidos, un conjunto o red de nuevos puntos que exhibidos en un nuevo mapa en la computadora mostrarían junto a cada uno su valor de

altitud. Para trazar las curvas de igual altitud se hace lo que a continuacibn se detalla.

Ordenar de mayor a menor ( o al contrario) los valores de altitud

que poseen los puntos de la red. Elegir el primero.

Repetir lo siguiente hasta haber realizado el trazo de la curva

para el último valor de altitud:

1. Se muestran en pantalla sblamente los puntos que exhiban tal val or.

2. Se considera que ellos son los puntos de un polígono y se traza la correspondiente curva usando el algoritmo de d e

Caste1 jau.

3. Sin borrar los puntos del valor de altitud considerado se

modifica la posici6n o número de vCrtices del pol ígono una y otra vez hasta que la curva formada pase aproximadamente por

todos los puntos de ese valor.

4. Se elige el siguiente valor de altitud.

En la siguiente seccibn, cuando se describan las curvas Bézier 2 LCrminos polinomios d.e Bernstein, se dará una idea más correcta sobre la posible aplicación el método de Bézier para interpolar y

luego crear un mapa de curvas de nivel.

3 4

LA FORMA BERNSTEIN DE UNA CURVA DE BEZIER

En las paginas anteriores se vi6 que mediante el algoritmo de "de

Casteljau" se podía obtener gráficamente (y también mediante un

programa que aplique este algoritmo) una curva de Bézier teniendo como

datos los puntos bo, bl, . . . , bn del espacio tridimensional E3. El algoritmo de "de Casteljau" es un algoritmo recursivo. En seguida se

mostrara como las curvas de Bézier pueden expresarse con una f6rmula no recursiva; pues haciéndolo así se facilitara considerablemente el

desarrollo tebrico posterior. Se utilizaran ciertos polinomios que

según Hearn y Pauline son "funciones de combinaci6n, puesto que

combinan los puntos de control para formar una funci6n compuesta que

describe la curva".

Un polinomio "es una expresión que consta de más de un término,

como a+b, a+x+y, x +2x +x+7". "Los elementos de un término son cuatro:

el signo, el coeficiente, la parte literal y el grado". "La parte

literal la constituyen las letras que hallan en el término". Un

termino esta separado de otro por el signo + o por el signo - (tomado de ALGEBRA, Dr. Eugenio Baldor. Primera reimpresión. México 1984.

PBgs. 14, 15 y 16).

3 2

Los polinomios de Bernstein se definen asú:

donde los coeficientes binomiales se deben de entender así:

r n!

O en otro caso . . . (15)

Observaciones : 1) Hay (n+l) polinomios de grado n y son Bn BY, . . . , B".

O' n 2) Estrictamente, los polinomios de Bernstein son monomios y no

polinomios pués cada uno de esos polinomios s6lo tiene un

término y no los dos o más términos que según Baldor deberían

tener para poder recibir el nombre de polinomios.

3 5

3) La letra t en l o s polinomios de Bernstein es la variable. Se

puede elegir a t como cualquier número real. Si se toman todos los números reales entonces la gr6fica de cada polinomio, que

es una línea curva, se extendera infinitamente en sus dos

extremos. Si se restringen los valores de t a ser únicamente los números comprendidos entre el O y el 1 (como O. 12, O. 712, 0.1415, . . . I entonces la grhfica restringida a esos valores

ser6 un pedazo de la "curva infinita". Si el polinomio toma un Único valor de t cualquiera, entonces la grafica del polinomio restringido a ese valor es un Único punto de la "curva

infinita" . 4 ) Un polinomio de Bernstein puede ser considerado como una

f6rmula que contiene a la variable t. Sólamente cuando se le asigne un valor numérico a esa variable, el polinomio tendra un

resultado numérico. Mientras no se le asigne, el polinomio

seguir& siendo una fórmula.

5 ) Para cualquier valor que t tome de entre l o s posibles que hay

entre el O y el 1, habra un valor del termino Bn(t) también entre O y 1. Ademhs, no ocurre en general, que t=Bn(t 1 . El valor de B"(t 1 depende del valor de t.

J

J

J 6 ) Hay tres formas de entender la expresión ( 1 4 ) : una de ellas es

pensar que B"(t 1 es el número que resulta de aplicar la fórmula del j-Csimo polinomio de Bernstein de grado n, cuando la

variable toma el valor numérico t, donde t es un Único número cualquiera entre O y 1; otra es pensar que B"(t 1 es una forma

abreviada de indicar a todos los valores posibles que la

fórmula del i-6simo polinomio de Bernstein de grado n pueda dar

por resultado cuando ella es aplicada a todos los números t

posibles que existan entre O y 1; la tercera forma es la que considera a todas las posibilidades, o sea l o s (n+l) posibles

polinomios (pués j puede ser O, 1, . . . , n) y donde t toma todos los posibles valores entre O y 1.

J

J

La ecuación

36

n Bn(t) I 1

j =O 1 . . . (16)

nos dB a con ese

entender que cuando t toma un valor cualquiera entre O y 1, y valor se aplican las fórmulas de l o s (n+l) polinomios de

Bernstein, se obtienen (n+l) números cuya suma es 1. Entonces, cada

Bn(t 1 donde j= O, 1, . . . , n, es un número. J

Los puntos bf(t), o sea los puntos intermedios y los finales en el trazado de una curva según el algoritmo de "de Casteljau" (ver

figura 1, se pueden expresar con la terminología de los polinomios de

Bernstein así:

Lo más importante de la ecuación anterior es el caso de r=n. Son los puntos finales de la curva:

n bn(t) = bn(t) = 1 b Bn(t) . . .

O j =o f j (18)

y nos quita el problema de calcular los puntos intermedios que se

necesitaban en el trazado geométrico. Directamente se obtienen l o s

puntos de la curva, bn(t) a partir de los puntos b del polígono de

control. O j

PROPIEDADES DE LAS CURVAS DE BEZIER

Algunas de ellas son:

No variación bajo transformaciones afines del parámetr-o.-

No debe pensarse que t debe tomar sólo l o s valores comprendidos

entre O y 1; en realidad la curva puede estar definida en cualquier intervalo (a, b) porque lo que importa es la proporción de distancia que el parámetro guarde respecto a l o s extremos del intervalo, ya Sean

éstos O y 1 o sean a y b.

37

Interpolación de puntos finales.-

La curva de B6zier pasa por l o s puntos finales b y b : O n

bn(0) = bo (porque usando las ecuaciones 14 y 18, los términos donde i*O valen cero y sólo cuando

i=o se tiene ~ ~ ( 0 ) = 1 ) . . . (19) 1

bn(l) = b (porque en las ecuaciones 14 y 18, el Único

valor de Bn( 1) que no vale cero es Bn( 1 )=l, cuando i=n) . . . ( 2 0 )

n

i i

En diseño es importante tener control sobre los puntos finales.

Simetría. - En los ejemplos de la figura 9 no importa que los puntos de

Bézier se hubieran etiquetado como b bl, . . . , b o como b , b n n n-1’ . . . , bo. La dirección en que la curva se trace no interfiere con su

forma. Se verá enseguida matemáticamente que los muchos puntos

generados al darle valores al parámetro t (desde O hasta 1) y trazados

en la dirección de b hasta b son los mismos puntos que se obtienen

si el trazado es desde b hasta b

O’

O n

n O’

n n b Bn(t) contra b Bn(t)

J J J =O J J J =O

Observando las ecuaciones 14 y 15 se deduce:

B” J

’Entonces, también:

Finalmente:

n n b Bn (t) = b Bn(l-t) n-j n-j

J =O n-J .j j =O

. . . (21)

. . (22)

. . . (23)

. . . (24)

3 8

Figura 9 (tomada de la figura 3.3 del libro de Gerald Farin). Bézier. Algunos ejemplos.

Curvas de

Precisión Lineal. - Si el polígono de control esta formado por los vCrtices b

1 uniformemente distribuidos sobre una línea recta, entonces la curva

que es generada es la misma línea recta. Esta propiedad se 1 lama

precisi6n 1 ineal. La siguiente identidad, así como la ecuación 16 servirh para la

demostración:

. . (25)

Sean los puntos b (j= O, . . . , n) situados en la línea recta J

entre los puntos p y q:

b 1 = [1 - i]p + E]q . . . ( 2 6 )

Los puntos de la curva de Bézier seran puntos de la línea recta

entre p y q. Wase:

39

= p(1) - p(t) + q(t)

Control Pseudoloca1.-

Si se moviera un vértice, por ejemplo bi, del polígono de

control, se puede predecir d6nde se vera afectada mayormente la forma

de la curva, ser& en la regi6n de la curva alrededor del valor del

parametro t=l/n. VCase la figura 10, se tiene un polígono de cinco

vértices. "Si se moviera el punto b entonces la regi6n de la curva que mas sentiría el cambio NO SERIA la que esta pr6xirna al punto b

2

sino la región alrededor del parametro 2/4, pués si se divide la curva

en cuatro partes iguales, entonces la región de 2/4, en el segundo

cuarto, sería la mas afectada". Esto es una interpretación que hace el que escribe estas líneas sobre la propiedad de control pseudolocal que

el libro de Gerald Farin describe en su capítulo de "La forma Bernstein de una curva de Bézier".

2'

Figura 1 0 . En A se muestra un polinomio de cinco vértices. En B se muestra un bosquejo de la curva generada por el polinomio y en sombreado esta la región (alrededor de la mitad de la curva) que se v e r í a &S afectada en su forma si se moviera el punto b2.

LA DERIVADA DE UNA CURVA DE BtZIER. La derivada de un polinomio de Bernstein Bn se obtiene derivando

la ecuaci6n 14 respecto de t como un producto de dos funciones. Queda i

4 0

así :

d

dt i [ i-1 1 - Bn(t) = n Bn-l(t) - B:-'(t)

Y la derivada de una curva de Bézier bn:

. . ( 2 8 )

. . . (29)

La última f6rmula se puede simplificar algo introduciendo el

operador diferencia hacia adelante A:

Ab. = bj+l - b J 5

Entonces

d

dt -

La der

n- 1 bn(t) = n Ab, b?-l ( t ) ;

i vada

Ver figura 11.

J =o J J Ab E IR

1

le una curva de Bézier es Dués

. . . ( 3 0 )

. . . (31)

ltra curva de B6zier.

Far i n) . Derivadas : una curva de Bézier y la curva de su primera derivada (escalada hacia abajo por un factor de tres). Note que esta curva derivada no cambia se se aplica una translaci6n a la curva original. En la figura inferior se ve al polígono de control cuyos vértices los definen los vectores AbO, Ab1 y Ab2 y se ve, en un tono m& oscuro, la curva de Bézier para ese polígono.

41

Derivadas de Orden Superior.

Primeramente, se deja definido el operador

Arb = Ar-' b - Ar-' b r = O, 1, 2, . . . J j+l

. . . (32 ) 1 '

¿Se puede tener A b ? No. Porque sólo hay un punto adelante del S

n- 1

punto bn deberían existir cinco. - Resolviendo para r=O, r=l, r=2, r=3 se nota un patrón que puede

resumirse así :

Arb i = k] (-llr-' b . . . i + J J =o

(33 )

Ahora, la derivada r-ésima de una curva de Bézier tiene la

siguiente fórmula:

dl' n! n - r - bn(t) = m Arb Bn"(t) d t r J =o J 1

. . . (34)

Observación: las derivadas no pueden ser infinitas. E l máximo

valor de r depende del número de puntos de control y es n. Se puede

saber ésto por inspección de la ecuación anterior que para r=n

aparecería n!A"b B y se sabe que B es permitido por las ecuaciones

14 y 15; pero con el valor r=n+l, aparecería en la ecuación de arriba

el valor -1 con el cuál ya no se puede usar esa ecuacibn:

O O

O 0 O

Los casos r=1, r=2 de la ecuación anterior se muestran en la

figura 12.

4 2

i r Figura 1 2 (tomada de la figura 4.3 del libro de Farin). Derivadas de puntos extremos: el vector de la primera derivada y el de la segunda en t=O son múltiples del vector de la primera diferencia y del vector de la segunda en bo. Para r=l el mÚltiplo es n.

Derivadas y el Algoritmo de "de Casteljau".

Las derivadas de una curva de Bézier pueden expresarse en

términos de los puntos intermedios generados por el algoritmo de "de

Caste1 jau":

dr n!

Las ecuaciones 34 y 35 sugieren dos distintos modos de calcular

la derivada r-Csima de una curva de Bézier: para el primer mCtodo

(ecuación 341, calcule todas las r-ésimas diferencias hacia adelante

de los puntos de control, luego interprételas como un nuevo polígono

de Bézier de grado n-r y evalúelo en t. El segundo método, usando la ecuación 35, calcula la derivada

r-ésima como un "byproduct" del algoritmo de "de Casteljau". Si calculamos un punto en una curva de Bézier usando un arreglo

triangular como en 13, entonces para cualquier n-r, el bi

correspondiente forma una columna (con r entradas'')) en aquCl

esquema. Para obtener la derivada r-ésima en t, tomamos simplemente la diferencia r-ésima de estos puntos y luego la multiplicamos por la

constante n! /(n-r) ! . En algunas aplicaciones (por ejemplo

intersecciones curva/plano), uno necesita no sólamente un punto en la

4 3

curva, sino su primera y / o segunda derivada al mismo -tiempo. El algoritmo de "de Casteljau" ofrece una solución rápida a este problema.

Un resumen de ambos métodos: con el fin de calcular la derivada

r-&sima de una curva de Bézier, realice r pasos de diferencia y n-r

pasos de evaluacih. No importa el orden en el cuál ejecute estos dos

pasos.

LA FORMA MATRICIAL DE UNA CURVA DE BEZIER. Algunos autores prefieren escribir las curvas de Bézier y otras

curvas polinomiales en forma matricial. La curva de BBzier:

se puede interpretar como un producto punto:

Y aún más:

m . . . O 0 - - -

m . . . nO

donde

m

m nn

- to

. . . ( 3 6 )

. . . ( 3 8 )

. . . (39)

Implementación.

Se puede emplear la multiplicaci6n anidada o esquema de Horner

(que sirve para evaluar un polinomio en su forma monomial) para hacer

4 4

el programa propuesto por Farin, y así hallar las coordenadas de los

puntos de la curva de aproximación. Dicho programa ahorra más tiempo que el programa anterior Decas.

En general, para el caso cúbico, empleando el esquema de Horner

queda :

+ + t c2 + t c3 = c + t(Cl + t(c2 + tC3)). O 1 O . . . (40) 2 3

Y como ejemplo para curvas de Bézier de grado superior a tres:

n bn(t) = b B" (t)

J =O J J

n = b, e]tJ (1-tIn-'

= bo k]to(l-t)n-o + bl P]t'(l-t)"" + b2k]t2(l-t)n-2 +

j =o

+ b3k]t3( l-tInm3 + . . . + b n n [.ltn(l-t)n-n

- - bo [n](l-tIn o + b I"]t (1-tln-' + b2 I"] t2( 1-t 1n-2 + 1 1

+ b3 p]t3(l-t)n-3 3 + . . . + b n n P]tn

= ( . . . ( ( ( k](l-t)bo + P]tbl) 1 (1-t) + ["]t2b2)(1-t) 2 +

+r]t3b3)(l-t) 3 + . . . + [ ] t""b )(l-t) + r]tnb n- 1 n- 1 n n

bn(t) = ( . . . ( ( ( k]sbo + [:jtbl)s + k]t2b2)s +

+k]t3b3)s + . . . + [ n - 1 ] tn-lb )S + p]tnb

donde S = (1-t) . . . (41)

n- 1 n n'

4 5

Con la siguiente identidad se facilita la programación:

k) = y [i”] ; i’o n-i+l

. . . (42)

4 6

float h-z(degree,coeff,t) /* uses a Horner-like scheme to.compute one coordinate

value of a Bezier curve. Has to be called for each coordinate (x,y, and/or z) of a control polygon.

Input: degree: degree of curve. coeff: array with coefficients of curve. t: parameter value.

output: coordinate value. */

int degree; float coef f [I ; float t;

int i,n-choose-i; / * Warning: on 16 bit machines, this will

float fact,tl,aux;

tl=1.0 - t.; fact=l.O; n-choose-i=l;

auxxcoef f [O] *t 1 ; /* starting the evaluation

for(i-1; i<degree; i++)

fact-fact*t; n-choose-i=n-choose-i*(degree-i+l)/i; /* always int! */ aw=(aux + fact*n-choose-i*coeff[il)*tl;

blow up if degree > 16 ! */

loop * /

{

1 aux - aux + fact*t*coeff[degree];

return aux; 1

Este Procedimiento reemplaza al procedimiento "Decas" dentro del procedimiento "Hornbez". Tomado de "Curves and surfaces for computer aided geometric design. A practical guide". Farin, C.

4 7

Una superficie puede pensarse como la superficie dibujada por una curva que se translada y que en su trayecto sufre deformación.

Figura 13 .(Tomada de la figura 16.5 del libro de Farin). Superficie calculada con producto tensorial. Una superficie puede ser pensada como la superficie que es barrida por una curva que se mueve y que mientras lo hace se v& deformando.

Algunas definiciones.

l)Lineal(').- Relativo o perteneciente a la linea. La expresión

lineal respecto a una letra (la de la variable), es la expresión en la cual la letra o variable es lineal, o sea del primer grado.

2 ) Interpolación bilineal. - Es un proceso extendido de la

interpolación lineal, la cual produce como resultado a cualquier punto (y a todos) que pertenece a la curva mas simple entre dos puntos ( o

sea la línea recta). La interpolación bilineal produce la superficie mas simple que se pueda trazar entre cuatro puntos; es decir que puede

encontrarse con ella a todos y a cualquiera de los puntos de esa

superficie.

"""""""""""""""""""""""""""""""""""

("Fuente: Pequeño Larousse Tecnico. Tomas de Caiana Minqol. Ediciones La ousse. Edición 1978. Mexico, 1978. ( 2T

Explicación y figura adaptadas de las paginas 266 y 267 de Manual de Matendticas para Ingenieros y Estudiantes. I. Bronshtein, K.

Semendiaev. versi6n española de Inks Harding Rojas. Ediciones de cultura Popular, S . A . Mkxico, D.F.

48

3)Paraboloide hiperbólico. - ES la superficie m& simple que est&

entre cuatro puntos. Se le llama así porque si la superficie se

intersecta con un cierto plano ( o un plano paralelo a este), la curva

de la intersección es una hipérbola y si el paraboloide hiperbólico se intersecta con cualquiera de los dos planos perpendiculares al anterior ( o un plano paralelo a cualquiera de ellos) en la

intersección se dibuja una parabola (ver figura 1 4 ) .

Figura 1 4 (2). Un' paraboloide hiperbólico. Nótese que las secciones paralelas al plano XOY por arriba de 61 son hiperbolas (una hipérbola es una curva doble) con vértices sobre el plano XOZ; que las secciones paralelas al plano XOY por abajo de 61 son hipérbolas con vkrtices sobre el plano YOZ; que las secciones paralelas al plano YO2 son parabolas iguales; y que las secciones paralelas al plano X02 son par&bolas iguales.

Nomenclatura.

En el caso de las curvas de Bézier, tenemos la notación:

bo, bl, . . . , bn: n+l puntos de control.

bn(t 1 : puntos de la curva de Bézier calculada con n+l puntos de cont ro 1.

br (t 1: puntos intermedios en el trazo de una curva de BCzier con i

algoritmo de de Casteljau.

En el caso de superficies:

b - - bo''; con i= O, 1, . . . , m; j= O , 1, . . . , n: los puntos de 'j 'j control para el trazo de una superficie de Bézier.

4 9

bm9 (u,v)= punto sobre la curva de Bézier calculado con una red de m+l O ’ o renglones de puntos y n+l columnas de puntos.

brPr* con r=1, . . . , n; I , j= O, . . . , n-r: puntos intermedios y finales ’”’ en el trazo de la superficie con el algoritmo de de Castel jau. los puntos finales son:

bm> 090

bm> : superficie de Bkzier.

El algoritmo de de Casteljau directo. Así como en la sección de curvas de Bézier se usó el algoritmo de

de Castel jau para construirlas (ver paginas 21 a 231, en el caso de

las superficies de Bézier el algoritmo de de Castel jau con el que se

construyen es:

r= 1, . . . , n I , J=O, . . . , n - r

Se desarrollará a continuación un ejemplo.

Supóngase n=3 y los siguientes puntos de control (ver figura15):

Por simplicidad se pide hallar nueve puntos de la superficie de

BCzier dando valores a los parámetros como sigue:

1. u= O . 25 , v=O. 25 7. u= 0.75, v=O. 25 2 . u= 0 . 2 5 , v=O. 50 8 . u= 0.75, v=O. 50 3 . u= 0 . 2 5 , v=o. 75 9. u= 0.75, v=o. 75 4. u= 0.50, v=O. 25 5 . u= 0.50, v=O .50 6 . u= 0.50, v=o. 75

5 0

Figura 15. Una superficie definida en el espacio por 16 puntos de control. Se construir& una superficie aproximada a 6sta definida por puntos calculados con el algoritmo de de Casteljau.

Soluci6n: Como n=3, se tiene r= 1, 2, 3 y tambiCn i, j= O, . . . , 3-r. A

continuaci6n se muestran varias tablas con cálculos y resultados. Las primeras nueve calculan los "primeros puntos calculados de BCzier". En

la tabla 2 se calcula al punto b"'(u,v)= ( x , y , z ) nueve veces porque se

tinen nueve combinaciones de valores u, v. Tambidn para los otros ocho "primeros puntos" se tienen nueve distintos valores. Las siguientes

cuatro tablas (IO a 14) utilizan los valores de las primeras y calculan, en cada tabla, nueve distintos valores para un "segundo punto calculado de BCzier". En la tabla 15 se usan los cuatro "segundos

puntos calculados" para encontrar un punto de la superficie de BCzier,

pero como se usaron nueve combinaciones de u,v, se obtienen nueve

puntos de Bdzier. La tabla 16 reporta esos nueve puntos.

090

51

x

5 4

La aproximcibn (!el P r o d u c t o Tensorial.

Enseguida se forna.lizar-á 13 idea de que u n a superficie se forna.

coz0 la Superficie barrida por una curva que va transladjndose y a la

vez sufre deformación.

Supóngase que la curva móvi 1 es de grado m (esta supsición es

para que las fórmulas siguientes sirvan pero es una restricción seria

a la clase de superficies que se pueden representar con la

nproximación del producto tensorial). En todo momento, la curva está

determinada por SUS puntos de control, cada uno de 10s cuales se

desplaza sobre una curva. Supóngase ahora que todas estas curvas 0

carriles son del mismo .grado (ver figural6).

Figura 16 (tomada de la figura 16.6 del libro de Farin). Superficies calculadas por producto tensorial: una superficie es obtenida al mover los puntos de control de una curva (de grado dos) a lo laryo de otras curvas de S k i e r (cúbicas). A la derecha: la red de Bezier final.

La curva inicial es una curva de Bézier de grado m:

m

bm(u;= b.Bm(u). 1 1

i =O

Cada punto bi se desliza sobre una curva de grado n:

n b,= b. ( V I = 1 b B ” ( v ) .

1 1 i,j J j =O

Combinando estas dos ecuaciones se obtiene cada punto bm’n(

sobre la superficie bm’n: u, v)

r n n

55

Una curva isoparamétrica v=v(=constante) de grado m en u de una

superficie de Bézier calculada con valor de parámetro v=v(=constante)

cuando se aplica el algoritmo de De Casteljau a los n+l puntos

pertenecientes a una hilera de la red de control (dicha hilera la

forman los puntos b ; j=O, . . . , n. i=cte, J

Las curvas isoparamétricas u=cte se tratan análogamente.

En base a la anterior aproximación tensorial, Farin escribió la

siguiente rutina en lenguaje C. Grafica las curvas isoparamétricas de

un parche de Bézier. Se debe notar que dibuja en 2D, esto es, después de aplicar una proyección al plano XY. La generalización para dibujar en 3D debe ser obvia.

void plot-surf (bx, by, degree-u, degree-v, ugoints, vqoints) /* plots vqoints isoparametric: curves of the surfaces,

each with uqoints points on it.

Input : bx, by: arrays with x- and y- coordinates of control net degree-u,degree-v: degrees in u- and v- direction. uqoints: how many points per curve v_points: how many curves to draw

output : Plot of isolines. */

int degree-u, degree-v, uqoints, vqoints; float bx[20] [201, by[20I [ Z O ] ;

int i, j.uqoints1; float u, v. del-u, del-v; float aux~xt51,aux_yt51, arrax[51,array[51; float points-x[ 1001, points-y[ 1001 ; int iv; float hornbezo;

del-v= l.O/((float)vqoints); uqointsl=ugoints+l; v=O.O; /* first iso-curve is (bx[u,Ol,by[u,Ol) */

for(i=o;i<=degree-u; i++)/* create aux. arrays */ { for( j=O; j<= degree-v; . j++)

{ arrax[jl=bx[il[jl; array[jl=by[il[jl; }

5 6

aux-x[ i l=hornbez(degree-v, arrax, v) ; /*x-eval. at v*/ aux_y[ i l=hornbez(degree-v, arrax, v); /*y-eval. at v*/ 1 /* The Bezier points for the iso-curve are put in aux-x, auxd: */ bez-toqoints(degree-u, uqoints, aux-x, points-x); bez-toqoints(degree-u, uqoints, aux_y, points>);

move~abs~2(points~x~01 ,points~IOl); /* plotting */ polyline-abs-2(points-x,points~,u~ointsl);/* the point*/

/* arrays */ v = v+del-v; /* v-value for next iso-curve */

} }

El algoritmo de De Casteljau puede usarse de tres formas para

calcular una superficie de BCzier: de la forma directa, tal como se

hizo en el ejemplo anterior, o de las dos posibles aproximaciones de

producto tensorial, ya sea calculando los coeficientes de una línea

isoparamktrica u, y luego evaluando esa curva en v, o bien calculando

los coeficientes de una línea v y luego evaluando la curva en u.

Observaci6n: El estudio de las superficies de Bézier que hasta

este momento ha hecho el que escribe estas líneas le ha hecho pensar

en la siguiente observaci6n de gran trascendencia: una superficie de

Bezier puede construirse a partir de puntos tridimensionales que están

ordenados de modo que sea claro que estan en columnas paralelas y

renglones paralelos, es decir, que l o s puntos deben estar en una red

ordenada. Esto es raro ha1 lar lo para e 1 caso que se t iene porque los pozos con datos estan muy dispersos. Existe un método descrito por

Davis (ver páginas 6 a 17 del presente escrito) para construir, con

base en el conjunto de datos, una red de puntos por interpolación.

Esta interpolación crea puntos con alturas aproximadas y provoca una

falla de exactitud, la cual es la primer falla, porque la segunda

falla la crea el metodo de aproximaci6n de puntos según el método de Bézier. Se hubiera querido que existiera una sola falla de exactitud

pero es necesario crear en un paso intermedio la red regular de

punt os.

5 7

Propiedades.

Algunas de las propiedades de los parches de Bézier son como las

de las curvas de Bézier. Entre ellas estan la propiedad de invarianza

afín y la de cavidad convexa.

Los cuatro vCrtices de la red de control también forman parte de

la superficie de Bézier, no así los otros puntos de la red.

Elevacibn de grado.

Suphgase que queremos reescribir una superficie de Bézier de

grado (m,n) como una de grado (m+l,n), pués hay situaciones que lo

demandan. Pero el hecho de aumentar el grado en una curva isométrica

no debe alterar la forma de dicha curva.

Lo anterior se logra cambiando todo el conjunto de m-1 puntos

intermedios (no se modifican los puntos inicial y final 1 de la curva de grado m por m+l nuevos puntos, cada uno de los cuales es obtenido

con interpolacibn lineal entre dos puntos viejos sucesivos, con un

valor de parametro de i/(m+l).

58

APLICACION DEL aTODO DE BPZIER EN EL TRAZADO DE ISOLfNEAS.

Dos cuestiones detectadas en la teoría de curvas de Bézier que

para superficies provocarían: 1 ) que la superficie no pasara por los

puntos de control y 2) la dificultad de hallar a aquellos puntos que tengan los valores deseados en su coordenada 2.

Con la informacih acerca del mCtodo de Bézier para el trazado de curvas en el plano XY o incluso en el espacio XYZ se puede resumir lo siguiente:

a) Dado un conjunto de puntos de entrada que son los vértices del

polígono de control,

b) existe una única curva de BCzier que es una curva que se

aproxima a los puntos del polígono pero no los toca a todos,

únicamente al primero y al último.

c ) El método de Bézier permite hallar tantos puntos

pertenecientes a la curva de aproximación como valores de t

sean proporcionados por el calculista. Los valores de t se

toman entre O y 1 y pueden ser, o no, igualmente espaciados.

Por cada valor de t se obtendrán las coordenadas X, Y y Z de un

punto de la curva. Para t=O y t=l se obtienen respectivamente

el primero y el último puntos del polígono de control. Ver figura 17.

5 9

I

t= 0.0 t= o. 1 t= 0.2 t= 0.3 t= 0 . 4 t= 0.5 t= 0.6 + (X;,Y;) t= 0.7 t= 0 . 8 t= 0.9 t= 1.0

figura 1 7 . Basada en una parte de la figura 3 . 3 de Farin. Se dan valores igualmente espaciados a t para hallar once puntos de la curva de Bezier para un polígono con seis puntos de control. El valor t=0.6 sirve para obtener el punto de la curva (X' Y ' ) .

7' 7

Tratando de aprovechar el M. de Bézier para la tarea de

representar mapas de isolíneas (es decir, representar tres coordenadas

en un mapa de solamente dos coordenadas, siendo la tercera expresada

por las isolíneas) se observan dos problemas. Ambos se plantearan para

el caso de una curva en XY ya que es mAs sencillo buscar ahí una soluci6n y luego se usar& lo hallado para el caso de interés que es la

superficie.

Problema 1. La curva no pasa por l o s puntos de control

intermedios. Esto provocaría algo como lo ilustrado en la figura 1 %

Figura 18 . Se midieron las coordenadas X, Y y Z de 4 puntos sobre el terreno (linea continua) para obtener en la computadora una aproximaci6n del terreno (línea de trazos). Pero los puntos intermedios aparecen en la computadora con su altura Z menor o mayor que sus alturas reales.

60

Problema 2. Se quisiera hallar los puntos de la curva que tengan igual coordenada Y y ademas que los valores de Y fueran múltiplos de algún número conveniente (2, 5 ó 10) por ejemplo 2. Así se tendrían algunos puntos de la curva con coordenadas Y igual a 2 , otros puntos

con coordenada Y igual a 4, otros con coordenada Y igual a 6, etc. Pero desgraciadamente el calculista dá valores de t a ciegas, para encontrar puntos de coordenadas (X, Y 1 sobre la curva, sin que pueda controlar los valores que debe dar a t que le permitan obtener puntos de la curva cuyas coordenadas Y sean múltiplos de los números

convenientes.

Para resolver el primer problema se propone que se considere por

duplicado o triplicado o cuadruplicado a cada uno de los puntos

intermedios, a juicio del calculista y del asesor porque cuando se

asigna a dos puntos de control las mismas coordenadas, la curva pasa

más cerca de dichas coordenadas (ver libro de Hammer). El autor Berger menciona al respecto “si la curva de Bézier ha de pasar por los N+l puntos, es necesario especificar dos puntos de control intermedios

entre cada par de puntos”. Esta últ ima sugerencia fué considerada por

el que escribe estas líneas, después de una breve reflexión, como

inaplicable al proyecto porque resultaría sumamente compleja.

Una idea para resolver el segundo problema es que se añada al

método de cálculo de puntos de una curva de aproximaci6n de Bézier, un

método que consista en que a cada punto que se calcule con un cierto

valor t, se le mida la distancia entre su coordenada Y y el múltiplo (del número conveniente) más cercano a esa coordenada. En seguida el

método cambiará el valor de t original por uno más pequeño o más

grande, con el cuál la distancia mencionada disminuirá. El cálculo de la correccibn al valor de t y el cálculo de la distancia entre la

nueva coordenada Y y el múltiplo más cercano, se repetirh hasta que la distancia sea tan pequeña que se pueda considerar que la coordenada

Y es casi igual al múltiplo más cercano. Esto se hará para cada punto. Vkase la figura 1.7 . Según l o explicado, el método adicional

aplicado por ejemplo para obtener el séptimo punto, detectaría que Y’

no es igual a 10 ni a 12. Entonces daria (una y otra vez) nuevos valores a t hasta encontrar que Y’ es casi igual a 10 cuando el valor de t es aproximadamente 0.62.

7

7

61

Un comentario importante debe hacerse sobre el primer problema que es que aunque Hewn en la pagina 212 de su libro propone poner por duplicado o triplicado un punto intermedio para que la curva pase m&s

cerca de 61, se intent6 hacer en el programa "curva Bézier XY" sin obtener ningún cambio en la forma de la curva. Quizás se deba a que Hammer program6 el mCtodo de BCzier en forma diferente a como lo hizo

Farin (cuyo programa sirvi6 de base para el programa "curva Bézier

X Y " ) . El profesor asesor sugiri6 una alternativa: poner por cada punto intermedio, dos o tres puntos adicionales con coordenadas muy cercanas

pero no iguales. Ya no hubo tiempo de estudiar esta alternativa,

La parte central del programa presentado en este trabajo es la rutina programada por Farin para el trazado de superficies de Bézier

modificada para que reporte un conjunto de puntos cuyas alturas sean

las deseadas por el usuario. La rutina original de Farin daba valores

entre cero y uno, a intervalos regulares, a los parámetros u y v para

obtener cada punto de la superficie, pero los puntos que se obtenían

tenían alturas cuyos valores no podían ser previstos. La modifícacidn

que se añadi6 al programa consiste en que a cada punto producido por la rutina original, se le revisa el valor de su altura y si no es el

deseado (los valores deseados son múltiplos de un número, por ejemplo:

2, 4, 6, 8 , 10 6 10, 20, 30, 40 6 5 , 10, 15, 20, etc. 1 , se modifica el valor de su parámetro u una y otra vez hasta obtener un número casi igual a la altura deseada. Casi, porque se tiene una tolerancia por

ejemplo de O. 0001. El resultado es que se obtiene en la pantalla un

mapa en el que aparecen varios puntos que si se ponen de diferente

color de acuerdo al valor de su altura, podrían unirse a mano con un

trazador y se tendrian isolíneas con intervalos regulares de altura. La rutina modificada de Farin no pudo aplicarse directamente

sobre los irregularmente dispersos puntos datos dados por el usuario

porque necesariamente la rutina debía tener como datos a una red de puntos igualmente espaciados en sus longitudes y latitudes. Por Csto

es que con los puntos originales se tuvo que interpolar para crear una

red regular empleando la rutina de Davis descrita en el resumen de

mCtodos de este trabajo. Es en esta red regular de puntos o datos de

ingreso para la rutina de Farin donde se podría haber aplicado la teoría de que por cada punto intermedio en la red se dieran dos o tres

62

puntos con valores de coordenadas muy cercanos a los de 1 punto para tratar de que los puntos de la superficie pasaran mas cercanos a los puntos de la red. Esto ya no se hizo. Sólo los cuatro puntos de las esquinas de la red regular son tambiCn puntos de la superficie de

Bkzier.

A l final de la secci6n del algoritmo de de Casteljau para curvas

de Bézier se mencionaba una posible aplicaci6n para unir los puntos

con igual valor de altura en una superficie. No se us6 porque bastaría

con ir uniendo cada dos puntos sucesivos con tramos de línea recta.

Pero si &to se hiciera, se tendrían curvas con aspecto de polígonos;

sin embargo, Csto se habría resuelto incrementando el número de puntos

de igual valor de altura porque así los polígonos tendrían tramos m&s

cortos y por ello un aspecto mas cercano al de una curva. Si se

hubiera hecho como se sugería en aquella sección, habría sido compleja

su programaci6n y ademas se habría introducido una falta de exactitud

porque el usuario creería que los puntos de la curva tendrían todos

igual altura y ello sería falso porque la curva no pasó sobre los

puntos correctos. De todas maneras, tampoco se programó la unión de

puntos por medio de tramos de recta sino que se dejó al usuario

hacerla a mano. Lo que sí esta en el programa es la sección que

permite poner un número cualquiera de puntos por cada valor de altura

lo cual facilitara al usuario visualizar la forma de las curvas.

6 3

MANUAL DE USUARIO DE LOS PROGRAMAS

l. PROGRAMA EN TURBO PASCAL DE REPRESENTACIONES GRAFICAS EN GEOLOGI A ESTRUCTURAL DE LOS MANTOS ACUIFEROS.

El programa puede ser uti 1 izado en una computadora personal que pueda manejar el paquete denominado Turbo Pascal 5.0.

Este programa fué probado en una computadora con CPU 8088, en otra con CPU 286 y en una con CPU 386. En cuanto a los requerimientos

del monitor, teóricamente puede funcionar en cualquiera, aunque en los

monitores que no tengan un formato de imagen con valor 414 se

presentara el problema de que las dimensiones verticales y

horizontales de las gráficas exhibidas por el monitor no sean las

reales. Este programa, entonces, fué realizado para monitores con

formato de imagen igual a 1 y también con formato igual a 2.813.9, pero si se usa un monitor con otro formato, el valor de este formato

se puede meter en el programa (ver "limitaciones.. . y como hacer las modificaciones mas comunes" l .

Se necesita una impresora que pueda escribir un programa de turbo

pascal 5.0 y una grhfica también de turbo pascal 5.0. Es posible que se necesite específicamente una impresora de matriz de puntos o una

laser.

El tiempo que le toma al programa correr, es decir manejar los

datos y exhibir los resultados (después de haber sido compilado) es de

muy pocos segundos; pero aumenta en relación directa con el mayor

número de datos que contenga el archivo de datos. Así que a mayor

cantidad de valores en el archivo, poco m& tardará el programa en

procesarlos. En cualquier momento puede pararse la corrida o

procesamiento de datos e incluso apagar la computadora; y para

conservar los resultados que ya se habían calculado, pueden

imprimirse.

El programa muestra en la pantalla una grhfica de la localización de los puntos cuyas coordenadas lee de un archivo que puede ser

sustituido por el usuario con otro archivo que tenga diferentes

coordenadas, y que las tenga en mayor o en menor cantidad.

Observaciones: 1)el archivo y el programa deben estar en el mismo

diskette. 2)el diskette no debe estar protegido contra escritura.

6 4

Como usar el programa. - El programa isolineas.pas se puede usar tal como está o bien se

le pueden hacer algunas modificaciones para usarlo en casos especiales

(ver la sección de "Limitaciones del programa y cómo hacer las

modificaciones m&s comunes"). A continuación se ver&n ambos casos.

a) Si no se haran modificaciones en el programa. Hay dos formas de usarlo, una es meterse al paquete de Turbo

Pascal para situar el programa en el editor y compilarlo para

enseguida correrlo o bien correrlo directamente; la otra es no meterse al paquete sino correr el programa ejecutable. La última opción es más

rapida. Ahora se explicarán ambas.

a.1) Correr el programa desde Turbo Pascal.- Deber& tenerse en cuenta una consideración sobre la

compilación y para ello se necesita leer adelante en la opción

b3 la nota importante.

Se encienden el monitor y luego la computadora (y, si se va

a usar, se enciende la impresora).

Se introduce en la unidad A el diskette con el sistema

operativo si es que la computadora lo pide, pero si la máquina ya ha buscado y usado s u propio sistema operativo, este paso se

omite. Si aparece una letra diferente que la señal A>, deberá

escribirse A: y pulsar la tecla ENTER. Así se obtendrá dicha

señal.

Quitar el diskette de sistema operativo, si es que se

metió, y en su lugar introducir el diskette de turbo pascal 5.0.

Después de ello, se tecleará la palabra TURBO y el botón ENTER.

Esperar unos momentos hasta que la pantalla muestre en el borde

superior varias palabras, que son las OPCIONES de turbo pascal

5.0, y en el centro muestre un cuadro que dice algunos datos

sobre turbo pascal 5.0.

Oprimir la tecla ENTER para hacer desaparecer el cuadro

central.

Oprimir la tecla F10 y con ello aparecerá un cuadro en

6 5

alguna de las palabras (opciones) del borde superior de la

pantal la.

Localizar el cuadrado pequeño sobre la opción FILE

empleando para ello las teclas de flecha a la izquierda t , o de flecha a la derecha +.

Se oprime el botón ENTER y aparecerá un rectángulo con una

lista vertical de palabras, es el menú de opciones

correspondientes a la opción FILE. Elegir la opción LOAD TO, o

sea localizarla con el pequeño recthgulo utilizando las teclas

de flecha hacia arriba ?, y de flecha hacia abajo &, y en

seguida oprimir la tecla ENTER. También se puede, sin usar las

flechas ni ENTER, directamente pulsar la tecla F2.

Aparecerá otro rectángulo grande y en él un renglón que

dice *.PAS. Ahora debe cambiarse el diskette de turbo pascal 5.0

por el diskette que contenga al programa coorden.pas y al

archivo coorden. dat. De hecho, este cambio puede realizarse

desde el momento en que la pantalla contenía un cuadro central

con datos sobre el paquete turbo pascal 5.0.

En este momento puede el usuario teclear lo siguiente:

isolineas.Pas (que es el nombre del programa) y oprimir la tecla

ENTER. Otra forma de hacer este paso es que al aparecer *.Pas se

teclee el both ENTER, l o cuál hará que 'la pantalla muestre un

rectángulo con la lista de todos los programas terminados en

.Pas. De ellos se elije, valiéndose de las flechas antes

mencionadas, el programa coorden.Pas. Después de quedar

enmarcado con el pequeño rectángulo, se oprime la tecla ENTER.

Lo anterior hace que se muestre en la pantalla el listado

del programa que ahora interesa . Bien, para que corra éste, puede hacerse con alguna de dos maneras: la primera consiste en

oprimir la tecla F10 que causará que se muestre el pequeño

rectangulo selector en las opciones del borde superior. Usando

las teclas de las flechas horizontales (izquierda y derecha) se

( 1 )

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

(l)Si se desea hacer alguna modificaci6n en el programa, entonces se debe hacer el cambio adecuado sobre el listado del programa, el cuál aparece en la pantalla.

6 6

ubica el rectángulo en la opción RUN. Se oprime la tecla ENTER y

aparecer& un recthngulo con una lista de nuevas opciones. Se

escoje, con las teclas de flechas, la primera opción y se oprime el botón ENTER. La segunda manera es simplemente oprimir la

tecla CONTROL y, sin soltarla, se oprime tambiCn la tecla FS. Ver adelante la sección "corriendo el programa".

a.2) Usar el programa ejecutable. En lugar de teclear la palabra Turbo y luego oprimir la

tecla ENTER, como se explicó en el comienzo del inciso anterior, se tecleara la palabra Isolinea y luego se oprimirá la tecla

ENTER. Ver adelante la sección "corriendo el programa".

b) Si se van a hacer cambios en el programa.

Antes de usar la computadora ya se deben tener listos en un papel

los cambios que se desean hacer y en cuáles procedimientos se harán.

b.l) Poner en el editor el archivo que se desea cambiar.

Se deben seguir idénticamente las primeras instrucciones

descritas en la sección "correr el programa desde Turbo Pascal"

hasta el momento en el que aparece en la pantalla un rectángulo

con las opciones LOAD, SAVE, SAVE AS, etc. Se debe oprimir alguna de las teclas de flechas verticales una y otra vez hasta

que quede iluminada la opción LOAD. En seguida se pulsará la

tecla ENTER. Esto hará que se muestre otro rectángulo en el que se lee a: /* .pas (pero el letrero puede ser otro si ya se ha

estado usando esta opción y se le ha modificado). Esto significa

que se mostrarán en pantalla los nombres de todos los archivos

contenidos en el diskette del drive A que tengan la extensión

. pas.

Oprima la tecla ENTER y enseguida se verá una lista de

archivos. Se buscará el que se desee cambiar (o uno de ellos si

se modificarán mBs de uno) y se teclearán los botones de flechas

adecuados hasta iluminar ese archivo. Lo que sigue es oprimir la

tecla ENTER. Después de un breve tiempo aparecerá en la pantalla

el listado de ese archivo.

6 7

b.2) Hacer los cambios y salvarlos.

Ahora se deben buscar uno a uno los procedimientos que

seran modificados usando para ello las teclas PGUP o PGDOWN o

alguna de las teclas de flechas verticales y se haran los

cambios. Enseguida se oprimirá la tecla F2 para salvar esos

cambios aunque también puede hacerse como sigue: oprimir la

tecla F10 y buscar con las teclas de flechas horizontales la

opci6n FILE, luego oprimir la tecla ENTER, luego se buscara que quede iluminada la opción SAVE con las teclas de flechas

verticales y finalmente se oprimir& el both ENTER. b.3) Compilar las UNITS y luego compilar el archivo con el programa

principal.

NOTA IMPORTANTE: Cuando se usan UNITS que contienen parte del programa se deben compilar a desco y no a memoria de la máquina. En el menú principal localice donde diga OPTIONS y teclee el

botón ENTER, luego busque con las flechas verticales donde diga COMPILE. A l oprimir una y otra vez la tecla ENTER cambiara un letrero alternativamente de DISK a MEMORY. Deje el letrero DISK. Prima la tecla ESC las veces necesarias hasta que desaparezcan los rectangulos de opciones.

Para compilar el archivo que fué cambiado se puede o bien

oprimir la tecla ALT y sin soltarla oprimir en seguida la tecla

F9 o bien ir al menú de opciones oprimiendo la tecla F10, buscar

la opción COMPILE mediante teclear los botones de flechas

horizontales hasta que la opción quede iluminada, oprimir la

tecla ENTER, buscar ahora con las teclas de flechas verticales a la opción COMPILE y enseguida oprimir la tecla ENTER.

Cada archivo que haya sido cambiado debera ser compilado

para que el programa tome en cuenta esos cambios pu6s si no se

compila, el programa usara el archivo que se tenía antes de los

cambios. Si el archivo con el programa principal fue el único

modificado, 6ste se compilará únicamente; pero si se modificó

alguna de las UNITS con o sin haber modificado al programa

6 8

principal, entonces PRIMERO se compilara la UNIT y al final se

compilara, necesariamente, al programa principal. Esto es al

parecer para que el programa principal tome en cuenta a la UNIT modificada y para revisar que no existan problemas de

compilaci6n que deben ser corregidos por el usuario.

b.4) Correr el programa.

Enseguida se pondrá en la pantalla al archivo con el

programa principal. Esto ya se sabe hacer: buscar la opci6n FILE del menú de opciones, luego elegir la opci6n LOAD del menú de

FILE, enseguida se elige el archivo isolinea.pas y se oprime la t ec la ENTER.

Ahora existen dos formas de echar a correr el programa, una

es oprimir la tecla CONTROL y sin soltarla oprimir tambiCn la tecla F9, la otra forma es elegir la opción RUN del menú de opciones, oprimir la tecla ENTER, luego buscar con las teclas de flechas verticales la primera opci6n, la de correr, y oprimir la

tecla ENTER. Ver enseguida la seccidn "corriendo el programa".

Corriendo programa.

DespuCs de indicar que se correrá el programa, tardará unos

segundos la computadora en los que compilará el programa y se

preparará para correrlo.

Comenzará a correr (a funcionar) el programa:

1) Primero se muestran unos letreros que indican que el programa

fuC un proyecto terminal, la fecha, etc. Dice tambiCn que se oprima la

tecla ENTER. Así se debe hacer y luego se borrará la pantalla anterior y aparecer& otra con la explicacibn breve del programa. Dice en el

último rengl6n que debe oprimirse la tecla ENTER. Asi se debe hacer y despues se borrará la pantalla y aparecerá un menú con opciones para

poder meter los datos. El usuario debe elegir entre: alteclear un

nuevo conjunto de datos, blleer los datos de algún archivo ya antes creado, c)anexar nuevos datos al final de los existentes en un

archivo, dlmodificar algún valor errheo dentro de un archivo, o

elcontinuar el programa. DespuCs de elegir visualmente una de las

cuatro primeras opciones, debe el usuario usar las teclas de flechas

6 9

para que la opci6n elegida se ilumine en la pantalla y entonces se

pulsará la tecla ENTER.

En seguida cualquiera que haya sido la opción elegida, de la a) a

la d), el usuario leerá en la pantalla una lista con archivos, si es

que existen, que estan grabados en el diskette. Y el programa pide al usuario que teclee el nombre de un archivo sin teclear la extensi6n.

Para el caso de las opciones a) y c) el usuario seguirá el ejemplo que se le muestra para teclear los datos que son longitud, latitud (ambos

en grados, minutos y segundos), altura topográfica, altura del nivel

frehtico y altura de techo del primer estrato rocoso. Todas las

alturas en metros sobre el nivel del mar y con s610 dos decimales. Los

grados y minutos no pueden tener decimales porque son números enteros,

pero l o s segundos pueden tener hasta dos decimales. Después de teclear

el último dato, el usuario tecleará en la columna de los grados de la

longitud el valor de 9999 que es una señal al programa para "fin".

Si la opción elegida fué la d), entonces se le darán al usuario

las instrucciones para que indique las partes del archivo de datos que quiera modificar, y entonces lo deberá hacer.

Si se eligi6 la opci6n b), se muestran en la pantalla las

coordenadas (longitud y latitud) de los puntos. Están en su

representacibn de grados, minutos y segundos y se encuentran

numerados. Aparece en la parte inferior, cargado a la derecha, un

letrero que indica que debe oprimirse la tecla ENTER. Si aún no habían sido mostrados todos los valores, entonces la pantalla se borra y muestra la continuación de las coordenadas, así como el mismo letrero anterior. Y en forma sucesiva se seguirhn presentando más datos con el

mismo letrero inferior y deber& pulsarse la tecla ENTER, hasta que se

hayan terminado de mostrar las coordenadas de todos los puntos.

OBSERVACI6N: en esta etapa, el programa está leyendo los valores que

encuentra en el archivo de datos cuyo nombre el usuario escribió y los

muestra en la pantalla arreglados en una tabla y si l o s datos son

muchos, por no caber en el espacio de la pantalla, se usa varias veces esta pantalla para mostrar a todos.

Los datos pueden ser copiados en una hoja por la impresora si

ANTES de oprimir la tecla ENTER se toca la tecla SHIFT o FLECHA GRUESA

HACIA ARRIBA y , sin dejar de presionarla, tambiCn se oprime la tecla

7 0

PRINT SCREEN. Estas dos teclas oprimidas tienen por función copiar

sólo lo mostrado en la pantalla y no todos los valores. Así que se

deben oprimir igual número de veces que el número de nuevas pantallas

con datos aparezcan.

2)Al final de que sucedan las instrucciones correspondientes a

cualquiera de las opciones elegidas se regresara al usuario al menú de opciones. Esto se hace para el caso de que se quiera otro archivo

diferente al elegido o bien se desee hacer una corrección o añadidura.

Después, el usuario escoje la última opción y con ello el programa

continuara y el archivo que usará sera el último cuyo nombre el

usuario haya escrito.

3 ) Siguiente etapa: se exhiben arriba en la pantalla cuatro

valores en una tabla. Son la longitud mhxima, la longitud mínima, la

latitud maxima y la latitud mínima que el programa ha calculado a

partir de los datos ya antes mencionados. No estan representados como

valores en grados, minutos y segundos sino como grados decimales. En

la parte inferior aparece el letrero de oprimir la tecla ENTER, y, por

supuesto que si se quiere copiar la tabla en la impresora, deben

oprimirse , antes que la tecla ENTER, las teclas SHIFT y PRINT SCREEN

como se describió arriba.

4 ) Se indica que debe escogerse alguno de las siete posibilidades

que se enlistan. Se refiere a teclear un núme'ro del uno al siete y

luego teclear el botón ENTER. Son las posibles separaciones que el

programa puede dejar entre el conjunto de puntos que se graficarhn y

el marco o recthgulo de la grafica. OBSERVACION: la separación es

construida por el programa para cada uno de los cuatro valores máximos

o mínimos buscando su más próxima unidad o múltiplo de cinco unidades

o múltiplo de diez unidades de segundo o su más próxima unidad o

múltiplo de cinco unidades O múltiplo de diez unidades de minuto o su

mas próximo grado. Si se quiere imprimir las siete posibilidades y la posibilidad elegida, entonces después de oprimir el número elegido y

antes de oprimir ENTER, pulse la tecla SHIFT y sin soltarla pulse la

tecla PRINT SCREEN.

5 ) En seguida se muestran, abajo, los resultados de la búsqueda

hecha por la computadora. Expresados como grados, minutos y segundos y también como grados decimales, se enlistan los cuatro valores maximos

71

y mínimos y sus correspondientes cuatro valores calculados con la

separaci6n. Estos últimos cuatro son los números que más adelante la

computadora considerará como los cuatro lados u orillas de la gráfica.

En la pantalla, abajo, aparece el mensaje de oprimir la tecla

ENTER. Pero antes de ello, si se desean imprimir los máximos y mínimos

con sus orillas calculadas, deberá oprimirse sin soltar la tecla SHIFT

y, en seguida, oprimir con otro dedo la tecla PRINT SCREEN.

6 ) Se borran los datos anteriores, y aparece un recthgulo (un

marco) que abarca poco menos que la totalidad de la pantalla, está

centrado. En dos de las esquinas del recthngulo se encuentran

distribuidos los valores (en grados, minutos y segundos) de la

longitud máxima, de la longitud mínima, de la latitud máxima y de la latitud mínima que permiten ubicar a la regi6n de estudio. En este

momento comienza la etapa del cuadriculado de la región cuya frontera

es el rectángulo. Aparece al pie de la pantalla un mensaje para el

usuario que le pide teclear la tecla C o bien la tecla ENTER, indica

que teclee C si desea el mapa cuadriculado con líneas separadas por un

segundo, o que teclee ENTER si no desea ningún cuadriculado. Si el

usuario oprimió la tecla C entonces aparecerá el mapa cuadriculado

cada segundo y al pie de la pantalla habrá un mensaje similar al

primero pero esta vez ofreciendo hacer el cuadriculado a cada cinco

segundos. Si nuevamente la eleccih tecleada fué C , la pantalla

mostrará un mapa con cuadrícula a cada cinco segundos y un mensaje

como los otros ofreciendo un cuadriculado a intervalos de diez

segundos. Si se sigue tecleando una y otra vez la opción C y no la

opción ENTER, las cuadrículas mostradas serán a cada minuto, a cada

cinco minutos, a cada diez minutos, a cada grado y se comienza de nuevo desde el mapa no cuadriculado pasando por el mapa de 1 íneas a

cada segundo, etc. y así seguirá mostrando los diferentes mapas hasta que en el mapa con cuadrícula elegida, se teclee el botón ENTER. No se

permite teclear botones distintos al C o al ENTER, y en caso de que se

haga así, el usuario se dará cuenta de que s ó l o hay dos opciones.

7 ) Al haber tecleado ENTER el programa muestra el mapa con sus

coordenadas en dos esquinas, con la cuadrícula elegida y, además,

aparecen los puntos cuyas coordenadas están en el archivo de datos

elegido, marcados como pequeños círculos y todos dentro del marco, es

7 2

decir que ninguno esta sobre 61.

si se desea imprimir, deberá oprimirse las teclas SHIFT y PRINT

SCREEN como se ha dicho ya.

En la parte inferior de la pantalla se encuentra el mensaje que

indica oprimir la tecla ENTER.

8 ) En este momento comienza la sección correspondiente al

procedimiento GRID. Se muestran al usuario algunas nociones dobre GRID. Al pie de la

pantalla el usuario lee que debe oprimir la tecla ENTER y lo hará.

El usuario lee que debe escribir el número de renglones y el de columnas que desea para la red regular de GRID. Debe fijarse en

oprimir sólo alguna de las opciones permitidas pués si pulsa una tecla

errónea el programa enviará a la pantalla un letrero de ERROR y de

nuevo se le mostrarán las opciones.

Pasa un breve instante usado por la computadora para hacer

c&lculos y luego se muestra un mapa bidimensional que consta de un

rectangulo que tiene puntos regularmente espaciados en su interior,

los cuales son los puntos interpolados. Arriba de cada punto se puede

leer su altura en metros sobre el nivel del mar. El usuario lee que

debe oprimir la tecla S y así lo debe hacer (no importa si es S

mayúscula o S minúscula). Lo que a continuación se muestra es una tabla con resultados.

Tiene arriba la cabeza de la tabla y los resultados consisten en la

longitud, la latitud y la altura de los puntos de la red antes

mostrada. Si los renglones resultaran insuficientes para mostrar a

todos los resultados, el usuario, siguiendo la instrucción del pie de

la pantalla, tecleará el botón ENTER. Hecho l o cuál, se borrará la

pantalla, se pondrá al encabezado de la tabla y abajo se podrán leer

los resultados que seguían a continuación de los de la pantal la

anterior. Todo este cambio de pantalla para continuar exhibiendo los

resultados seguirá hasta terminar con el último de ellos.

Al pie de la pantalla aparece el letrero de oprimir la tecla ENTER. El usuario la debe oprimir.

9) Después de lo anterior, comienza la sección de cálculo de la

superficie de Bézier con el procedimiento Plot-surf. En seguida se

describe la interacción entre el programa y el usuario mientras se

7 3

realiza esta fase del programa.

a. En la pantalla se explica que la red de GRID se usará para el

cBlculo de la superficie de Bézier y que se mostraran dos mapas de ella, uno tridimensional a base de una malla de alambre y

otro bidimensional a base de puntos de isolíneas. Se menciona

que se imprima el segundo mapa para poder unir a lápiz los

puntos y así crear las isolíneas. Al pie de la pantalla se indica que hay que oprimir la tecla ENTER. El usuario lo deberá

hacer.

b. Se borra la pantalla anterior. Se pide con un mensaje que el

usuario escriba con las teclas tres valores para el cálculo de

la superficie de Bézier. El primer valor es el espaciamiento

que se quiere que exista entre los valores de altura. Se dan

las opciones de las que el usuario debe elegir una: 50m, loom, etc. El usuario teclea la elegida por él. El siguiente valor

que se pide es el número de curvas que tendra la representación

tridimensional y se muestran también en este caso las posibles

opciones 2, 3, . . . , sB ( s B es un límite del programa). E l

usuario elige una y teclea su valor. El tercer valor que se le pide al usuario que teclee después de elegir entre las opciones

2, 3, . . . , sB es el número de puntos por cada curva para la

representación tridimensional. Hay que mencionar que si es

tecleado algún valor diferente a cualquiera de las opciones

dadas en cada caso, se envía un mensaje diciendo "ERROR. Se

debe elegir entre: opci6n 1, opción 2, etc." y se espera que el

usuario haga ahora una correcta elección. Esta revisión de la opción tecleada se repite cada vez que el usuario teclee un

valor, hasta que lo haga correctamente. Al pie de la pantalla se lee "Oprima la tecla ENTER". El usuario lo debe hacer.

c. Pasa un pequeño lapso de tiempo durante el cuál el programa

calcula los puntos de cada curva de la superficie para su

representación tridimensional, así como las interpolaciones para buscar si existe, o no, cerca de cada punto sin ajustar,

otro punto con valor de altura múltiplo del espaciamiento

elegido por el usuario. Finalmente se presenta una tabla con

resultados. Si los renglones son insuficientes para mostrar

7 4

todos los resultados, el usuario oprime la tecla ENTER tal como

es indicado al pie de la pantalla y se borra todo para poner de

nuevo la cabeza de la tabla y la continuación de l o s valores.

Se repetir& el cambio de pantalla mientras existan resultados

por mostrar. La tabla muestra las siguientes columnas:

*El número consecutivo 1, 2, 3, . . . oPara los puntos sin ajuste en la altura: los valores de sus

parametros y y g, sus latitudes, sus longitudes y sus

al turas.

oPara los puntos con la altura ajustada: los valores de sus

parametros y u, sus latitudes, sus longitudes y sus

al turas.

NOTAS: ( 1 ) E s muy posible que en la tabla existan menos puntos

ajustados que puntos sin ajustar porque en ciertas posiciones

no se encontrara algún punto, con valor de altura múltiplo del

espaciamiento deseado, cercano a un punto sin ajustar. ( 2 ) No

debe pensarse que el punto ajustado de algún renglón

corresponde al punto sin ajustar del mismo renglón.

Al pie de la última parte de la tabla aparece el mensaje de oprimir la tecla ENTER. El usuario lo debe hacer.

d. Se muestra una figura con aspecto tridimensional, corresponde

a la superficie de Bézier y los puntos son los puntos sin

ajustar.

Se indica al usuario que oprima la tecla S (no importa si es

mayúscula o minúscula) y así lo debe hacer.

e. Aparece en pantalla un mapa bidimensional con puntos que

tienen indicada su altura en m. s. n. m. Se indica al usuario que

oprima la tecla S (minúscula o mayúscula) y así lo debe hacer.

10) En la parte inferior de la pantalla aparecen los letreros

Programa concluido y Oprima la tecla ENTER. Al hacer esto último, la computadora habra terminado de correr el programa y mandará a la

pantalla el listado del programa.

La sesión de trabajo puede terminar pulsando la tecla F10, lo

cuál mostrara el pequeño recthngulo indicador sobre las opciones del

7 5

borde superior de la pantalla. Se escoge, con las teclas de flechas

horizontales la opcibn FILE y se oprime la tecla ENTER.

Aparecer& la lista de opciones verticales en un rectangulo y,

usando las teclas de flechas verticales, se colocará el indicador

sobre la palabra QUIT y se oprime ENTER. Entonces la computadora habrá

salido del paquete turbo pascal 5.0 y mostrara en pantalla el letrero

A>. Se saca entonces el diskette y se apaga la computadora y luego el monitor.

2. PROGRAMA EN TURBO PASCAL DE GRAFICAS DE CURVAS DE BEZIER. Hay otro programa que se puede correr. Se puede correr el

programa ejecutable o bien se carga primero el paquete Turbo Pascal y

después se elije el programa en forma similar a como se eligió el

anterior. En este programa se muestran tres cosas. Primero se presenta una tabla que contiene tres diferentes conjuntos de puntos, que son

los puntos de control, los puntos de BCzier y los puntos ajustados de

BCzier. Para cada punto estan reportadas sus coordenadas ( X , Y ) y el

valor de t con el que se obtuvieron ellas. NOTA: cuando los puntos son

muchos el programa los mostrara en dos o más pantallas, y cada nueva pantalla se exhibe despuCs de que el usuario sigue la instrucción de

teclear el bot6n ENTER. Lo segundo que se muestra es una grhfica en el

plano XY que muestra un polígono y una curva. Los vértices del

poligono son los puntos de control, mientras que la curva contiene dos

tipos de puntos que son los puntos de BCzier y los puntos ajustados de BCzier. Al pie de la gráfica hay una leyenda con los símbolos para los

distintos puntos. Y, finalmente, lo tercero que se muestra es el

conjunto de todos los puntos de BCzier en una tabla. Están tanto los

puntos no ajustados como los ajustados y se presentan ordenados de acuerdo al orden ascendente del valor de su parámetro t desde cero

hasta uno.

7 6

Como hacer las modificaciones más comunes. - b

1) Un nuevo conjunto de datos. Antes que nada se deben tener listos para meter a la computadora

la longitud y la latitud (en ese orden) de cada uno de los puntos y

que est& expresadas en la forma de grados, minutos y segundos. Los

grados y los minutos deben ser números enteros mientras que los

segundos serán números reales con hasta dos decimales. Ejemplo 30g 22m

12.21s. La longitud debe indicar si es E u O y la latitud debe mostrar

si es N o S. S610 debe indicarse la inicial E, O, N o S y no toda la palabra: Este, . . . , Sur. Se podrán manejar entre uno y m=150 puntos (ver inciso 2). Otros tres datos que deben tenerse listos para cada

punto son las alturas en metros sobre el nivel del mar con hasta dos

decimales (por ejemplo 2352.23): 1)topográfica o simplemente altura en

m.s.n.m., 2)del nivel freático en ese 'punto y 3)del techo del primer

estrato rocoso (el más superficial) aunque no hay problema si en lugar

del primero es el segundo u otro. En ese orden deben estar y no se

escribirá nada más que el número (sin la m de metros ni cualquier otro

símbolo).

Es muy sencillo poner un nuevo conjunto de datos en el programa.

Al comenzar a correr el programa hay un menú que muestra al usuario las posibilidades existentes para el manejo de datos. Allí el usuario puede elegir entre un archivo que alguna vez ya qued6 almacenado en el

diskette y teclear un nuevo conjunto de datos que serán almacenados en

el diskette dentro de un archivo cuyo nombre debe ser inventado pero

que debería ser un nombre que sugiriera el tipo de informaci6n que

cont íene.

Respecto de teclear u nuevo archivo, deben cuidarse dos cosas:

que el número de datos no sea superior a m=150 (ver adelante el inciso 2) y que antes de comenzar a trabajar, el usuario se asegure de que en

el diskette de trabajo (que es el mismo que contiene al programa

isolineas) exista suficiente espacio para almacenar 10s nuevos datos. De no haber este espacio, deberá el usuario pasar uno 0 más archivos

de datos del diskette de trabajo a otro para que dejen espacio libre.

Existe una forma primitiva e innecesaria de ingresar los datos en

un archivo, pero aún así se mencionará en seguida.

Antes de encender la máquina, deben tenerse listos, tal como se

7 7

indic6, los datos de los puntos.

DespuCs de haber cargado Turbo Pascal, se oprime la tecla FlO, y

con las teclas de las flechas horizontales se hace que el selector quede en la opci6n FILE. En seguida se oprime la tecla ENTER. Se elige

de la 1 ista vertical de opciones la que dice N E W . Para ello se usan

las teclas de flechas verticales. Se oprime la tecla ENTER.

El llenado de los datos en el archivo se hace así:

No se numera ni se pone signo alguno que indique grados, minutos,

segundos, latitud, longitud ni altura. Se teclea a partir del primer rengl6n y la primera columna el

número de grados de la longitud, se deja un espacio, el número de

minutos de la longitud, se deja un espacio, el número de segundos de la longitud, se deja un espacio, el símbolo cardinal de la longitud,

se deja un espacio, el número de grados de la latitud, se deja un

espacio, el número de minutos de la latitud, se deja un espacio, el número de segundos de la latitud, se deja un espacio, el simbolo

cardinal de la latitud, se deja un espacio, el valor para la altitud,

se deja un espacio, el valor para la altura del nivel freático, se

deja un espacio, el valor para la altura del techo del primer estrato,

sin dejar espacio y, s6lamente si hay un punto siguiente por anotar, se oprime la tecla ENTER.

Si hay un siguiente punto, se maneja de manera igual y así se

llega al último punto, que se maneja igual. Pero, despues de anotar la

altura del techo del primer estrato rocoso, ya no se deja ni espacio

ni se teclea el both ENTER sino que se procede a salvar (a guardar)

e 1 archivo . El archivo se guarda de dos maneras: 1)pulsando la tecla F2; o

2)pulsando la tecla F10 , despuCs de l o cual se localiza la opci6n FILE

con las teclas de flechas horizontales, en seguida se oprime el bot6n

ENTER y luego se localiza en el recthngulo de opciones que se muestra,

la opci6n SAVE usando las teclas de flechas verticales y se oprime la

tecla ENTER . En seguida aparece un recthngulo con el mensaje de renombrar y

tambien dice A:Wonam.Pas. Se debe borrar ese nombre y en su lugar

poner A: y cualquier nombre seguido de .dat (ejemplo: A:ajuscoZ.dat) y

teclear ENTER.

Cuando se corra el programa, se deberá elegir el nombre del

7 8

archivo reci6n construido.

2 ) e s de 150 datos.

En el programa se puso la constante general m=150 para indicar el

mínimo número de datos que puede el programa manejar. Pero fué

arbitrario. Si se desean meter mas que ese número de datos, sin que exceda la capacidad de la computadora que es quizhs de 32767, bastara

con localizar la primera pagina del listado del programa usando la tecla de flecha hacia arriba o bien la tecla PGW. Habiéndola

obtenido, se buscara donde diga CONST y se leera m=150; mueva el

cursor con las teclas de flechas hasta localizar ese número 150 y

bbrrelo con la tecla DEL o con la tecla BACKSPACE ( o flecha gruesa

hacia atras). Después de borrado, teclee el número maxim0 de datos que

empleara o , si gusta, cualquier: número mayor que ese maximo, sin

sobrepasar el limite de la computadora.

3) Modificar el tamaño de letra empleado para indicar el valor en

grados, minutos y segundos, en el mapa. Esta modificaci6n resulta un poco más latosa en cuanto a que

deben hacerse cambios en los procedimientos INICIAL, VALOR DE ESQUINAS y FECTANGULO. Esencialmente, la raz6n es porque en el programa se

quiz0 que el mapa tuviera el mhximo tamaño posible, reservando casi el

número exacto de pixeles para escribir en letra estándar las

coordenadas del mapa. Entonces deberhn probarse o medirse el número de

pixeles que requieran las coordenadas con la nueva letra. Lo primero

debe ser buscar en el listado el procedimiento INICIAL, allí buscar la

orden SETTEXTSTYLE. Dentro del parkntesis hay tres parhmetros. El

segundo indica que el texto se escriba horizontalmente, el último

indica el tamaño de la letra y el primero es el tipo de la letra desde

DEFAULT hasta GOTICA. Escoja el tipo y el tamaño de caracter deseado.

Calcule ahora cuantos pixeles mide el letrero de los grados, minutos y

segundos (haga para ello correr el programa hasta que se exhiban tales

letreros en el mapa). Ahora localice el procedimiento VALOR DE ESQUINAS y en é 1 busque las órdenes de OUTTEXT. En los casos 1 y 3 ponga junto a X la mitad de la longitud del letrero de las

coordenadas. En los casos 2 y 4, junto a Y ponga la mitad de la altura del letrero. En el caso 1, junto a Y ponga la altura del letrero mas

7 9

unos cuatro pixeles. En los casos 3 y 4, junto a Y ponga unos cuatro pixeles.

Luego, en el procedimiento recthgulo, localice dende dice k y tambidn los dos renglones abajo de k que dicen "IF (k>. . . 1 ' ' y "k:=

(Ymax.. . 1" . En el primer rengl6n ponga el doble de la longitud del letrero m&s unos 10 pixeles y en los dos renglones de abajo ponga el

doble de la altura del letrero m& unos 10 pixeles.

8 0

4.- En el tamaño del rectangulo.

Se ha dejado un margen modificable Ma entre los bordes de la pantalla y el mapa. Ma es el número de pixeles que separa ambas

estructuras. Es una constante general que puede modificarse si el

usuario la localiza en el editor, la borra y la cambia por el número

que desee, que sea entero mayor o igual a cero. Por supuesto que no

debe ser muy grande.

5.- Se quiz0 en un inicio que el programa fuera tan general que

pudiera representar cualquier zona de la Tierra pero hasta este

momento sblo se ha logrado que se representen zonas situdadas tanto al

norte del Ecuador como al oeste del meridiano de Greenwich.

Limitaciones y modificaciones mas comunes en el Procedimiento GRID.-

1.- Modificar el número de puntos de la red en el sentido horizontal y en el sentido vertical.

Se logra cambiando en el listado del programa los valores de dos

constantes generales de GRID, S y T. S es el número de puntos

horizontales y T es el de verticales. El máximo valor que pueden

llegar a tener S o T es W (ver adelante las indicaciones para el

procedimiento Plot-surf 1 . W es una constante general cuyo tamaño es mofificado si se le sitúa en el listado.

2.- Número de vecinos mas cercanos.

Si se desea hacer el cálculo de altura de los puntos de la red

con un número diferente de puntos-datos vecinos, se cambiará el valor

V en la sección de constantes generales del procedure GRID, por

ejemplo a V=8. ¿Cual es el número mejor? pués no se sabe. Davis pone

pero podría sugerirse al usuario que pruebe algunos, porque es

posible que la cuestión tenga que ver con la distribución de los

puntos, es decir, si están más o menos uniformemente dispersos o si

están concentrados en una zona, etc.

3.- Encimamiento de valores en pantalla.

El programa exhibe en pantalla la altura de cada punto-dato y la

de cada punto de la red. Pueden encimarse l o s valores de altura si

1)se introducen muchos datos, 2)se piden muchos puntos de la red, o

3)si junto con alguno de los dos casos anteriores se tienen valores de

altura con muchas cifras, por ejemplo 2715.2 metros sobre el nivel del

mar.

Una posible solucibn a este problema es que se borren del listado

del programa las ordenes de exhibir alturas en l o s procedimientos

"hacer-mapa" y "mostrar-red" y conformarse con leer las alturas que se

presentan en la tabla de "mostrar-resultados".

4. - Tamaño de la red. No se debe pedir una red de 1x1 puntos porque en l o s cálculos se

tendría como denominador 1-1=0. Debe pedirse una red desde 2x2 hasta

"no muy grande" para que no hayan problemas de encimamiento de valores

de altura en pantalla.

5.- Cambio de formato de imagen.

El formato de imagen es el factor que agranda o achica toda

distancia vertical entre dos puntos en una cierta pantalla, con el fin

de que se corrija la distorsibn de la imagen. Esta distorsibn consiste

en la distinta longitud que tienen dos líneas dibujadas en la

pantalla, una horizontal y otra vertical, aunque el usuario pensara

que debían medir igual.

Al correr el programa una vez se observarán dos L mayúsculas invertidas. Si se miden en la L de la derecha la longitud de su línea horizontal y la de su línea vertical y no miden aproximadamente igual,

debe cambiarse el formato de imagen en el programa. Para ello mídase

en la L izquierda la longitud que tiene su linea horizontal y la que tiene su linea vertical. Se debe escribir en un papel los valores

otenidos en forma de quebrado:

LONGITUD HORIZONTAL/LONCITUD VERTICAL (por ejemplo 9/16)

Al terminar de correr el programa, debe el usuario dirijirse al listado en la posici6n del procedimiento "Ajusta al Tamaño de la

pantalla" y poner el quebrado obtenido en lugar del que est& anotado,

en donde dice formato. Por ejemplo: formato:= 3/4 cambia a formato: =

9/16. Lo que sigue es correr por segunda vez el programa y medir la L

de la derecha. Si SUS dos líneas miden aproximadamente igual, entonces 82

se habra ya escrito en el programa el formato de imagen adecuado. Hay

que salvar (grabar en el diskette) esa correcci6n.

6. - Otras modificaciones que deseen hacerse. ¡CUIDADO! Para alguna modificacibn especial al programa debe

tenerse en cuenta que en el programa, cualquier punto tiene dos juegos

de coordenadas diferentes: uno de ellos es el de coordenadas reales o

calculadas (reales si es un punto dato, mientras que calculadas si fué

un punto de la red) y el otro es el de coordenadas de pantalla, las cuales son la longitud y latitud reales o calculadas que se han

modificado por las funciones fl y f2, respectivamente, para exhibirse

adecuadamente. Entonces, un punto que quiera ser añadido en la

pantalla, debe ser escrito como

(fl(longitud1, f2(latitud))

y no como

(longitud, latitud)

Limitaciones y modificaciones mas comunes en el Procedimiento

PLOT-SURF. -

1. - El procedimiento Plot-surf puede aceptar una red de datos con un tamaño maxim0 de W renglones y W columnas. W es una constante general

entera, modificable si se desea. La red de datos no necesariamente

debe tener igual número de renglones que de columnas y puede tener

cualquier número menor o igual a W de renglones o de columnas.

2.- El procedimiento Plot-surf es capaz de producir puntos de la superficie de BCzier ordenados en una red con un tamaño maxim0 de SB renglones y SB columnas. SB es un constante general entera,

modificable si se desea. El usuario puede pedir cualquier red que

tenga un número de renglones menor o igual a SB y un número de

columnas menor o igual a SB y no necesariamente se debe pedir igual

número de renglones y columnas. Como recordatorio debe decirse que los

puntos de los renglones se crearon con valores igualmente espaciados

del parametro v y que los puntos de las columnas se crearon con

valores igualmente espaciados del pargmetro u.

8 3

3. - i Importante! w es un número pequeño que puede ser mayor o igual o

menor que sB. Esto significa que la superficie de Plot-surf puede

tener menos, igual o más puntos que la red de Grid.

4. - Los espaciamientos de las alturas de los puntos en la superficie

producida en Plot-surf que se eligieron fueron de: 10, 50, 100 y 500

metros. Si el usuario desea un espaciamiento distinto (por ejemplo de dos) entonces deberá fijarse en cómo se hicieron los procedimientos

EspalO, Espa50, . . . , Espa5OO que buscan el múltiplo correspondiente m8s cercano y deberá alfabricar un procedimiento para el espaciamiento

que desee (por ejemplo Espa2) y escribirlo cerca de los otros

procedimientos similares; blescribir el nombre del procedimiento con

sus parametros entre paréntesis como el caso respectivo (en el ejemplo

el caso es 2 ) dentro del procedimiento "Número Curva Mínimo"; c)poner

el valor del espaciamiento deseado (en el ejemplo es 2 ) junto a sus

similares dentro del procedimiento "Mandar mensaje" y d)poner la

condici6n "resp= espaciamiento deseado" (resp=2 siguiendo el ejemplo)

como otra m8s en tres sitios que son dentro de la instrucción IF,

dentro del mensaje de ERROR y dentro de UNTIL del procedimiento

"val ida1 'I .

a 4

PSEUDOCODI GO Programa Isolineas

Resumen.

El siguiente programa recibe como datos a un conjunto de cinco valores (longitud, latitud, altura topogrhfica, altura del nivel del

agua subterrhnea y altura del techo de el estrato rocoso m& próximo a

la superficie) por cada uno de puntos de trabajo en una zona de

estudio. La finalidad del programa es mostrar por medio de tres mapas de isolíneas, respectivamente, a una aproximación de la superficie del

terreno de estudio, a una aproximaci6n de la superficie superior del

manto frehtico subyacente y a una apoximación del techo del estrato

rocoso mhs superficial, o sea el que esté en contacto con el suelo.

El ingreso de datos es guiado por mensajes del programa. Los

datos se guardan en un archivo que queda almacenado en el diskette de

trabajo para que si se quieren usar en alguna otra ocasión, no haya necesidad de teclear de nuevo la informaci6n. Se sugiere usar un

nombre para el archivo que dé idea de la zona de estudio cuyos datos

contiene, por ejemplo Ajusco95. dat, Estrella. dat o Papalopn. dat. E l

nombre s610 puede contener ocho caracteres del tipo letras, números,

guión ( - 1 o raya para subrayar(-) así que a veces la palabra no podrá

contener todas sus letras como en el tercer ejemplo que debería decir

Papal oapan.

En forma general, el programa har& lo siguiente:

Primero, pide al usuario el nombre del archivo de trabajo si ya

existe, o bien le pide que introduzca los nuevos datos. Hay una opción

para añadir datos al final de un archivo ya existente y otra opción

para corrección de valores mal tecleados. Segundo, exhibe en la pantalla como a vuelo de pájaro la posición

(su longitud y su latitud) de los n puntos. Para ello pide al usuario

dos cosas que son 1)la separación que desea que exista entre los

máximos y mínimos valores de longitud y latitud de los puntos y el

contorno o rectángulo del mapa y 2)la separación entre las líneas

verticales y horizontales de la cuadrícula del mapa.

Tercero, con los valores de longitud, latitud y altura

topogrhfica de los n puntos de la región construye y exhibe en la

pantalla una red de puntos igualmente espaciados cuyas alturas

85

topográficas calcula por medio de un promedio pesado de las alturas de

puntos originales cercanos a cada punto de la red que se va

construyendo y usando como factor de peso al inverso de la distancia

entre un punto original y el punto que se va a construir (metodo de

Davis l . Cuarto, la longitud, la latitud y la altura de cada punto de la

red regular son los datos para construir un mapa casi a base de

isolíneas de altura. Se usa una modificación del método de superficies

de Bézier para exhibir en la pantalla no varias curvas de nivel con valores de altura igualmente espaciados, sino varios conjuntos de

puntos diferenciados (un conjunto de otro) por medio de distinto color

y símbolo (para el punto). Lo Único que falta para tener un mapa de

isolíneas es que el usuario una, usando su buen criterio, los puntos

con igual símbolo o color.

Quinto, se repiten los pasos tercero y cuarto para crear un mapa casi de isolíneas para el nivel freático.

Sexto, se repiten los pasos tercero y cuarto para crear un mapa casi de isolíneas para el techo del estrato primero de roca.

A continuacicjn se escribe el resumen y pseudocódigo de los

procedimientos de manejo de archivos (no aparece el pseudocódigo para

el manejo del directorio de archivos) y después de ellos se escriben

el resumen y pseudocódigo de los otros procedimientos del programa.

Pseudocódigo de ingreso de datos con ayuda de archivos.

Resumen. Los datos con los que trabajará el programa son un conjunto de

nx5 valores que corresponden a n pozos que tengan información, cada

uno, de: sus coordenadas de ubicación allongitud y bllatitud; c)su altura topográfica; la altitud que en ese sitio exista dlpara el nivel

freático y e)para el techo de la capa de roca más próxima a la

superficie.

Tanto la longitud como la latitud se ingresarán como grados, minutos, segundos y signo cardinal. Los grados y minutos deben estar

escritos como un número entero (sin decimales), l o s segundos pueden

ser un número entero o bien un número con una parte entera y otra parte decimal (Só10 dos decimales). Los signos cardinales se

escribiran como E, O, N y S que corresponden a la longitud Este u

Oeste y a la latitud Norte o Sur. Los tres valores de altura deben ingresar como un número con

parte entera y con parte decimal ( s ó l o con dos decimales) y deben

estar escritos como metros sobre el nivel del mar.

No se escribiran las palabras grados, minutos, segundos, metros

sobre el nivel del mar, altitud ni ninguna de sus abreviaturas.

Tampoco se escribir& el número de cada pozo (1, 2, 3, . . . , n). Hay un menú que permite al usuario elegir la forma en que se

ingresaran los datos. En realidad son dos formas de ingreso pero hay

una tercera opci6n para añadir nuevos datos al final de un archivo ya

creado y una cuarta que permite modificar valores. Las opciones son:

a1Tecleo de datos nuevos que se almacenarán en un archivo.

b)Lectura de datos de un archivo ya creado.

c)Anexar datos en un archivo.

d1Modificar datos en un archivo.

Por supuesto que la opción b) sólo estará disponible cuando en

alguna o varias ocasiones anteriores ya se haya utilizado la opción a)

y así existan archivos almacenados.

Ya que se tenga un archivo de trabajo, recién creado o bien

alguno ya existente, se mostrará en pantalla su contenido pero además se vaciara este último en los siguientes arreglos de trabajo según el

tipo de valor almacenado:

Los grados de la longitud en el arreglo grados>(.

Los minutos de la longitud en el arreglo minutX.

Los segundos de la longitud en el arreglo segundX.

El signo de la longitud en el arreglo signo>(. Los grados de la latitud en el arreglo gradosY.

Los minutos de la latitud en el arreglo minutY.

Los segundos de la latitud en el arreglo segundY.

El signo de la latitud en el arreglo signo\(. La altura topogr&fica en el arreglo topo.

La altura del nivel freático en el arreglo frea. La altura del techo del primer estrato rocoso en el arreglo

Est l.

A continuación se explican l o s procedimientos principales que

realizan el ingreso de datos con ayuda de archivos.

87

PROCEDIMIENTO Menú Control.

-Se exhibe en la pantalla lo siguiente:

"Elija la forma en que se introducirán l o s datos.

¡Asegúrese de tener en el diskette espacio suficiente!

1)Teclear datos nuevos.

2)Leer datos de un archivo ya existente.

3)Anexar datos al final de un archivo.

4)Corregir, modificar datos en un archivo.

5)Terminar.

Opción elegida (1, 2, 3, 4 6 5 ) : I'

-Caso de opción:

1: Hacer el procedimiento "Teclear datos"

2: Hacer el procedimiento "Leer datos"

3: Hacer el procedimiento "Anexar datos"

4: Hacer el procedimiento "Corregir datos" 5: Salir de la sección de manejo de archivos

FIN. -Después de realizar alguno de l os cuatro procedimientos, se

vuelve automhticamente al menú de opciones por si no hay el

archivo que el usuario deseaba o por si quiere hacer una

revisión o una modificación o por si quiere un archivo diferente

al que ya manejó.

PROCEDIMIENTO Teclear datos.

-Se muestran al usuario los nombres de l o s archivos de datos que

hay en el diskette.

-Pedir al usuario el nombre que tendrá el archivo.

-Mensaje en pantalla:

"Teclee l o s datos según el ejemplo.

El máximo número de puntos con datos que puede ingresar es

m. Después de teclear cada valor, pulse la tecla ENTER.

Al terminar escriba 9999 en la columna correspondiente a los grados de longitud y pulse la tecla ENTER. Si desea mofificar el número m debe ir al listado del

programa, casi al inicio, en la secci6n de declaración de 8 8

constantes generales, y modificar el valor de m. Ejemplo:

Long i t ud -

mi nu tos

- 22 22

-Después

T Latitud I altura en m.s.n.m. - mi nu t o s

- 15 18

de l o s ejemplos

topo grá f ica

2532.81 2539.1

de 1

rocoso t ico techo f re8

1 er nivel de 1

2531.10 2528.10 2533.23 2525

1

se pondrá en pantalla, otra vez, el

encabezado de la tabla pero ya sin los ejemplos 1 y 2 . El usuario comenzará a escribir los datos. El programa pondrá el

número de pozo 1 , 2 , . . . y cambiará de pantalla cuando ésta se haya llenado. Se harán el número necesario de cambios de

pantalla hasta que el usuario escriba 9999. En cada nueva

pantalla aparecerá el letrero "Al concluir escriba 9999 en la

columna correspondiente a los grados de longitud" y también

aparecerá el encabezado de la tabla.

-Todos los datos se quedarán almacenados en un archivo.

PROCEDIMIENTO Leer Datos.

-Muestra al usuario los archivos de datos que estén almacenados

en el diskette.

-Pide al usuario que escoja el archivo con el que trabajará.

-Muestra el contenido de ese archivo.

PROCEDIMIENTO Anexar datos.

-Muestra al usuario 10s archivos de datos que estén almacenados

en el diskette. -Pide al usuario que escoja el archivo con el que trabajará.

-Pone en pantalla el encabezado de la tabla con la indicación de

que para concluir, el usuario debe escribir 9999 en la columna

correspondiente a los grados de longitud. 8 9

-El llenado de datos es igual que en el procedimiento Teclear

datos.

PROCEDIMIENTO Frontera Mapa.

Calcula los mhximos y mínimos valores de las longitudes y

latitudes de los puntos datos para calcular en base a ellos la

frontera u orilla del mapa. Necesita que el usuario le indique si la

orilla estar& separada, del conjunto de datos, al pr6ximo segundo, o

al pr6ximo minuto, o a alguno de l o s pr6ximos múltiplos de cinco o

diez de segundo o de minuto, o al pr6ximo grado. Consta de dos

procedimientos:

maxi-mini

ori 1 las

PROCEDIMIENTO maxi-mini

Primero calcula el m&ximo y el minimo valores de longitud que hay

en el conjunto de longitudes de los puntos datos contenidos dentro del

arreglo long. Todo el c&lculo lo hace un procedimiento auxiliar

llamado max-min.

Y en segundo lugar, usa al procedimiento auxiliar max-min para hallar al mhximo y al mínimo valores contenidos en el arreglo lat (de

latitudes de los puntos datos).

90

PROCEDI MI ENTO OR1 LLA . Resumen: Es un procedimiento que prepara el camino para construir el recttmgulo o marco del mapa. Aqui se calculan las coordenadas de dos

esquinas diagonalmente opuestas del marco. El principio básico es que todos los puntos del mapa queden dentro del marco y ninguno sobre él.

El usuario debe elegir uno de entre siete posibles marcos y cada marco se construye calculando su esquina de "longitud mayor y longitud

menor" como "un valor arriba de la longitud máxima y un valor arriba

de la latitud mBxima (de l o s puntos)" y su esquina de "longitud menor

y latitud menor" como "el mismo va'lor, pero abajo, de la longitud

mínima y el mismo valor, pero abajo, de la latitud mínima (de los

puntos)". Las opciones de valores para construir l o s marcos son:

1. El próximo segundo 2. El próximo múltiplo de cinco segundos 3. El próximo múltiplo de diez segundos 4. El pr6ximo minuto 5. El próximo múltiplo de cinco minutos 6. El próximo múltiplo de diez minutos 7. El próximo grado.

Los pasos de este procedimiento son:

1. Meter dentro del procedimiento y escribir en pantalla los valores

(Ya calculados en otra parte) longitud máxima, latitud máxima,

longitud mínima y latitud mínima del conjunto de puntos.

2. Enviar a pantalla el mensaje: "El marco del mapa se construirá un valor arriba de la longitud y de la latitud máximas y el mismo

valor abajo de la longitud y de la latitud mínimas. Escoja dicho valor:

1. El próximo segundo 2. El próximo múltiplo de cinco segundos 3. El próximo múltiplo de diez segundos 4. El próximo minuto 5. El pr6ximo múltiplo de cinco minutos 6. El prc5ximo múltiplo de diez minutos 7. El pr6ximo grado. Teclee (1,2,3,4,5,6 ó 7 ) ".

3. Si (respuesta=l) entonces: calcula el próximo segundo en la

91

longitud mkxima, en la latitud máxima en la longitud mínima y en la latitud minima (valores extremos).

Si (respuesta=2) entonces: calcula el próximo múltiplo de cinco

segundos en los cuatro valores extremos.

Si (respuesta=3) entonces: calcula el próximo múltiplo de diez

segundos en los cuatro valores extremos.

Si (respuesta=4) entonces: calcula el próximo múltiplo de un

minuto en los cuatro valores extremos.

Si (respuesta=5) entonces: calcula el pr6ximo múltiplo de cinco

minutos en los cuatro valores extremos.

Si (respuesta=6) entonces: calcula el próximo múltiplo de diez

minutos en los cuatro valores extremos.

Si (respuesta=7) entonces: calcula el próximo múltiplo de un

grado en los cuatro valores extremos.

Los nombres de l o s procedimientos que hacen l o s pasos 1 y 2 son,

respectivamente, "etiquetas" y "cualseparación". El paso 3 lo hace el mismo procedimiento "Orillas". Hay siete procedimientos que

hacen los c&lculos y enseguida se ponen sus pseudocódigos.

PROCEDIMIENTO Proxlseg. REPITE (Para cada coordenada extrema: longitud máxima, latitud

mbxima, longitud mínima y latitud mínima).

1. Convertir la coordenada extrema de grados a grados, minutos y

segundos. Escribir ambas expresiones.

2. Si la coordenada es un mkximo, entonces:

Calcular la coordenada que contenga al segundo inmediato superior

a los segundos de la coordenada extrema.

(NOTA: Los segundos estan expresados con una parte entera y otra

dec i mal.

segundos = (parte entera de segundos) + 1.

O sea que no importa si la parte decimal de segundos sea cero o distinta de cero, pues igual se elimina).

Si los segundos son ahora igual a 60, entonces: corregir grados,

minutos y segundos, haciendo lo siguiente:

segundos = O

9 2

minutos = minutos anteriores + 1.

Si con lo anterior resulta que minutos = 60, entonces poner: minutos = O grados = grados anteriores + 1.

Si con lo anterior resulta que grados = 181 para una longitud o

91 para una latitud, entonces se debe hacer el procedimiento

EcuaGreen (abreviatura de Ecuador-Meridiano de Greenwich).

3. Si la coordenada es un minimo, entonces: calcular la coordenada

que contenga al segundo inmediato inferior a l o s segundos de la

coordenada extrema.

Si parte decimal de segundos = O, entonces:

segundos = (parte entera de segundos) - 1.

Si parte decimal de segundos f O, entonces: segundos = parte entera de segundos.

Luego :

Si los segundos son ahora igual a -1, entonces: corregir grados,

minutos y segundos, haciendo lo siguiente:

segundos = 59

minutos = minutos anteriores - 1.

Si, después de hacerlo, se tiene que minutos = -1, entonces

poner:

minutos = 59

grados = grados anteriores -1.

Si, en seguida, se tiene grados = -1, entonces se hará el

procedimiento EcuaGreen.

4. Convertir la coordenada calculada de grados, minutos y segundos a

grados. Escribir ambas expresiones y almacenar la segunda en el

arreglo ori 1 la.

PROCEDIMIENTO Prox5sen.

REPITE (Para cada coordenada extrema: longitud máxima, latitud

mAxima, longitud mínima y latitud minima). 1. Convertir la coordenada extrema de grados a grados, minutos y

segundos. Escribir ambas expresiones.

(NOTA: Un ejemplo de coordenada es 73' 15' 18.23", los segundos

pueden tener, a lo m&, dos cifras enteras. Aquí se llamará "la

93

última cifra de segundos" a la cifra entera que está inmediatamente

a la izquierda del punto decimal. En el ejemplo, esa cifra es 8 ) .

2. Si la coordenada es un maximo, entonces:

a) Si la última cifra de segundos junto con sus decimales es una

cantidad entre O (incluso el cero) y 4.9"(= 4.999. . . 1, entonces

la última cifra cambiara a 5 sin decimales.

b) Si la última cifra de segundos junto con sus decimales es una

cantidad entre 5 (incluso el cinco) y 9.9- (= 9.999.. . 1 , entonces la úiltima cifra cambiará a 10 sin decimales; o mejor dicho, la

última cifra cambiara a O sin decimales y la cifra anterior se

increment ara en uno.

Y si al cambiar a 10 resulta que segundos = 60, entonces poner:

segundos = O

y aumentar un minuto.

Y si en seguida resulta que minutos = 60, entonces poner:

minutos = O

y aumentar un grado.

Y si a continuación se tiene, para la longitud que grados =

181, o para la latitud que grados = 91, entonces hacer el

procedimiento EcuaGreen.

3. Si la coordenada es un mínimo, entonces: a) Si la última cifra de segundos junto con sus decimales es una

cantidad entre "mayor que cero" y cinco (incluso el cinco), entonces :

la última cifra cambiará a O sin decimales.

b) Si la última cifra de segundos junto con sus decimales es una cantidad entre "mayor que 5" y 9.9, entonces:

la última cifra cambiara a 5 sin decimales.

c) Si la última cifra de segundos junto con sus decimales es O,

entonces :

se restarán cinco segundos de los segundos totales.

Si al hacerlo se tienen segundos = -5, entonces se pondrh: segundos = 55

y se restará un minuto.

Y si con esto se tiene minutos = -1, entonces se pondrá:

minutos = 59

9 4

y se restará un grado. Y si a continuaci6n se obtiene grados = -1, entonces se hará el

procedimiento EcuaGreen.

4. Convertir la coordenada calculada de grados, minutos y segundos a grados. Escribir ambas expresiones y almacenar la segunda en el arreglo orilla.

PROCEDIMIENTO ProxlOsea.

REPITE (Para cada coordenada extrema: longitud máxima, latitud

mAxima, longitud mínima y latitud mínima). 1. Convertir la coordenada extrema de grados a grados, minutos y

segundos. Escribir ambas expresiones.

2. Si la coordenada es un máximo, entonces:

a) S610 hay un caso:

Sea cual sea el valor que tengan los segundos, teniendo sus

decimales iguales o distintos de cero, se cambiará el valor por

el múltiplo de diez más pr6ximo hacia arriba. Con un ejemplo se

explicara como lograr ésto:

segundos = 18.23

segundos/lO = 1.823

(parte entera de lo anterior)*10+10 = 1*10+10 = 20

segundos = 20.

Si sucede que después del c&lculo los segundos valen 60,

entonces se pondrá:

segundos = O minutos = minutos existentes + 1.

Y si después de ésto, sucede que los minutos valen 60, entonces

se pondrá:

minutos = O

grados = grados existentes + 1.

Y si a continuaci6n, los grados valen 181 para una longitud o

valen 91 para una latitud, entonces se hará el procedimiento

EcuaGreen.

3. Si la coordenada es un mínimo, entonces: a) CASO 1. Si 10s decimales (también llamados parte fraccionaria)

de los segundos valen cero y ademas la parte entera de los

9 5

segundos termina en cero, entonces los segundos valdrán diez

menos que su valor.

Si en el cálculo se obtiene segundos = -10, entonces se pondrá:

segundos = 50

y se restará 1 a l o s minutos.

Y si despuks de ello se obtiene minutos = -1, entonces se

pondrá :

minutos = 59

y se restará 1 a l o s grados.

Y si luego se tiene grados = -1, entonces se hará el

procedimiento EcuaGreen.

b) CASO 2. Cualquier o t r o caso no contemplado en el anterior se

resolverá así: el valor de los segundos se cambiará por el más

pr6ximo múltiplo de diez hacia abajo. Ejemplo:

segundos = 18.23

segundos/lO = 1.823

(parte entera de lo anterior)*lO = 10

segundos = 10.

4. Convertir la coordenada calculada de grados, minutos y segundos a grados. Escribir ambas expresiones y almacenar la segunda en el

arreglo ori 1 la.

PROCEDIMIENTO Proxlmin.

REPITE (Para cada coordenada extrema: longitud máxima, latitud

máxima, longitud mínima y latitud mínima). 1. Convertir la coordenada extrema de grados a grados, minutos y

segundos. Escribir ambas expresiones.

2. Si la coordenada es un máximo, entonces: a) Añadir una unidad m8s a l o s minutos sin importar que l o s

segundos valgan cero o diferente de cero.

Luego, poner cero en l o s segundos.

Si, al hacer lo anterior, los minutos valen 60, entonces:

minutos = O. grados = grados existentes + 1

Si, después de lo anterior, l o s grados valen 181 en el caso de una longitud O 91 en el caso de una latitud, se hará el

procedimiento EcuaGreen.

3. Si la coordenada es un mínimo, entonces: a) Si los segundos no valen cero, entonces:

l o s segundos se ponen en cero.

los minutos se quedan igual

b) Si los segundos valen cero, entonces:

quitar una unidad a los minutos

Si al hacer la resta anterior resulta que los minutos valen -1,

entonces :

minutos = 59

grados = grados existentes -1.

Si después de lo anterior los grados valen -1, entonces se hará el procedimiento EcuaGreen.

4. Convertir la coordenada calculada de grados, minutos y segundos a

grados. Escribir ambas expresiones y almacenar la segunda en el

arreglo orilla.

PROCEDIMIENTO ProxSmin.

REPITE (Para cada coordenada extrema: longitud mgxima, latitud

mhxima, longitud mínima y latitud mínima).

1. Convertir la coordenada extrema de grados a grados, minutos y

segundos. Escribir ambas expresiones.

2. Si la coordenada es un mhximo, entonces: a) Si los minutos terminan en alguna de las cifras O, 1, 2, 3 6 4

(no importa el valor que se tenga en los segundos), entonces:

cambiar esa última cifra a cinco.

poner cero en los segundos.

b) Si los minutos terminan en alguna de las cifras 5, 6, 7, 8 ó 9

no importa qué valor tengan los segundos), entonces:

cambiar esa última cifra a diez; o sea, poner cero en

esa cifra y añadir un uno a la primera cifra de los minutos.

poner cero en los segundos.

Si por cambiar los minutos a un valor más alto resultan ser 60,

entonces: minutos = O.

9 7

grados = grados existentes + 1

Si despu6s de Csto queda que grados = 181 para una longitud o

91 para una latitud, entonces hacer el procedimiento EcuaGreen.

3. Si la coordenada es un mínimo, entonces: Es conveniente mostrar los casos posibles en forma de tabla:

SI ENTONCES- minutos terminados

termina en O O * o termina en O O = o termina en O O * o termina en O O = o termina en O O * o termina en O O = o termina en O O * o

min - 5 O = o minutos: segundos: segundos: en: valor de valor de valor de

O

1

2

3

4 = o termina en O O * o termina en O O

5 = o termina en 5 O ? t o termina en O O

6 = o

termina en 5 O * o termina en 5 O = o termina en 5 O * o termina en 5 O

7

8 = o termina en 5 O * o termina en 5 O

9 = o

termina en 5 O * o termina en 5 O

valor de grados :

igual igual

igual igual

igual igual

igual i gua 1

igual igual

igual igual

igual igual

igual igual

igual igual

i gua 1 igual

* " i g u a l " s i g n i f i c a q u e n o se a l t e r a e l v a l o r o r i g i n a l

Sólo hay una observación que es en el caso primero, en el que se

resta un cinco a los minutos: si resulta que minutos = -5,

entonces :

9 8

minutos = 55

grados = grados - 1 Si después de ello resulta que grados = -1, entonces deberá

hacerse el procedimiento EcuaGreen.

4. Convertir la coordenada calculada de grados, minutos y segundos a grados. Escribir ambas expresiones y almacenar la segunda en el arreglo ori 1 la.

PROCEDIMIENTO ProxlOmin. REPITE (Para cada coordenada extrema: longitud mfixima, latitud

mfixima, longitud mínima y latitud mínima).

1. Convertir la coordenada extrema de grados a grados, minutos y

segundos. Escribir ambas expresiones.

2. Si la coordenada es un mfiximo, entonces:

Es conveniente mostrar los casos posibles en forma de tabla:

I I & I

SI ENTONCES- valor de lvalor de ]valor de I valor de minutos minutos: segundos: segundos

n minutos + 10 O = o 3 I

U * o

minutos + 10 O minutos + 10 O = o minutos + 10 O

= o O min+lO y termina en O O min+lO y termina en O

termina en O

termina * O o

o * " i g u a l " s i g n i f i c a q u e n o s e a l t e r a el v a l o r o r i g i n a l .

Los casos 3, 4, 5 y 6 necesitan al final la aclaraci6n de que si

minutos = 60, entonces:

segundos = O

minutos = O

grados = grados + 1

Y si después de ello resulta que grados = 181 para una longitud o

grados = 91 para una latitud, entonces se tendrá que hacer el

procedimiento EcuaGreen.

Todos los casos se pueden manejar como uno s o l o s i se pone:

"(cifra con la que inician los minutos)*lO + 10"

3. Si la coordenada es un mínimo, entonces: Hay seis posibles casos:

igual

igual

9 9

SI ENTONCES" valor de

grados: minutos: segundos: segundos minutos valor de valor de valor de valor de

O = o

igual minutos - 1 0 O = o igual igual O + o grados- 1 50 O

O igual igual = o O

igual termina en O O * o igual termina en O

termina en O

termina f O

o

* " i g u a l " s i g n i f i c a q u e n o se altera el valor original.

Los casos 5 y 6 se pueden considerar como uno solo. Los casos 2 y

4 pueden tambiCn manejarse como ellos.

Los casos 3 y 1 pueden manejarse como uno solo haciendo la

aclaraci6n de que si minutos = -10, entonces se deberá poner:

grados = grados - 1

Y también se pondrh que si grados = -1, entonces se deberh hacer

el procedimiento EcuaGreen.

4. Convertir la coordenada calculada de grados, minutos y segundos a grados. Escribir ambas expresiones y almacenar la segunda en el

arreglo orilla.

PROCEDIMIENTO ProxGrado.

REPITE (Para cada coordenada extrema: longitud mhxima, latitud

mhxima, longitud minima y latitud mínima).

1. Convertir la coordenada extrema de grados a grados, minutos y

segundos. Escribir ambas expresiones.

2. Si la coordenada es un mAximo, entonces: segundos = O

minutos = O

grados = grados existentes + 1

Si resulta que grados = 181 para una longitud o grados = 91 para

una latitud, entonces hacer el procedimiento EcuaGreen.

3 . Si la coordenada es un mínimo, entonces: a) Si minutos = segundos = O, entonces:

grados = grados existentes - 1

Si, luego, resulta que grados = -1, entonces hacer el

100

procedimiento EcuaGreen.

b) Si minutos f O 6 si segundos f O, entonces: segundos = O minutos = O

grados = sin cambio

4. Convertir la coordenada calculada de grados, minutos y segundos a

grados. Escribir ambas expresiones y almacenar la segunda en el

arreglo ori 1 la.

Se puede observar que en los procedimientos anteriores muchas

veces hay que preveer la posibilidad de que los segundos o los minutos

se salgan de sus lúmites; es decir, que a veces ocurrirá que tengan

valores arriba de 60 o abajo de O. Todas las posibilidades se

escribiran en un procedimiento llamado SaleLimite en el cuál se harán

los ajustes correspondientes en los segundos, en los minutos y en los grados. Por ello en los diferentes procedimientos Prox ... aparecerá el nombre de este procedimiento en el lugar donde ocurran las situaciones

mencionadas. El porcedimiento SaleLimite incluye al procedimiento

EcuaGreen que es aqukl encargado de corregir a los grdos si exceden de

180 para la longitud o de 90 para la latitud y también hace las

correcciones cuando los grados son menores que O.

101

PROCEDIMIENTO Grafica Mapa.

Sus funciones son:

1) Inicializar el modo gráfico de Turbo Pascal 5.0.

2) Calcular el número de pixeles que tiene la pantalla que se

esté usando, tanto en la dirección horizontal como en la

vertical.

3) Calcular el tamaño del rectángulo o frontera u orilla del mapa

y dibujarlo dentro de la pantalla de acuerdo al tamaño en

pixeles de la pantalla, al formato de imagen de la pantal la, a

la distancia para la orilla elegida por el usuario, a los

letreros que tendrá el mapa y a los valores máximos y mínimos

de la longitud y de la latitud del conjunto de puntos datos. El c&lculo del tamaño del rectángulo incluye la deducción de las

fbrmulas o funciones de transformación de coordenadas

originales a coordenadas de pantalla (una fórmula para la

longitud y otra para la latitud) para hallar las cuatro

esquinas del rectángulo pero que posteriormente servirán para

ubicar puntos en la pantalla.

Escribir en el rectángulo los valores en grados, minutos y

segundos de su longitud menor, de la mayor, de la latitud menor

y de la mayor, en dos de las esquinas: la superior izquierda y la inferior derecha.

Cuadricular el mapa con líneas verticales y horizontales cuyo

espaciamiento (cada 1, 5 ó 10 segundos, cada 1, 5 ó 10 minutos

o cada grado) elegirá el usuario.

6 ) Dibujar todos l o s puntos datos dentro del rectángulo usando

las fórmulas o funciones de transformación de coordenadas.

7) Interpolar con base a los puntos datos para 'crear una red de puntos espaciados igualmente tanto en dirección de su latitud

como en dirección de su longitud.

8) Encontrar por interpolación todos l o s puntos que desee el

usuario dentro del rectángulo que tengan valores de altura a

intervalos regulares también proporcionados por el usuario, por

ejemplo alturas de 10, 20, 30, etc. o a intervalos de 100 o de

50, etc. 9) Cerrar el modo gráfico de Turbo Pascal 5.0.

102

Las funciones 1 y 2 son hechas por el procedimiento "inicia modo gráfico" .

La función 3 la hace el procedimiento "rectángulo". La función 4 la realiza el procedimiento "valor de esquinas". La función 5 se hace en el procedimiento "cuadriculado". La funci6n 6 es hecha por el procedimiento "dibujar puntos". Las funciones 7 y 8 son las partes medulares del programa y las

hacen, respectivamente, l o s procedimientos "Grid" y "Plot surf".

La función 9 no necesitó de un procedimiento separado. Algunos de los procedimientos anteriores requieren de tener

observaciones más detalladas y enseguida se harán pero otros ya no se

expl icar8n.

103

PROCEDI MI ENTO RECTANGULO . Explicación y deducción.-

El mapa es un rectángulo dentro del cuál se localizan puntos que

representan la posición de l o s pozos.

Se quisiera tener el mapa exhibido en la pantalla de la

computadora con el mayor tamaño posible. Pero no se va a poner el

recthngulo coincidiendo con los bordes de la pantalla porque, entre otras causas, no cabria el título del mapa.

El rectángulo o marco del mapa debe construirse teniendo en

cuenta lo siguiente:

O. El número de pixeles en la dirección vertical y en la dirección horizontal varía con el tipo de pantalla de una computadora. Hay

dos órdenes en Pascal con las que se puede encontrar de inmediato

esos números:

GETMAXX: encuentra el número de pixeles en la dirección

horizontal de la pantalla que se use.

GETMAXY: encuentra el número de pixeles en la dirección

vertical de la pantalla que se use.

1. Corregir la distorsión de imagen debida al formato de imagen

El tamaño de una distancia vertical debe multiplicarse por el

formato de imagen a fin de que en la pantalla no se muestre más

pequeña o mhs grande de lo que debe ser. En algunas pantallas de computadora (y varía con el tipo de

pantalla) existe el problema de que la longitud, medida con regla,

de una línea horizontal con x número de píxeles es distinta (mayor o quízhs menor) que la longitud de una línea vertical formada

también por x número de pixeles, esto hace que el diseñador no deba trazar imágenes cuyas longitudes se consideren simplemente como un

número de pixeles. Debe primeramente hacer algo como lo siguiente:

dibujar 80 pixeles horizontales y 80 verticales, medir con regla

sus longitudes, por ejemplo en centímetros y construir el cociente longitud horizontal/longitud vertical. En segundo lugar, todas las

distancias verticales debe multiplicarlas por el cociente anterior

llamado formato de imagen.

2. Tamaño: debe ser lo m&s grande posible pero seguirá siendo un

dibujo a escala.

104

La altura y la base del rect&ngulo expresadas en grados se

agrandarkn o achicarhn al multiplicarlos por un factor k tal que el rect&ngulo en la pantalla no invada los espacios reservados para

título, leyendas, numeración y margen.

Primero se calcula la kl que calcule el maxim0 tamaño permitido

para la base, y luego se calcula la k2 que hace lo mismo con la

altura. La menor de ellas ser& k. El dibujo representado parecer& quizas que podía haber tenido una mayor altura ( o una mayor base)

pero ser& el m6s grande dibujo a escala que se pueda trazar.

3. Enderezado de la pantalla.

La computadora considera que el valor X,Y = 0 , O est& en la

esquina superior izquierda de la pantalla y que el valor Xmaxima,

Ymaxima est& en la esquina inferior derecha, en otras palabras el

valor de X crece hacia la derecha y el de Y lo hace hacia abajo. La longitud se suele denominar como X y la latitud como Y. Pero la esquina con valores de "longitud menor, latitud menor" de una zona

que se quiera representar, depende de en que parte de la Tierra se

encuentre. Así, cualquier zona de la República Mexicana tendr&

dicha esquina en la esquina inferior derecha, pero alguna región de

Italia la tendrá en la esquina inferior izquierda, Argentina la tendr& arriba y a la derecha. Problemas complejos de representación

habran cuando se quieran representar zonas atravezadas por el

Ecuador, por el meridiano de Greenwich o situadas en los polos;

porque en el primer caso sus latitudes crecen tanto hacia arriba

como hacia abajo, en el segundo caso sus longitudes aumentan hacia

la derecha y también hacia la izquierda y en el tercer caso se

deben dibujar arcos de círculos concéntricos y la latitud crece

conforme disminuye el diametro del círculo al que pertenecen l o s

arcos mientras que la longitud puede presentar el problema ya

descrito si por la zona cruza el meridiano de Greenwich, la

diferencia es que los valores aumentan no sobre una línea recta

sino sobre el arco. No di6 tiempo de hacer el mapa general, y por ello ~610 se

representarán zonas del tipo de la República Mexicana.

Por 10 expuesto atr&S para que el mapa no quede "de cabeza"

debido a que el punto 0 , O de la pantalla est& arriba y a la

105

izquierda se pondrb cada punto (X, Y) como ( [X~X-XI, [Ymax-YI 1 . 4. Dejar un pequeño margen libre arriba, abajo y a ambos lados entre

el rectángulo y los bordes de la pantalla. El margen es m=7 pero si

se desea, puede ser cambiado a cualquier otro valor.

5. Espacios reservados.

Deben dejarse: un espacio arriba del rect8ngulo para escribir el título del mapa, un espacio a la izquierda y otro igual a la

derecha pgra indicar las coordenadas de las esquinas del mapa, y

otro espacio abajo para explicar la simbología usada.

Para indicar las coordenadas del mapa, lo m8s conveniente es

ponerlas solamente en dos esquinas diagonalmente opuestas indicando

los valores de longitud mayor y latitud mayor en una esquina y de longitud menor y latitud menor en otra. Y la posición de los

letreros con sus coordenadas, por simetria y por si se desea

modificar el tamaño de los caracteres es como se indica en la

figura .

El mapa que señala los pozos no tiene leyendas explicativas. Pero

mhs adelante se representa la misma zona para indicar puntos

interpolados y en esos mapas si hay leyenda. Entonces, para poder

comparar los mapas, deben hacerse iguales y eso significa que el primer mapa va a aparecer como más pequeño de lo que podría ser.

6. El mapa debe estar centrado en la pantalla.

Se mostrarh enseguida, las modificaciones que sufren l o s valores

de longitud menor X1, latitud menor Y 1 , longitud mayor X2, latitud mayor Y2 de acuerdo a las especificaciones dadas renglones atrhs. Se represent a r a n como X 1 ' , Y 1 ' , X 2 ' , Y2'a las coordenadas transformadas

después de considerar la especificación i y como X 1 , Y 1 ,X2 , Y 2 a las

coordenadas iniciales.

O 0 0 0

X I o , ~ ~ o , ~ 2 0 , ~ ~ o = Valores, con parte entera y parte

decimal, obtenidos en el procedimiento

"orillas".

= (orilla~3l,orilla~4l,orilla[ll,oriila[21~.

Por 1:

X ~ ~ , Y ~ ' , X Z ' , Y ~ ~ = X 1 ° , Y 1 0 , X 1 0 + ( ~ 0 - X 1 0 ~ , ~ ~ o + ~ ~ 2 ~ ~ ~ o ~ * f o r m a t o .

106

Por 2:

XI2, Y12, X2*, Y22= Xl0,Ylo, X1°+(X20-X10)*k, Y1°+(Y2~Y10)*formato*k.

m = margen entre recthngulo y borde de la pantalla.

EX= ndmero de pixeles necesarios para poner el letrero de

longitud (la maxima posible es de 180' 00' 0 0 " ) .

= 7 digitos * An + 3 símbolos * An + 1 pixel + 1 gui6n * 3(pixeles/gui6n) + 2 espacios vacíos * An.

= lOO;-con An = 8 = Ancho del caracter

Ey= número de pixeles necesarios para poner el letrero de

latitud (la maxima posible es de 90' 00' 0 0 " ) .

= 1 dígito * Al + 1 pixel + 1 guión * 2(pixeles/guión). = 13; con Al = 10 = Altura del caracter

T = 1 renglon para el título * Al + - pixeles. L = 1 rehglon para el título * Al + - pixeles.

Por 3:

X1 ,Y1 X2 , Y2 =Xmax-Xl ,Ymax-Yl ,Xmax-(Xl0+ (X2°-X10)*K), 3 3 3 3 O O

Ymx-(Y1 + (Y~O-YIO) * formato * K) O

Por 4:

x14, YI*, XZ+, ~ 2 ~ = ~ m a x - m , Ymax-m, ~max-(rn+(~2 -XI )*K), Ymax-(m+ O 0

(Y~O-YIO 1 I * formato * K) Por 5:

S 5 5 5 X1 , Y1 , X2 , Y2 =Xmax-m-Ex, Ymax-m-Ey-L, Xmax- (m+Ex+ (X2 -X1 ) *K) , O 0

Ymax-(m+Ey+L+ (Y2O-Ylo 1 * formato * K) Hasta ahora el rectangulo esta anclado en la esquina inferior

derecha. Una idea para centrarlo es que se debe recorrer a la

izquierda y hacia arriba. Para saber cuanto recorrerlo se debe

considerar "un rectangulo mayor" que circunscribe al rectángulo usual

y a sus etiquetas:

107

márgenes-

r pantalla

rectángulo mayor

rectángulo'

FIGURA 1 9 . Pantal la de la computadora y el mapa aun no centrado. El mapa con sus etiquetas estan circunscritos por un rectangulo mayor.

Todo el recttmgulo mayor debe recorrerse, hacia arriba la mitad

del espacio que queda entre 61 y el margen superior; y debe recorrerse

a la izquierda la mitad del espacio que queda entre é1 y el margen

izquierdo.

Llamense "S" y 'Id" a dichos espacios y en seguida se calculan sus

valores.

s=Ymax- [ 2 ( m+Ey 1 +L+T+ I Y2 -Y1 I I ; S S

=Ywx- [ 2 ( m+Ey) +L+T+ I YMX- ( m+Ey+L+ (Y2 -Y1 1 *formato*K) O 0 - ( Ymax-m-Ey-L) I 1

=Ymax-[2(m+Ey)+L+T+l-(Y2 -Y1 )*formato*K) 1 1 =Ymax-[2(m+Ey)+L+T+(Y2 -Y1 )*formato*K)l

O 0

O 0

d=Xmax- [ 2 (m+Ex) + I X2 -Xi I I ; S S

=XMX- [ 2 ( m+Ex) + I Xmax- ( m+Ex+ (X2 -X1 1 *K) - ( Xmax-m-Ex 1 1 I

=Xmax-[2(m+Ex)+l-(X2 -X1 )*K) 1 1 =Xmax-[2(m+E~)+(X2~-Xl~)*K) I

O 0

0 0

Ahora las esquinas opuestas del rectangulo se obtienen restando

la mitad de "S" y de "d" a las coordenadas de esas esquinas: 6 6 6 6 X1 , Y1 , X2 , Y2 =Xmax-m-Ex- ( d/2 1 , Ymax-m-Ey-L- [ s/2 1 ,

Xmax- (m+Ex+ ( X2 -X1 *K) - (d/2 1, Yma~-(m+Ey+L+(Y2 -Y1 )*forrnato*K)-(s/21

o 0

0 0

Para simplificar

Xmax-m-Ex- (d l2 1 =Xmax-m-Ex- ( 112 1 ( Xmax- [ 2 ( m+Ex 1 + ( X 2 -X1 1 *K) 1 1 o 0

=(l/Z)(Xma~+(X2~-Xl~)*k)

108

Ymx-m-Ey-L- (s/2 1 =

Ymax-m-Ey-L-(1/2)(Ymax-[2(m+Ey)+L+T+(Y2 -Y1 )*formato*K)I) 00

=(1/2) (Yma~-L+T+(Y2~-Yl~)*formato*K)

Entonces :

XI6, Y16, E6=( 1/21 (Xmax+(X2 -X1 )*K), (1/2) (Ymax-L+T+ 00

(Y2°-Y10)*formato*K), X16-( X2°-X10)*K, Y16-(Y20-Y10)*formato*K

109

PROCEDIMIENTO Cuadriculado.

RESUMEN. Pide al usuario que pulse la tecla C para poner una cuadrícula en

el mapa, o bien que pulse la tecla ENTER para que el mapa no se

cuadricule. Luego, si puls6 C se muestra la primera cuadrícula y se

pide al usuario que pulse la tecla C si desea una distinta o bien que

pulse la tecla ENTER si la cuadrícula exhibida es de su agrado. Se

vuelve una y otra vez a dar al usuario un mensaje similar

preguntándole si desea ver la siguiente cuadricula hasta que haya

elegido la que sea de su gusto. Despues de mostrar todas las

disponibles, si oprime C se vuelve a mostrar el mapa sin cuadricular y

el mensaje con la primera petici6n. Las cuadrículas son a cada uno,

cinco y diez segundos, a cada uno, cinco y diez minutos y a cada grado

o bien no hay cuadrícula. Una señal 1 va tomando distinto valor ( O , 1, 2 , . . . , 7) de

acuerdo con el tipo de cuadrícula que se quiera exhibir.

Pseudocódigo:

COMIENZA

-1 = 1

-REPITE -Mensaje:"Si quiere el cuadriculado tipo 1 oprima la tecla C.

Si quiere el mapa tal como está oprima la tecla ENTER."

-Leer y validar la respuesta.

-Borrar la pantalla.

-Dibujar el rectángulo con sus etiquetas de valores de longitud

máxima, longitud mínima, latitud máxima y latitud mínima, en dos

esquinas diagonalmente opuestas.

-Si la respuesta fué ENTER, entonces -Hacer cuadriculado tipo (1-1) .

1 = O, sin cuadrícula. 1 = 1, espacios cada segundo. 1 = 2, espacios cada cinco segundos. 1 = 3, espacios cada diez segundos. 1 = 4, espacios cada minuto. 1 = 5, espacios cada cinco minutos. 1 = 6, espacios cada diez minutos. 1 = 7, espacios cada grado.)

( NOTA:

-SI la respuesta fué C, ENTONCES

110

-Hacer cuadriculado tipo 1.

-1 = 1+1

-SI (1 = 8) ENTONCES

-1 = O {para volver al mapa sin cuadrícula} -HASTA que la respuesta sea ENTER

TERMINA.

El procedimiento que exhibe un mensaje diferente según el tipo de cuadrícula lleva el nombre de "quiere otra cuadrícula?". No necesita

de mayor información.

El procedimiento que hace el cuadriculado tipo 1 o tipo (1-1) se 1 lama "Trazar líneas". A continuación se detalla.

PROCEDIMIENTO Trazar líneas.

Pseudoc6digo:

1. Dar valor al intervalo (delta) que habrá entre las líneas: de

un segundo, o cinco o diez, o de un minuto o cinco o diez, o de

un grado.

2. Trazar las líneas verticales desde el valor longmin al valor

1 ongmax. alusar el intervalo delta entre líneas.

b)Antes de trazar la primera línea, no usar directamente el

intervalo delta sobre la esquina de la longmin, sino

calcular (usar el procedimiento Prox * adecuado) el

próximo múltiplo de 1, 5 ó 10 segundos o minutos o grados;

por ejemplo no ponerla en 70g3m10s + (delta=5minutos) =

70g8m10s sino en 70g5mOs y las siguientes serán en 70g5mOs + (deltael) donde 1 = 1,2, . . .

clTransformar cada "valor aproximado + (delta.1)" a una

coordenada de pantalla. En el valor transformado que

resulte se trazará la línea.

dlcuidar que la última línea vertical no se trace fuera del

rectángulo.

3. Trazar las líneas horizontales desde el valor latmin hasta el

valor latmax. alusar el mismo intervalo delta empleado para las líneas

111

verticales.

b)No trazar la primera línea en "latmin + delta" sino en el

valor que resulte de aproximar a latmin con la rutina prox

*. adecuada. La segunda y las otras líneas se trazarán en "valor aprox. + (delta.1)" donde 1 = 1,2,. . .

c1Transformar cada "valor aprox. + (delta-11" a una

coordenada de pantalla. En el valor transformado que

resulte se trazará la línea.

d)Cuidar que la última línea horizontal no se salga del

rectzingulo.

En una forma más específica, el pseudocódigo de "Trazar líneas"

queda así :

-CASO 1

O:

1:

2:

3:

4:

5 :

6:

7 :

DE {tamaño de delta y hacer. el respectivo Prox * sobre longmin y sobre latmin. }

delta = O;

delta = un segundo;

auxv = aplicar Proxlseg sobre longmin;

auxh = aplicar Proxlseg sobre latmin;

delta = cinco segundos;

auxv = aplicar ProxSseg sobre longmin;

auxh = aplicar ProxSseg sobre latmin;

delta = diez segundos;

auxv = aplicar ProxlOseg sobre longmin;

auxh = aplicar ProxlOseg sobre latmin;

delta = un minuto;

auxv = aplicar Proxlmin sobre longmin;

auxh = aplicar Proxlmin sobre latmin;

delta = cinco minutos;

auxv = aplicar ProxSmin sobre longmin;

auxh = aplicar ProxSmin sobre latmin;

delta = diez minutos;

auxv = aplicar ProxlOmin sobre longmin;

auxh = aplicar ProxlOmin sobre latmin;

delta = un grado;

auxv = aplicar Proxgrado sobre longmin;

auxh = aplicar Proxgrado sobre latmin;

112

-Trazo de líneas verticales.

-Trazo de líneas horizontales.

PROCEDIMIENTO Trazo de líneas verticales

MIENTRAS QUE auxv no sea igual a la longitud mCaxima HACER -Trazar una línea desde el punto (fl(auxv),latmax) hasta el punto

(fl(auxv1,latmin) donde fl es la función que transforma el valor

auxv a la posición, expresada en pixeles, que debe tener auxv en

la pantal la.

-auxv = auxv + delta.

PROCEDIMIENTO Trazo de líneas horizontales

MIENTRAS QUE auxh no sea igual a la latitud máxima HACER -Trazar una línea desde el punto (longmax,f2(auxh)) hasta el punto

(longmin,f2(auxh)) donde fl es la función que transforma el valor

auxh a la posición, expresada en pixeles, que debe tener auxh en

la pantal la.

-auxh = auxh + delta.

113

PROCEDIMIENTO Grid

(basado en la routine Grid del libro Davis, pagina 317).

Resumen. - GRID es un procedimiento para calcular una red rectangular de

valores interpolados a partir de los datos irregularmente espaciados

de un mapa. La matriz (calculada por GRID) de los valores de la red es

mostrada en la pantalla de la computadora. Primero se leen los datos y

se colocan en una matriz de N x 3 , donde N es el número de

observaciones, la primera columna de la matriz contiene a las

coordenadas X1 (Este-Oeste o derecha-izquierda del mapa), la segunda

columna contiene a las coordenadas X2 (Norte-Sur o arriba-abajo del

mapa), y la tercera columna contiene a la variable dependiente (por

ejemplo altura sobre el nivel del mar). Los datos se reciben de un

archivo o se teclean al principio del programa Coorden.pas. Deben

transformarse las coordenadas a grados sin minutos ni segundos. Luego

se calculan los datos que controlan el tamaño del mapa final ( l o s

valores maxim0 y mínimo de X1 y también de X2).

La altura de cada punto de la red regular se calcula mediante una fbrmula de promedio pesado, la cual emplea las alturas de los V

puntos-datos mas cercanos al punto de la red y las distancias entre

éste y esos V puntos-datos. A diferencia de la rutina original del autor Davis (ver en este

trabajo "Mktodo del algoritmo.. . según John C. Davis"), aquí se

utiliza el modo gráfico y no el modo texto; se construye una red con

tamaño vertical y tamaño horizontal modificables; y arriba de cada

punto se escribe su altura.

Pseudoc6digo. - 1.- Leer la matriz de datos.

El programa leera los datos que al inicio del programa se tomaron

de un archivo o los tecleó el usuario. La longitud y la latitud

deben estar en grados.

2. - Datos de Control. Se calculan las coordenadas extremas del conjunto de puntos:

latitud maxima, latitud mínima, longitud mhxima y longitud mínima.

114

3.- Calcular tamaño del mapa y parámetros de escala.

Escribir en el listado del programa el número de puntos que se

quiere que existan a lo largo (IH) y ancho (IW) de la red del mapa. Calcular la separaci6n que existir& entre cada dos puntos

verticales de la red (que se llamará DX21 y la que existirá entre cada dos puntos horizontales (que se llamar& DXl), y calcular el valor Small con el que se compararán distancias muy pequeñas.

4.- Mostrar en pantalla el mapa de puntos-datos.

Para mostrar los puntos en pantalla, se transforman sus longitudes

y latitudes de grados a coordenadas de pantalla considerando:

1)la longitud y el ancho que tenga la pantalla de la computadora;

2)el formato de im&gen, diferente en cada tipo de pantalla, y que

es el factor que debe multiplicar a toda distancia vertical

para que aparezca en pantalla con el mismo tamaño que tendría

si esa distancia se trazara horizontalmente;

3)el espacio reservado en la pantalla para escribir las cuatro

etiquetas de valores: longitud mayor, longitud menor, latitud

mayor y latitud menor, así como los espacios reservados para el

título y para la leyenda explicativa;

4)mostrar el mapa del maxim0 tamaño posible. Se busca el factor que logre el maxim0 tamaño posible en la direcci6n horizontal y el que logre el máximo verticalmente y se escoge el menor de

l o s dos para que el mapa no salga de pantalla ni a lo largo ni

a lo ancho.

5.- Calcular los valores de la red rectangular. X2: = X2max PARA i=l HASTA i=IH HACER LO SIGUIENTE X1: = Xlmin PARA j=l HASTA j=IW HACER L02SIGUIENTE 5A.- Calcular distancia entre el punto de coordenadas

(Xl,X2) y cada uno de los N puntos-datos. 5B. - Hallar los V puntos-datos mas cercanos al punto de

coordenadas (Xl,X2) y calcule la suma del numerador S1 y la del denominador S2 en la fórmula del promedio pesado. Pero si se encuentra un punto-dato que esté sumamente cercano (para reconocerlo, compararlo con la variable Small) al punto (Xl,X2), no se calcular& el promedio pesado sino la altura del punto de coordenadas (Xl,X2) ser& la del punto-dato.

5C.- Calcular la altura del punto de la red de coordenadas (Xl, X21 con el cociente de las sumas S1 y S2. Conservar

115

esa altura en la matriz AMAP. 5 D . - X 1 : = X l + D X l

X 2 : = X2-DX2 6.- Mostrar en pantalla los valores de la red rectangular.

116

PSEUDOCOD1 GO DEL PROCEDI MIENTO PLOT-SURF . RESUMEN:

Este procedimiento en lenguaje pascal es una mofificaci6n del

procedimiento del mismo nombre, en lenguaje C del autor Farin en su

libro "Curves and Surfaces for Computer Aided Geometric Design".

El procedimiento original dibuja, en el espacio de coordenadas

XYZ, a muchos puntos (el número de puntos se programa) unidos formando varias líneas curvas (cuyas proyecciones en el plano XY son líneas paralelas), que en conjunto dfin idea de la forma de una superficie.

Los puntos se obtienen por interpolación con el metodo de "superficies

de BCzier obtenidas por producto tensorial" aplicado a l o s puntos de

control, los cufiles, que son puntos datos, podrían llamarse puntos

controladores de la forma de la superficie pués alterando el número

y/o la posici6n de ellos, se cambia la forma de la superficie.

La modificaci6n añadida es que los puntos obtenidos sean l o s que

tengan por coordenada 2 a un valor múlt iplo de algún número deseado,

por ejemplo: 5, 10, 15, 100, 250 ó 500 para que el usuario l os una a

mano con un lfipiz y obtenga curvas de nivel.

En seguida se presenta el pseudocódigo del procedimiento original

y el de su modificacibn. Así se presenta prque fué el orden en que se

programb. Como ilustracibn, obsérvese la figura 20.

PSEUDOC6DIGO DEL PROCEDIMIENTO ORIGINAL. 1. Escribir: " A continuación se interpolará con la red regular de

puntos para encontrar l os puntos de la superficie de

aproximación usando la teoría de Producto Tensorial según G.

Far i n" . 2. Ingresar los datos en dos grupos que son: a) un arreglo de

coordenadas X, otro de coordenadas Y y otro de coordenadas 2

que indican la posición de cada uno de los puntos ordenados en

un número de (degree-v + 1 ) = IW columnas y (degree-u + 1 ) = IH

renglones; y b) el número de curvas que se quieran dibujar (vgoints) y el número deseado de puntos en cada curva

(u_points). 3. delta-v = l/vqoints.

4. valor inicial del parfimetro v: O.

117

5. PARA iv=O HASTA iv=vqoints HACER 5.1 Cálculo de los puntos de control de la curva x:

Se usan todos los puntos datos contenidos en el primer

rengl6n de la red para calcular: a) con el procedimiento

Hornbez la coordenada X, b) con el procedimiento Hornbez la coordenada Y, y c) con el procedimiento Hornbez la

coordenada 2 de un cierto punto (ver enseguida) de la curva

de Bézier que sea la que corresponda al poligono cuyos

vértices son los puntos del primer renglón. Ese "cierto

punto" es el que tenga el valor actual en el parametro v (el

valor actual coincide con el valor de i v , o sea O, 1, . . . , vqoints). Con los otros renglones se hace algo similar: se encuentra

el punto de Bézier que tenga el mismo valor actual de

parametro v.

El conjunto de puntos de Bbzier obtenidos (uno por renglón) son, al mismo tiempo, puntos de control para la curva v

correspondiente.

NOTA: Hornbez es un procedimiento que emplea un tipo de

coordenadas, ya sean las X o las Y o las 2, de los puntos de control y algún valor dado entre O y 1 de un parametro para

hallar el punto de Bézier que corresponda tanto al valor del

parametro como al conjunto de coordenadas del tipo dado. Por

otra parte, el parametro que usa Hornbez se 1 lama t asi que debe trasladarse, antes de entrar a Hornbez, el valor que

tenga 1 a t. 5.2 Con los puntos de control para la curva v se calcularán los

puntos Bézier de esa curva (que son los puntos de Bézier

de la superficie). Y eso se logra haciendo primero el cAlculo de las coordenadas X de los puntos de Bézier

empleando el procedimiento "Bez to points", luego usando de

nuevo el procedimiento "Bez to points" para hallar ahora

todas las coordenadas Y de los puntos de Bézier, y, por

último, volver a usar ese procedimiento pero ahora para

hallar las coordenadas 2 de los puntos de Bézier.

NOTA: El procedimiento Bez to points recibe como datos a

118

las coordenadas X, Y o 2 de los puntos de control y vá dando

valores entre cero y uno a un parámetro t. Cada valor de t que se vaya produciendo se pasa al procedimiento Hornbez, y

allí se calcula con las coordenadas que hayan entrado como

datos, la coordenada X, Y o 2 del punto de Bézier con el

valor dado de t . Por otro lado, los procedimientos Hornbez y

Bez to points usan como parámetro a t , pero el parametro que

se usa para la curva es u. Para que funcionen los

procedimientos debe cambiarse adecuadamente t en lugar de u.

5.3 Exhibir resultados; o sea mostrar en una tabla las

coordenadas X, Y y 2 de cada punto de Bézier de la

superficie así como el valor de u y el valor de v con los

que se obtuvieron esas coordenadas.

En la misma tabla aparecen las coordenadas X, Y y 2 de los

puntos datos. Si aconteciera que los resultados fueran más

que el número de renglones que tiene la pantalla abajo del

encabezado de la tabla, entonces aparecerá al pie de la

pantalla un mensaje como el que sigue:

"Para continuar oprima la tecla ENTER"

y luego que el usuario oprima esa tecla, se borrarán la

información que hay en la pantalla para mostrar ahora el

resto de los resultados, si es que caben, pués si no es así, volverá a aparecer el mensaje para continuar con los

resultados en una nueva pantalla.

5.4 El nuevo "valor actual & v::

(valor anterior de v) + delta-v.

119

C D

F

H

120

I

Figura 2 0 . Ilustraciones para entender el procedimiento "Plot-surf modificado" que representa la superficie de una zona de estudio. A .

B.

C.

D.

E.

F.

G .

H.

La superficie de una zona de estudio que cuenta con cinco puntos ( ) cuyas coordenadas ( X , Y . Z ) se midieron. Red regular de puntos ( + I con coordenadas ( X , Y , Z ) , calculadas con el

procedimiento GRID. Debido al proceso de interpolaci6n, la superficie que forman no es la real sino una aproximaci6n a ella.

Nomenclatura empleada por el procedimiento Plot-surf en sus datos de entrada. Se muestra también la direcci6n y sentido de los parametros u y v.

Ya ha comenzado el procedimiento Plot-surf. El reng16n i=O es un polígono de control con cuyos vértices y con el valor del parhtro v=O se calcula punt0 de la curva de Bézier. La curva se presenta en el dibujo pero en realidad no es trazada.

Ha pasado un tiempo. El procedimiento Plot-surf ha concluido su ciclo con iv=O. Sobre cada reng16n se ha116 el punto ( + ) que tuviera valor v=O. Esos puntos se convirtieron en vkrtices de un nuevo polígono. Se hallaron los puntos de la curva asociada a este polígono dando a 11 valores entre O y 1.

Superficie creada a base de curvas con el procedimiento Plot-surf. Es una aproximación de la superficie creada con el procedimiento Grid que a su vez fue una aproximaci6n de la superficie real.

Uniendo los puntos de cada reng16n, queda una representacibn en "malla de alambre" de la superficie.

La modificación a Plot-surf consiste en volver a correr el procedimiento Plot-surf pero al nivel de la figura E &lamente se calculan los puntos cuya coordenada 2 sea mílltiplo de cierto nÚmero, por ejemplo de 100. No se unen los puntos de la curva.

I . Fin. SÓ10 falta que el usuario una los puntos con igual valor de altura.

121

PSEUDOC6DI GO DEL AJUSTE AL PROCEDI MI ENTO OR1 GI NAL. RESUMEN

Se corre por segunda ocasión la sección de c&lculos del

procedimiento plot-surf (la sección de c&lculos no incluye a la

Introducción, ni a la inicialización con ceros, ni a la lectura de

datos ni al reporte de resultados. Hay un lugar preciso dentro de esta sección en donde se coloca un procedimiento que entra en acción

sólamente cuando l o s c&lculos corren por segunda ocasión. Ese

procedimiento es el llamado "AjustNivel". Se vera a continuación lo

que hace.

Haciendo un resumen, en la primera vez que se corre la sección de

cAlculos se dan valores a v entre O y 1 igualmente espaciados, por

ejemplo O , O . 2, O. 4, . . . , 1. Por cada valor de v, por ejemplo v=O: 1)

se obtiene un conjunto de vCrtices de pol ígono o puntos de control,

2 ) se van calculando, en forma separada, valores de u entre O y 1

igualmente espaciados, y 3 ) se usa el conjunto de puntos de control

como datos y por cada valor de u, se calcula un punto de la superficie

de BBzier. Así que, al final se tiene, por ejemplo:

valor de V

a. O 0

O . 25

O . 50 etc.

U

3 . 0 0 O . 25 O . 50 O . 75 1.00

o. O 0 O. 25 O . 50 O . 75 1.00

)unto de la superficie ( z, Y, x )

0 . 0 0 0 . 0 0 0 . 0 0 0 . 0 0 0.75 0 . 0 0 0 . 0 0 1.50 0 . 0 0 0.00 2.25 0.00 0 . 0 0 3.00 0.00

0.00 0 . 0 0 0.75 0.32 0.75 0.75 0.42 1.50 0 .75 0.32 2.25 0.75 0 . 0 0 3.00 0.75

Después de que con un valor de u se encuentra un valor z, en la primera serie de cAlculos, l o que seguiría sería calcular con el mismo valor de u a y y luego a x pero en la segunda serie de c&lculos lo que

1 2 2

sigue es: 1) revisar si z es o no es algún múltiplo de un número deseado (por ejemplo si se quieren múltiplos de 2, se revisa si z es algún número de la serie 2, 4, 6, . . . , L; donde L se calcula como el inmediato múltiplo de 2 arriba del valor " z máximo" de la red de puntos datos). Si z es alguno de esos múltiplos, entonces con el valor

de u se calculan x y 5 pero si no es, entonces 2) se encuentran los

dos valores múltiplos entre los cuales est4 z, 3) de ellos se escoje

el que est6 mas cercano. 4 ) Se dB un valor pequeño h (adelante se

explicara mejor esto) y se hacen las sumas (u+h) y (u-h). Con los

valores (u+h) y (u-h) se calculan z y z . Se investiga en cuál de dos rangos se encuentra el múltiplo más cercano, entre z y z o entre z y

z (si, por ejemplo, 2=3.23, z =2.51 y z =5. 12, entonces el múltiplo

1 2

1

2 1 2

m6s cercano a z, que es 3, se encuentra entre z1 y z que no es igual a estar entre z y z puesto que el orden debe ser creciente y ello debe

considerarse en el procedimiento). 5 ) Con los valores del ejemplo

1

anterior, se usan z, z1 y sus correspondiente parámetros u y, por

ejemplo, (u+h) para encontrar por interpolación inversa el valor u con

el cual se obtenga z=3. 6 ) Con el valor hallado de u se calcula con

"Hornbez" al valor z que muy probablemente no será exactamente igual

a 3, 7 ) Se hace una nueva interpolación lineal inversa usando a z , a

su parametro u y La z y su parametro u o bien a z y su parámetro

(u+h)? para averiguarlo se hace 8 ) la búsqueda de el múltiplo más

cercano dentro de alguno de dos rangos: z y z o z y z. Se usará aquella "zeta" en cuyo rango se haya encontrado a dicho múltiplo. 9 )

Se volver6 a hacer interpolación lineal inversa una y otra vez (con

las zetas adecuadas después de buscar entre dos rangos) hasta que se

encuentre un número casi cercano a 3 con una tolerancia de k 0.0001 (u otra). Y 10) el valor de u hallado al final se usa para calcular a y y

a x_.

3

3

3 1

3 1 3

En seguida, tal y como se haría en la primera serie de cálculos, se usaría el siguiente valor de u para hallar al valor z del punto, pero como arriba se dijo, ahora se interpola hasta hallar un valor z. casi igual al múltiplo deseado más próximo de z.

En esencia así como se ha descrito es lo que se hace en el ajuste

a Plot surf. Sólo restan por explicar dos cosas: La primera de ellas es ¿cual es el valor de h? Volviendo al

1 2 3

ejemplo de la tabla, los valores de u igualmente espaciados fueron O ,

0 .25 , 0 . 5 , 0.75 y 1. Tanto en la primera como en la segunda serie de c6lculos se encuentra un valor z por cada valor u de ellos. Para el caso de u=O. 25, se debera encontrar al valor z deseado entre los

valores u=O. 125 y u=O. 375 ¿por quC? porque para el caso de u=O. 5 se

buscara a otro z deseado pero ahora entre u=0.375 y u=0.625. O sea

todos los valores z deseados se buscaran pero no se van a hacer

búsquedas en zonas de la curva en donde ya se busc6 un valor ni se

dejarb zonas de la curva sin buscar. El valor h es "(intervalo entre valores de u)/2".

Se acaba de mencionar que todos los valores z deseados se

buscarh pero eso no es totalmente cierto. Si el usuario del programa pide encontrar pocas curvas, pocos puntos por curva, o ambos, entonces

es muy pero muy probable que no se encuentren todos los z deseados porque quizas se busquen y encuentren, por ejemplo, al 3 (que esté mas pr6ximo a 2=3.23) y al 5 (que esté mas próximo a 2=4.6) pero no se

hallara al 4 porque quizas no estaba próximo a ninguno de los

valores z primeramente calculados. Se cree, porque así funcionó con el

programa "Curva de Bézier XY", que el problema se solucionará si

despues de que el usuario detecte la falla, como respuesta pide al

programa que encuentre un mayor número de curvas o de puntos.

Puede suceder tambiCn que en la búsqueda con (u+h) y (u-h) no se

encuentre al múltiplo deseado. En tal caso no se reportaran valores

(z,x,y) y se continuara con otro valor inicial de u. De nuevo, el

valor faltante de z se puede hallar si se piden más curvas o puntos. La segunda cosa que fa1 taba es: el programa dá como resultados

una tabla con las coordenadas de los puntos datos, de l o s puntos de

BCzier sin ajustar y de los puntos de BCzier ajustados (todos los puntos de Bézier con sus parametros u y v) y tambiCn dB dos mapas de

los puntos que son uno casi topográfico y otro que muestra en

perspectiva a la superficie. El programa hace primero los mapas y

luego la tabla. En seguida se ampliará lo referente a 10s mapas.

Para mostrar el primer mapa se utilizaron procedimientos ya antes

explicados a fin de hacer lo siguiente (en subrayado est& el nombre

aproximado de un procedimiento):

1)Se construye la figura o marco del mapa.

1 2 4

2)Se ponen en dos de sus esquinas l o s valores de las esquinas.

3)Se dan a elegir al usuario varios tipos de cuadriculado. 4)Con las funciones de transformación de coordenadas se exhiben las coordenadas X,Y de los puntos que calcule el procedimiento Plot surf.

5)Se escribe arriba de cada punto su altura.

Debido a que el programa Isolineas iba a resultar demasiado grande para caber en un archivo de Turbo Pascal, se tuvieron que usar

dos archivos anexos al archivo principal, uno de ellos tiene l o s

procedimientos de manejo de archivos y el otro tiene los

procedimientos contenidos en "Plot surf". Estos archivos anexos son

llamados Units.

Pero trabajar a "Plot surf" como una Unit trajo algunas

dificultades tkcnicas. Una de ellas era que dentro de la Unit no se

iban a poder usar procedimientos o funciones contenidos en el archivo

principal, en particular aquellos encargados de realizar las

instrucciones mencionadas arriba como incisos 1 al 4. Esto se resolvió

como sigue: antes de que el programa dejara el archivo principal para

ir a la Unit, se usaron los procedimientos que dejarían hecho el marco con sus valores de esquinas y con el cuadriculado que deseara el usuario. Después de ello, el programa entraría a la Unit, calcularía

l o s puntos de BCzier y , ni modo, se tendrian que reescribir, ahora

dentro de la Unit, las funciones de transformación de coordenadas que servirían para exhibir dentro del marco a los puntos de Bézier. Para

que esas funciones sirvieran, se pasaron del archivo principal, los

parametros que usan. En el paso de parametros hubo otra dificultad,

que era que no se podían pasar los valores del arreglo "orilla" pués

se habían declarado en el archivo principal y la Unit no los

reconocía, tampoco podía la Unit reconocer las constantes usadas en

dichas funciones por la misma razón. Los valores del arreglo tuvieron

que enviarse a la Unit a travCs de un archivo que tendría que ser

leido por ella, mientras que las constantes empleadas por las

funciones tuvieron que ser declaradas por segunda vez, ahora en la

Unit. Otra dificultad fuC que l o s datos que servirían de entrada a la Unit no los podía leer del archivo principal porque estaban en un arreglo que no se declaró en la Unit sino en el archivo principal. Los

1 2 5

datos tuvieron que pasarse a la Unit vía el mismo archivo (denominado matamap.alt porque contenía datos del arreglo "amap" y porque su extensi6n no debía ser .dat como la de los archivos de datos del

programa) usado para pasar algunos parametros y algunas constantes a las funciones de transformaci6n. Muy avanzado el proyecto se pens6 que

tal vez el uso del archivo matamap.alt y la doble declaraci6n de

constantes podía evitarse si las constantes y arreglos que requería la

Unit "Plot surf" se declararan en la Unit. Al hacerlo así, tambiCn el

archivo principal las consideraría como constantes generales aunque no

se hubieran declarado en 61 puCs asi pas6 con ciertos arreglos

declarados en la Unit "entrada".

Para mostrar el segundo mapa, se utilizaron las instrucciones de

transformaci6n de coordenadas para hacer una proyeccibn en perspectiva

que vienen en el libro del autor Berger (ver bibliografía).

Es conveniente explicar algunas cosas mas. El cuerpo del procedimiento Plot-surf aparecer& mas o menos como

sigue para que se realice dos veces la sección de cAlculos (compare

con el programa en lenguaje C de Farin en la pagina 56) .

BEG I N -1ntroducci6n

-1nicializa con ceros

-Leer datos

-FOR cont 1: =1 TO 2 DO

odelta-v: = lhqoints

oupoints-1:= upoints + 1

ov: =o OFOR iv:=O TO vgoints DO

Puntos de control de la curva v Puntos de B6zier de la curva v v:= v + delta-v

-Resu1 tados

END

126

Para encontrar el valor L (múltiplo del número deseado que est6 inmediatamente arriba de el valor z maxima) se pondra un porcedimiento abajo de "Leer datos":

PROCEDIMIENTO Buscar L. 1. Pasar los valores contenidos en el arreglo bidimensional

h a p al arreglo unidimensional auxi. Ver abajo.

2. Usar el procedimiento max-min que encuentra la z maxima y la z mínima.

Para poner todos los datos contenidos en un arreglo

bidimensional, dentro de un arreglo unidimensional (debe cuidarse que

el tamaño de el arreglo unidimensional sea tal que le quepan todos los

datos) se hace:

k=O PARA i=O HASTA i=limite HACER

k= k+l

auxi[kl= Amapii, jl

El procedimiento de ajuste debe funcionar dentro del

procedimiento "Puntos de B6zier de la curva v" y podría estar,

siguiendo el ejemplo del programa "Curva de Bézier XY", dentro del procedimiento "Bez to points". Se diseñó lo siguiente para que durante

la primer serie de cálculos se use tres veces el procedimiento "Bez to

points" para calcular con valores igualmente espaciados de u a las

coordenadas z, a las x y luego a las y , y para que durante la segunda

serie de cAlculos se ejecute "Bez to points" para hallar coordenadas z una por cada valor regularmente espaciado de u. En esta ocasión sí se activa el procedimiento de ajuste para modificar a cada pareja (u, z ) ,

En esta segunda serie no se ejecutarán los cálculos de x y de y con

Bez to points y en su lugar se usaran los valores de u encontrados

para z, y metidos en un arreglo, para calcular a las x y a las y.

1 2 7

PROCEDIMIENTO Puntos de Bdzier de la curva v COMIENZA

*Bez to Points para encontrar las coordenadas z *SI contl=l ENTONCES

-Bez to points para encontrar las coordenadas x -Bez to points para encontrar las coordenadas y

OTRO CASO (o sea contl=2)

-Hallar las coordenadas x y las y usando los valores de u

almacenados en un arreglo.

NOTA: Dentro de "Bez to points" est& "AjustNivel" y dentro de este últirno hay un arreglo donde se almacenan los valores

de u que se obtienen en las interpolaciones finales.

1 2 8

En seguida se explica con detalle como se realizó el segundo

mapa.

PROCEDIMIENTO Dibujar 3D

Resumen. -

Se muestra una superficie que es de tres dimensiones (X, Y,Z) en el plano XZ, en perspectiva. La superficie es una malla de lineas

paralelas y perpendiculares.

Los datos son los arreglos XBezsinAjuste, YBezsinAjuste y

ZBezsinAjuste. Los valores que contienen ya esth ordenados según

número de columna y número de rengl6n.

Se debe contar también con valores ya calculados de: Xmínima,

Ymínima, Zminima, XmBxima, YmBxima y Zmhxima.

Se necesita un valor CL escogido por ahora al arbitrio pero que es

muy importante pu6s es un valor que marca la rotación del dibujo.

Hay dos tareas que deben realizarse ya sea casi simulthneamente o

una despues de la otra. La primera consiste, a su vez, en dos acciones

que soh Ja transformación de los datos X,Z a sus valores en

perspectiva; y luego sigue la transformación de estos últimos a sus

valores de coordenadas en pantalla (es decir que se adapten a la

pantalla, d e n t r o de un marco, dejando sangría y dejando un espacio

para el t i t u l o del mapa). La segunda tarea es poner los puntos en el

mapa y unir con segmentos de recta a los que formen parte de un mismo

renglh; tombiCn se unirhn los puntos que formen parte de una misma

co 1 umr3a.

Fste procedimiento se usa en el programa tres veces para mostrar

tres superficies g distinta profundidad. Para que las tres estén a

igual e s c e l a vertical se creó el procedimiento "Niveles max min"

perteneciehte al procedimiento "Grafica mapa" Dicho procedimiento

busca 1 os valores zmax y zmin de la primera superficie, los valores

zmax y zrnin correspondientes a la segunda superficie y l o s que

corresponden a la tercera, luego calcula la mayor diferencia de las

tres: 1ztnax-tmin.1 y la exporta. Después, en "Dibujar 3D", cada

superficie conserva su propio valor zmin que se llamara zminimo, pero en cuanto a s o valor zmhximo se calcula asi:

1 2 9

zm&ximo= zmínimo + (zmax-zmin).

NOTA: los valores maxim0 y mínimo tanto de las longitudes como de las latitudes son los mismos en las tres superficies.

Finalmente, y sblo para mejorar la presentacibn, se dibujará una

base a b a j o de la superficie, también en perspectiva de tal modo que el

dibujo parezca un bloque de base rectangular extraido de la Tierra.

Pseudocód i go. - 1. Dibujar un recthngulo o marco separado por 10 pixeles de l o s

bordes inferior, derecho e izquierdo de la pantalla y separado por 10+12+5 pixeles del borde superior.

2. Poner el título del mapa separado 10 pixeles del borde

S u p e r i o P de la pantalla y 5 pixeles del borde superior del

marco. 3. Tener a la mano los valores: Xmínima, Ymínima, Zmínima,

%maxima, YmAxima y Zmáxima, número de renglones y número de

columhas. NOTA: el Zmáxima no es el máximo valor z de la

superficie que se va a graficar sino que se calcula, como se explicb arriba, usando una cierta pareja de valores zmax y zmin escogida de entre las tres parejas correspondientes a las tres

superficies. La eleción de la pareja se hace antes del

procedimiento "Dibujar 3D".

4. Hacer dos funciones de transformación de coordenadas, una para

X y o t r a para 2 , que realicen tanto el cambio a coordenadas en

perspectiva como el cambio a coordenadas de pantalla. Para este

ú i t i m o se debe tomar en cuenta que la superficie no debe tocar

una banda de 10 pixeles adentro del marco pués es la sangría y

t a m b i h debe respetar el espesor de la base del bloque.

5. En un arreglo Xt y en otro Zt se meterán l o s valores que

resulteh de transformar al arreglo XBezsinAjuste y al arreglo

POezsinajuste por medio de las funciones.

6 . Mo marcar en pantalla los puntos de coordenadas (X, 2 ) debido a

que resulta innecesario ya que esos puntos son los cruces entre

les líneas de las columnas y las líneas de l o s renglones.

Dichas líneas se trazan como sigue:

130

PARA la columna O A columna última HACER PAAI\ el renglón O AL renglbn penúltimo HACER

unir el punto de la columna i, renglón j con el punto de la columna i, renglón j+l.

PARA el renglón O & renglón último HACER PARA la columna O 11 columna penúltima HACER

unir el punto de la columna j, renglón i con el punto de la columna J+l, renglón i .

7. Dibujar la base del bloque.

Refinamiento del pseudocbdigo. -

Só10 se refinara el punto 4. (Construcción de las funciones).

Se verdn en seguida las transformaciones que deben sufrir los valore:-

X1 ( 1 ongitud mínima), X2 (longitud mhxíma), 21 (e I t ura minima) y 22 (altura maxima)

@

a fin de proyectarse en la pantalla, suponiendo que esos valores

tienen asociada una Ymínima (ver figurablscomo guía). 20

Xl,Yl,ZI,X2,Y2,22= valores mínimos (1) y mhximos (2) de longitud (X), de latitud (Y) y de altura ( 2 ) .

XIO,ZI', XZ',Z~'= x1-Y1*cos(a), Z1-Y1*sen(a), ~2-Y1*cos(a), 22-Y1*sen(a). donde a= Bngulo de rotación del bloque (según el libro de los autores Demel y Miller). (valores ya transformados para presentarse en perspectiva).

XI',ZZ', x2', ZZ'= XI', ZI', XI'+(X~'-XI'), ~1'+(~2'-~1')*formato (cambios debidos al formato de imagen).

X12, Z1*, XZ', 22'" X I o , Zl0, X1°+(X20-X10)*k~, Z1°+(Z20-Z10~*formato*kz. donde

~(Ymax-2*(a+b)-Título-base)/formato~

k2= I Z2'-Zt0 J .

1 3 1

Zto= Zminima-Ym~xima*sen(a). (Cambios para hacer que el bloque ocupe el mayor espacio posible dentro de la pantalla).

X13,Z13, X Z ! ~ , Z ~ ~ = (Xmax-Xl') (Ymax-21 1 , (Xma~-{Xl~+(X2~-X1~)*kl) 1 , O

(Ymax-{Zl +(Z2°-Z10~*formato*k2} 1 . (Para cambiar el origen de la esquina superior izquierda a la esquina inferior derecha).

b

X14,Z14, X2',2Z4= (Xmax-[a+b+( (Xlo-Xto)*~1)l~, (Ymax-{[a+b+baseJ+[Z& -2t I*forgato:k2}), (Xmax-{ [a+b+( (X1 -Xt b*k1bl+(X2 -X1 )*kl) 1 , (Ynax-{[a+b+baseI+[Zl -Zt lEfortato*k2

(Cambios para dejar libres los espacios reservados para sangrías y título).

+(Z2 -Z1 )*formato*k2) 1 .

S e pueden ahora deducir las funciones de transformación para

cualquier punto (x,y,z) de la superficie:

( Z-Y*sen(a) -ZlO)*formato*kz 1 I 1

132

2 0 Figura bl3. Un bloque cuya cara superior contiene a la superficie de estudio es mostrado en perspectiva o, &S correctamente, en representacibn oblicua. Se presentan algunos valores útiles en la deducción de l a s funciones de transformaci6n de coordenadas.

133

MANUAL TECNICO DEL PROGRAMA.

Esquema de Orqanización del programa 1solinea.pas.

Se muestran: 1) el nombre de cada procedimiento en el programa; 2) después de cada nombre, entre paréntesis, las variables

usadas en un procedimiento pero declaradas fuera de él; 3 ) debajo de las variables externas, sin paréntesis, las va

riables y constantes declaradas en un procedimiento; y 4 ) debajo de el nombre de un procedimiento (más abajo de --

sus variables externas y locales) y cargada a la derecha, la lista de los procedimientos usados dentro del proce-- dimiento de nombre dado.

-

134

l. PROGRAM Is01 inea ( Inpu t , ou tpu t ) ; CON!

Ua: Ex.

EY TYPl

i l

VAR

O P

ba re xm ex co ar Am

ST = 7; = 100; = 13;

f= ARRAY[1..41 OF STRING[71;

c : CHAR; ndera, marca: BOOLEAN; nglon, n: INTEGER; ax , ymax: INTEGER; tremo, o r i l l a : e l f ; o r d : i l f ; CM: TEXT; ap: matriz3;

l. inicial iza-con-ceros VAR opc: CHAR; VAR bandera, marca: BOOLEAN; VAR renglon , n , xmax, ymax: INTEGER; VAR l o n g , l a t , t o p o , f r e a , E s t l , zeta , segundx, segundY: a l f ; VAR gradosx, qradosY, minutX, minutY: a r I n t ; VAR s ignox, s ignoY: arStr ; VAR e x t r e m o , o r i l l a : e l f ;

VAR coord: i l f ; VAR Amap: matriz3);

'AR 1, J : INTEGER;

. 2 . Enlace 1 (VAR gradosx, minutX, gradosY, minutY: a r I n t ;

VAR segundX, segundY, long, l a t , t o p o , f r e a , E s t l , z e t a : a l f ; VAR s ignox, s ignoY: arStr ; VAR n: INTEGER);

-1.2. 1.Menu-Con-krol (Ver adelante , en 2.);

.3. frontera-mapa (marca: BOOLEAN; long, la t : a l f ; n , Ymax: INTEGER; bandera:

BOOLEAN; VAR e x t r e m o , o r i l l a : e l f ; VAR coord: i l f ) ;

-1.3. l. MaxiMini / ( l o n g , la t : a l f ; n: INTEGER; VAR extremo: e l f ) ;

VAR INTEGER;

min: REAL;

1.3.1.1.Max-Min (n: INTEGER; a u x i : a l f VAR

I : INTEGER;

-1.3.2.0rillas (marca: BOOLEAN: extremo:

VAR c o o r d : i l f ; VAR o r i

,

1

VAR max, min: REAL);

e l f ; Ymax: INTEGER; bandera: BOOLEAN; la: e l f ) ;

1 3 5

‘AR r e s p : CHAR; aux, grados , minutos , segundos: REAL;

-1.3.2. l. ceros (VAR r e s p : CHAR; VAR aux, grados , minutos , segundos: REAL);

-1.3.2.2. etiquetas (extremo: e l f ; VAR coord: i l f ) ;

-1.3.2.3. Cualseparac i on (VAR r e s p : CHAR); VAR

s e n a l : BOOLEAN;

-1.3.2.4. Proxlseg [ c o o r d : i l f ; e x t r e m o : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR

grados, minutos, segundos: REAL; VAR o r i l l a : e l f ; VAR aux:

REAL) ; {AR

i : INTEGER;

-1.3.2.4. l. letrero (bandera : BOOLEAN; r e s p : CHAR) ;

-1.3.2.4.2. Extremos-GMS

1 ( c o o r d : i l f ; 1 : INTEGER; extremo: e l f ; bandera: BOOLEAN; VAR grados, minutos , segundos, aux: REAL);

1.3.2.4.2. 1.Trans ( a u x : REAL; VAR grados, minutos, segundos: REAL); VAR

aux2: REAL ;

-1.3.2.4.3.SaleLimite

1 (VAR grados, minutos, segundos: REAL) ;

1.3.2.4.3. 1. EcuaGreen;

-1.3.2.4.4. Gr-decimal r INTEGER; grados, minutos, segundos: REAL; bandera:

BOOLEAN; VAR aux: REAL; VAR o r i l l a : e l f ) ;

1.3.2.4.4. 1.Transinv (grados , minutos , segundos : REAL; VAR aux: REAL);

-1.3.2.5. ProxSseg ( c o o r d : i l f ; e x t r e m o : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR

grados, minutos, segundos: REAL; VAR o r i l l a : e l f ; VAR aux:

REAL) ;

i : INTEGER ; a u x l , a u x 2 : REAL;

1.3.2.5. l . v e r *

-1.3.2.6. ProxlOseg

- *

136

-1

(coord: ilf; extremo: elf; bandera: BOOLEAN; resp: CHAR; VAR grados, minutos, segundos: REAL; VAR orilla: elf; VAR aux: REAL ) ;

VAR i: INTEGER; Auxl: REAL;

-1.3.2.6. 1. ver *

-1.3.2.7. Proxlmin (coord: ilf; extremo: elf; bandera: BOOLEAN; resp: CHAR; VAR grados, minutos, segundos: REAL; VAR orilla: elf; VAR aux:

1.3.2.7. l.ver * -1.3.2.8. ProxSmin

(coord: ilf; extremo: elf; bandera: BOOLEAN; resp: CHAR; VAR grados, minutos, segundos: REAL; VAR orilla: elf; VAR aux: REAL) ;

i : INTEGER; Auxl , Aux2: REAL;

1.3.2.8. l.ver *

.3.2.9. ProxlOmin (coord: ilf; extremo: elf; bandera: BOOLEAN; resp: CHAR; VAR grados, minutos, segundos: REAL; VAR orilla: elf; VAR aux: REAL) ;

VAR

i : INTEGER; Auxl, Aux2: REAL;

-1.3.2.9. 1. ver *

-1.3.2.10. ProxGrado (coord: ilf; extremo: elf; bandera: BOOLEAN; resp: CHAR; VAR grados, minutos, segundos: REAL; VAR orilla: elf; VAR aux: REAL) ;

VAR i : INTEGER;

L1.3.2. 10. l.ver *

-1.3.2.11.SIGUE (marca: BOOLEAN; Ymax: INTEGER) ;

4. graf i ca-mapa (n: INTEGER; long, lat, topo, frea, Estl, zeta: alf; coord: ilf; orilla: elf; Amap: matriz3; bandera, marca: BOOLEAN; VAR Xmax, Ymax: INTEGER) ;

VAR palette: PALETTETYPE; graphmode, graphdriver, errorcode, IH, IW, cont2: INTEGER; band-1, band-2, band-3: string[51; 137

band: s t r i n g [ 5 0 1 ; k, formato, X 1 , X 2 , Y 1 , Y 2 , Xlmax, Xlmin, XZmax, Xamin, D X 1 , DX2, zmax, zmin: REAL;

-1.4.1. Inicial iza-modo_graf ico ( V A R graphmode, graphdriver, errorcode, Xmax, Ymax: INTEGER; VAR

p a l e t t e : PALETTETYPE);

-1.4.2. rectangulo o r i l l a : e l f ; VAR xmax, ymax: INTEGER; VAR k, formato, X 1 , X 2 ,

Y 1 , Y 2 : REAL); AR A w l , Aux2: REAL;

-1.4.2. l. Dat os-de-mapa ( o r i l l a : e l f ; VAR X 1 , X2, Y 1 , Y2: REAL);

-1.4.2.2. Ajuste-al-tamano-de-lasantalla (Xmax, Ymax: INTEGER; X 1 , X 2 , Y 1 , Y 2 : REAL; VAR k, Formato:

REAL ) ; VAR

r e s p : CHAR;

-1.4.2.2.1.Formato-Imagen (marca: BOOLEAN; Formato: REAL) ; VAR

x, y : INTEGER;

-1.4.2.2.2. Text o f ormat o ( V A R resp : CHAR) ; r t a b , k, H g , i , codigo: INTEGER;

medida: REAL;

1.4.2.2.2.1. Validaformato ( t a b , k: INTEGER; VAR medida: REAL); VAR

cadena: STRING[SI; codigo: INTEGER;

-1.4.2.2.3. SIGUE (marca: BOOLEAN; Ymax: INTEGER) ;

-1.4.2.3. figura ( X 1 , X2, Y 1 , Y 2 : REAL) ;

.4.3. Val or-de-esquinas ( o r i l l a : e l f ; X 1 , X 2 , Y 1 , Y 2 : REAL; band-1, band-2, band-3:

STRING; band: STRING); VAR

dux, grados, minutos, segundos: REAL; i , J : INTEGER;

1.4.3. 1.Trans (aux: REAL; VAR grados, minutos, segundos: REAL); VAR

aux2 : REAL ; 1 3 8

4.3.2. Rayas X 1 , X 2 , Y 1 , Y 2 : REAL);

4. Cuadriculado (Xmax, Ymax, cont2 : INTEGER; coord: i l f ; o r i l l a : e l f ; XI, x2,

y1, Y 2 , k, formato: REAL; bandera: BOOLEAN; band-1, band-2, band-3: STRING; band: STRING) ;

VAR 1 : INTEGER; opc , r e sp : CHAR;

-1.4.4. 1. titulo (cont2 : INTEGER); VAR

l e t r e r o : STRINC[SOI;

-1.4.4.2. QuiereOtraCuadricula ( 1 , Ymax: INTEGER);

-1.4.4.3. LeerYval idarResp (VAR opc: CHAR) ;

-1.4.4.4. figura ( X 1 , X 2 , Y 1 , Y2: REAL) ;

-1.4.4.5. Val or-de-esqui nas I ( o r i 1 l a : e l f ; X 1 , X2, Y 1 , Y2: REAL; band-1, band-2, band-3:

STRING; band: STRING); VAR

aux, grados, minutos, segundos: REAL; i , J : INTEGER;

1.4.4.5. 1. Trans (aux: REAL; VAR grados, minutos, segundos: REAL); VAR

aux2 : REAL ;

L1.4.4.5.2. Rayas ( X 1 , X2, Y 1 , Y2: REAL) ;

-1.4.4.6.titulo ( c o n t 2 : INTEGER); VAR

l e t r e r o : STRINCISOI;

-1.4.4.7. trazar-1 ineas ( 1 , Xmax, Ymax: INTEGER; c o o r d : i l f ; o r i l l a : e l f ; k, formato: REAL; bandera: BOOLEAN; r e s p : CHAR);

VAR auxv, auxh , de l ta : REAL;

i l. 4.4.7. l. del tals ( c o o r d : i l f ; o r i l l a : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR

del ta , auxv , auxh: REAL); VAR

grados, minutos, segundos, aux: REAL; 139

1 extremo : e l f ;

1 . 4 . 4 . 7 . 1 . 1 . P r o x l s e g ( c o o r d : i l f ; e x t r e m o : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR;

VAR grados, minutos, segundos: REAL; VAR o r i l l a : e l f ; VAR dux: REAL);

i : INTEGER;

1 . 4 . 4 . 7 . 1. 1. 1. ver *

-1 .4 .4 .7 .2 . delta5s ( c o o r d : i l f ; o r i l l a : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR

de l ta , auxv , auxh: REAL); VAR

grados, minutos, segundos, aux: REAL; e x t r e m o : e l f ;

-1 .4 .4 .7 .2 .1 . ProxSseg ( c o o r d : i l f ; e x t r e m o : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR;

VAR grados, minutos, segundos: REAL; VAR o r i l l a : e l f ; VAR

aux: REAL);

i : INTEGER; a u x l , aux2: REAL;

1 . 4 . 4 . 7 . 2 . 1 . l . v e r *

.l. 4 . 4 . 7 . 3 . deltalos ( c o o r d : i l f ; o r i l l a : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR

de l ta , auxv , auxh: REAL) ;

grados, minutos, segundos, dux: REAL; e x t r e m o : e l f ;

l . 4 . 4 . 7 . 3 . l . ProxlOseg ( c o o r d : i l f ; e x t r e m o : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR;

VAR grados, minutos, segundos: REAL; VAR o r i l l a : e l f ; VAR aux: REAL) ;

i : INTEGER; Auxl : REAL ;

1 . 4 . 4 . 7 . 3 . 1 . l . v e r *

-1 .4 .4 .7 .4 . deltalm [ c o o r d : i l f ; o r i l l a : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR

de l ta , auxv , auxh: REAL); VAR

grados, minutos, segundos, aux: REAL; e x t r e m o : e l f ;

- 1 .4 .4 .7 .4 . 1. Proxlmin ( c o o r d : i l f ; ex t remo: e l f ; bandera : BOOLEAN; r e s p : CHAR;

VAR grados, minutos, segundos: REAL; VAR o r i l l a : e l f ; VAR

aux: REAL); VAR 140

1 i : INTEGER;

1 . 4 . 4 . 7 . 4 . 1 . l . v e r *

- 1 . 4 . 4 . 7 . 5 . delta5m ( c o o r d : i l f ; o r i l l a : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR

d e l t a , a u x v , a u x h : REAL); VAR

grados, minutos , segundos, aux: REAL; e x t r e m o : e l f ;

- 1 . 4 . 4 . 7 . 5 . 1.ProxSmin ( c o o r d : i l f ; e x t r e m o : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR grados, minutos , segundos: REAL; VAR o r i l l a : e l f ; VAR aux: REAL);

i : INTEGER; Auxl, Aux2: REAL;

1 . 4 . 4 . 7 . 5 . 1 . l . v e r *

- 1 . 4 . 4 . 7 . 6 . deltalorn ( c o o r d : i l f ; o r i l l a : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR IR d e l t a , a u x v , a u x h : REAL);

grados, minutos , segundos, aux: REAL; extremo: e l f ;

l . 4 . 4 . 7 . 6 . 1 . ProxlOmin ( c o o r d : i l f ; e x t r e m o : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR grados, minutos , segundos: REAL; VAR o r i l l a : e l f ; VAR aux: REAL);

VAR i : I NTEGER ; Auxl , Aux2: REAL;

L 1 . 4 . 4 . 7 . 6 . 1 . l . v e r *

- 1 . 4 . 4 . 7 . 7 . d e l t a l g ( c o o r d : i l f ; o r i l l a : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR

d e l t a , a u x v , a u x h : REAL); VAR

grados, minutos , segundos, aux: REAL; extremo: e l f ;

- 1 . 4 . 4 . 7 . 7 . 1.ProxGrado ( c o o r d : i l f ; e x t r e m o : e l f ; b a n d e r a : BOOLEAN; r e s p : CHAR; VAR grados, minutos , segundos: REAL; VAR o r i l l a : e l f ; VAR aux: REAL) ;

i : INTEGER;

1 . 4 . 4 . 7 . 7 . 1 . l . v e r *

- 1 . 4 . 4 . 7 . 8 . 1 ineas-vert icales ( o r i l l a : e l f ; a u x v , d e l t a , k, formato: REAL; Xmax, Ymax:

INTEGER 1 ; 1 4 1

1.4 .4 .7 .8 . 1. FUNCTION fl ( x , k: REAL; orilla: elf; Xmax: INTEGER): REAL; VAR

x l : REAL; x2: REAL;

142

L1.4.4.7.8.2. FUNCTION f2 (y, k, Formato: REAL; orilla: elf; Ymax: INTEGER): REAL; VAR yl: REAL; y2: REAL;

1.4.4.7.9. lineas-horizontales (orilla: elf; auxh, delta, k, formato: REAL; Xmax, Ymax: I NTECER ) ;

.4.5. dibujarguntos (long, lat, zeta: alf; orilla: elf; Xmax, Ymax: INTEGER; k, formato: REAL) ;

VAR i , J: INTEGER; longitud, latitud: REAL;

1.4.5.1.FUNCTION fl (x, k: REAL; orilla: elf; Xmax: INTEGER): REAL; VAR xl: REAL; x2: REAL;

1.4.5.2. FUNCTION f2 (y, k, Formato: REAL; orilla: elf; Ymax: INTEGER): REAL; VAR y1 : REAL; y2: REAL;

-1.4.6. SIGUE (marca: BOOLEAN; Ymax: INTEGER) ;

-1.4.7. Niveles-max-min (topo, frea, Estl: alf; n: INTEGER; VAR zmax, zmin: alf); VAR

i : INTEGER; zmaxi, zmini: REAL;

-1.4.8. distribuir-alturas (topo, frea, Estl: alf; n, cont2: INTEGER; VAR zeta: alf); VAR

i : INTEGER;

-1.4.9. Grid (extremo, orilla: elf; Xmax, Ymax, cont2: INTEGER; X1, X2, Y1, Y2, formato, k: REAL; marca: BOOLEAN; long, lat, zeta: alf; n: INTEGER; band-1 , band-2, band-3: STRING; band : STRING ; VAR IH, IW: INTEGER; VAR Xlmax, Xlmin, X2max, XZmin, DX1, DX2: REAL; VAR Amap: matriz3) ;

TYPE matriz= ARRAY [l..N,1..31 OF REAL; arreglo= ARRAY [l. .MI OF REAL;

VAR Data: matriz;

143

s m a l l : REAL;

-1.4.9. 1. Introduccion-G (marca: BOOLEAN; Ymax: INTEGER);

INTEGER ;

1.4.9.1. 1.SIGUE (marca: BOOLEAN; Ymax: INTEGER);

-1.4.9.2. Leer-datos ( l o n g , l a t , zeta: a l f ; n: INTEGER; VAR Data: m a t r i z ) ;

VAR i , J: INTEGER;

-1.4.9.3. Datos-de-control ( e x t r e m o : e l f ; VAR Xlmax, Xlmin, XZmax, X2min: REAL);

.4.9.4. Calcular-tamano-de-mapa_yqarametros-de-escala (marca: BOOLEAN; Ymax: INTEGER; Xlmax, Xlmin, XZmax, X2min:

REAL; VAR DX1, D X 2 , s m a l l : REAL; VAR IW, IH: INTEGER); YAR k, s i g n o : INTEGER; band: STRING[SI;

-1.4.9.4. 1.valida-3 (k, s i g n o : INTEGER; VAR IH, IW: INTEGER); VAR

e n t e r o , c o d i g o : INTEGER; cadena: STRING[Sl;

-1.4.9.4.2. SIGUE (marca : BOOLEAN; Ymax: INTEGER);

-1.4.9.5. Hacer-mapa-de-datos (marca : BOOLEAN; Data: m a t r i z ; Xmax, Ymax, c o n t 2 : INTEGER;

Xlmax, Xlmin, Xamax, X2min, k, formato: REAL; o r i l l a : e l f ; X1, X 2 , Y1, Y 2 : REAL; band-1, band-2, band-3: STRING; band:

STRING) ; rAR

I : INTEGER;

-1.4.9.5.l.figw-a ( X 1 , X 2 , Y1, Y 2 : REAL) ;

-1, ,4.9.5.2. Valor-de-esquinas : o r i l l a : e l f ; X 1 , X 2 , Y1, Y 2 : REAL; band-1, band-2, band-3:

STRING; band: STRING); {AR

dux, grados , minutos , segundos: REAL; 1 , j: INTEGER;

-1.4.9.5.2.1. Trans ( a m : REAL; VAR grados, minutos , segundos: REAL); VAR

aw2: REAL;

-1.4.9.5.2.2. Rayas 1 44

(X1, X2, Y1, Y2: REAL);

-1.4.9.5.3. titulo-1 (cont2: INTEGER) ; VAR letrero: STRINGl701;

-1.4.9.5.4. FUNCTION fl (x, k: REAL; orilla: elf; Xmax: VAR x1 : REAL; x2: REAL;

-1.4.9.5.5. FUNCTION f2

-1

INTEGER) : REAL;

(y, k, Formato: REAL; orilla: elf; Ymax: INTEGER): REAL; VAR yl: REAL; y2: REAL;

.4.9.5.6. Poner-altura-delqunto-dato (Data: matriz; i , Xmax, Ymax: INTEGER; k, formato, Xlmin, X2mi n: REAL) ;

VAR band, altura: STRINGLGI ;

-1.4.9.5.6. 1. FUNCTION fl (x, k: REAL; orilla: elf; Xmax: INTEGER): REAL; VAR xl: REAL; x2: REAL;

-1.4.9.5.6.2. FUNCTION f2 (y, k, Formato: REAL; orilla: elf; Ymax: INTEGER): REAL; VAR yl: REAL; y2: REAL;

-1.4.9.5.7. SIGUE (marca: BOOLEAN; Ymax: INTEGER) ;

(Data: matriz; IH, IW: INTEGER; Xlmin, X2max, DX1, DX2, small: REAL; VAR Amap: matriz3);

VAR X1, X2, S1, S2: REAL; IC, i, J: INTEGER; dist: arreglo; bandera: BOOLEAN;

-1.4.9.6. l. Di s t anc i as-Cuadradas (Data: matriz; X1, X2: REAL; VAR dist: arreglo); VAR

u : I NTEGER ;

-1.4.9.6.2. Vecinos-mas-cercanosl-sumas (small: REAL; Data: matriz; dist: arreglo; VAR S1, S2: REAL; VAR IC: INTEGER; VAR bandera: BOOLEAN);

CONST 145

v= S ;

VAR h, L: INTEGER; D: REAL;

-1.4.9.6.3. Altura-delqunto-de-la-red (bandera : BOOLEAN; Data: matr iz ; S1, '52: REAL; i , J, IC: INTEGER; VAR Amp: matriz3);

-1.4.9.7. Mostrar-red marca: BOOLEAN; IH, IW, Xmax, Ymax, cont2: INTEGER; Xlmin, X2min, k, f o r m a t o , DX1, DX2: REAL; Amp: matriz3; o r i l l a : e l f ; X 1 , X 2 , Y 1 , Y 2 : REAL; band-1, band-2, band-3: STRING; band: STRING) ; IAR i, J: INTEGER; sale: TEXT;

-1.4.9.7.l.figux-a (X1, X 2 , Y 1 , Y 2 : REAL) ;

(oril 1 a: e I f ; X1, X2, Y 1 , Y 2 : REAL; band-1, band-2, band-3: STRING; band: STRING); IAR aux, grados, minutos, segundos: REAL; i , j: INTEGER;

-1.4.9.7.2.1. Trans (aux: REAL; VAR grados, minutos, segundos: REAL); VAR

aux2: REAL ;

-1.4.9.7.2.2. Rayas ( X 1 , X2, Y 1 , Y 2 : REAL);

-1.4.9.7.3. titulo-2 ( c o n t e : INTEGER); VAR

l e t r e r o : STRING[701;

-1.4.9.7.4. FUNCTION fl ( x , k: REAL; o r i l l a : e l f ; Xmax: INTEGER): REAL; VAR

x l : REAL; x2: REAL;

-1.4.9.7.5. FUNCTION f2 ( y , k, Formato: REAL; o r i l l a : e l f ; Ymax: INTEGER): REAL; VAR yl: REAL; y2: REAL;

.. 4.9.7.6. Poner-altura-delqunto-red ( Amap : mat r 123; I , j, Xmax, Ymax: INTEGER; k, formato, Xlmin, X2min, D X 1 , DX2: REAL);

VAR b a n d , a l t u r a : STRING[GI; 146

"-

I . I 1.4.9.7.6.1. FUNCTION fl (X, k: REAL; orilla: elf; Xmax: INTEGER): REAL; VAR xi: REAL; x2: REAL;

1.4.9.7.6.2. FUNCTION f2 ( y , k, Formato: REAL; orilla: elf; Ymax: INTEGER): REAL; VAR y1 : REAL; y2: REAL;

-1.4.9.7.7. SIGUE (marca: BOOLEAN; Ymax: INTEGER);

m a r ca : BOOLEAN; IH, IW, Ymax: INTEGER; Xlmax, X2max, DX1, DX2: REAL; Amp: matriz3); 'AR i , J , renglon: INTEGER;

-1.4.9.8.1. Cabeza-Tabla2; VAR i : = INTEGER;

-1.4.9.8.2.Cambiarqantalla

E marc a: BOOLEAN; 1 , J , IH, IW, Ymax: INTEGER; VAR renglon:

INTEGER) ;

1.4.9.8.2.1. SIGUE (marca: BOOLEAN; Ymax: INTEGER);

1.4.9.8.2.2. Cabeza-Tabla; VAR

i : = INTEGER;

-1.4.9.8.3. SIGUE (marca: BOOLEAN; Ymax: INTEGER) ;

-1.4.9.9. Inicializa-modoJrafico (V A R g r a p h mode, graphdriver, errorcode, Xmax, Ymax: INTEGER; VAR palette: PALETTETYPE);

.. 4.10. Enlace2 ~marca:BOOLEAN;IH,IW:INTEGER;dX1,dX2,Xlmin,X2max,zmax,zmin:REAL; Xmax, Ymax, cont2: INTEGER; coo r d : i 1 f; orilla: elf; X1, X2, Y1, Y2, k, formato: REAL; bandera: BOOLEAN; band-1, band-2, band-3: STRING; band: STRING);

VAR Espa, vgoints, ugoints: INTEGER;

1.4.10. 1. Introduccion-sup (marca: BOOLEAN; Ymax: INTEGER);

1.4.10. 1. 1. SIGUE (marca: BOOLEAN; Ymax: INTEGER) ;

147

-1.4.10.2. mandar-mensaje

IR (VAR espa, vgoints, ugoints: INTEGER);

resp, signo: INTEGER;

1.4.10.2. 1. valida2 (signo: INTEGER; VAR resp: INTEGER); VAR entero, codigo: INTEGER; cadena: STRINGlS];

-1.4.10.3. Inicial iza-modo_graf ico (V A R g r a phm o de, graphdriver, errorcode, Xmax, Ymax: INTEGER; VAR palette: PALETTETYPE);

-1.4.10.4. figura (Xl, X2, Y1, Y2: REAL) ;

-1.4.10.5. Valor-de-esquinas ( o r i l 1 a : el f ; X1 , X2, Y1, Y2: REAL; band-1, band-2, band-3:

1:AR

STRING; band: STRING);

a m , grados, minutos, segundos: REAL; i , j : INTEGER;

1.4.10.5.1.Trans (aux: REAL; VAR grados, minutos, segundos: REAL);

dux2 : REAL ;

1.4.10.5.2. Rayas (X1, X2, Y1, Y2: REAL);

-1.4. 10.6 . Cuadriculado (Ver 1.4.4. ) (Xmax, Ymax, cont2: INTEGER; coord: i l f ; orilla: elf; XI, X2, Y 1 , Y 2 , k, formato: REAL; bandera: BOOLEAN; band-1, band-2, band-3: STRING; band: STRING) ;

VAR 1: INTEGER; opc, resp: CHAR;

-1.4. 10. 7 . P l O t S W f (Ver adelante, en 3 . ) ;

-1.4. 10.8. Inicializa-modoxraf ico (VA R qr a phm o de, g r aphd r iver, err o rcode, Xmax, Ymax: INTEGER; VAR palette: PALETTETYPE);

I (marca: BOOLEAN; ymax: INTEGER) ; Ll. 5.1. SIGUE

(marca: BOOLEAN; Ymax: INTEGER) ;

1 4 8

Entrada; CONST m= 150;

TYPE alf= ARRAY [l..ml OF REAL; arInt= ARRAY [l. . m ] OF INTEGER; arStr= ARRAY [l. . m ] OF STRINGr21;

VAR gradosX, minutX, gradosY, minutY: arInt; segundX, segundY, t o p o , frea, Estl, long, lat, zeta: alf; signox, signoY: arStr; n: INTEGER;

2 . Menu-cont ro 1 (VAR gradosx, minutX, gradosY, minutY: arInt; VAR segundx, segundl, long, lat, topo, frea, Estl, zeta: alf; VAR signox, signoY: arStr; VAR n: INTEGER);

VAR flag, v l : INTEGER; nstri, fi Ja, ic45 , ic44: INTEGER; ch, ch55 : CHAR; archA : TEXT; name : STRINGt81; arc h-name : STRING[ 131 ;

str i : ARRAY[1..2OI OF STRINC[511;

-2. l . Limpi ;

-2.2. Fens ter ( X X 1 , YY1, AN, AL, COL, SU: INTEGER); k: J, K, X1, Y1, X2, Y2: INTEGER;

2 . 2 . 1 . Musi (T, S: INTEGER) ;

-2 .3 . In t roducc ion ;

L 2 . 3 . 1 . s i g u e 2 ;

- 2 . 4 . Menu;

-2.5. Amenu; VAR iI, iJ: INTEGER;

-2 .6 . crear;

i , GrX, renglon: INTEGER; : CHAR; : STRING;

2 . 6 . l . Get-f i les;

dirfiles= ARRAY[1..2001 OF STRINGr131; VAR 149

filespec: STRING; b:, i : INTEGER; : dir-f i les;

2.6. 1. 1. dirlist ( mask-i n : STRING; VAR name-1 ist : dirfiles; VAR f i le-counter: INTEGER) ;

VAR i : BYTE; regs : REG I STERS ; DTAseg , DTAof s : WORD ; Fi 1 ename : STRING[ZOI ;

-2.6.2. ejemplo;

VAR i : INTEGER;

2.6.2.2. mensaje;

-2.6.3. sigue2;

-2.6.4. Cabeza-Tabla3; VAR

i : INTEGER;

-2.6.5. datosqozo-i (renglon, i : INTEGER; VAR GrX: INTEGER; VAR archA: TEXT);

GrY, MIX, MiY, valor: INTEGER; Sex, SeY, Al, NF, El: REAL; SigX, SigY: CHAR;

2.6.5. 1.Valida (valor, renglon: INTEGER; VAR GrX, GrY, Mix, WiY: Integer; VAR Sex, SeY, Al, NF, El: REAL; VAR SigX, SigY: CHAR);

VAR cadena: STRING[SI; entero, codigo: INTEGER; numreal: REAL;

-2.6.6. cambiarqantalla-1 (GrX: INTEGER; VAR renglon: INTEGER);

VAR i : INTEGER;

-2.6.7.arreglos-de-trabajo (VAR archA: TEXT; VAR gradosX, minutX, grados'l,

m i n u t Y: arInt;

"*

150

1 VAR segundx, segundY, long, lat, topo, frea, Estl: alf; VAR signox, signoY: arStr);

VAR i : INTEGER;

2.6.8. sigue2;

-2.7. leer; VAR :~~ i , m, renglon: INTEGER; carent : CHAR;

: STRING;

2.7. l. getf i les;

dir-files= ARRAY[1..2001 OF STRINGI131;

filespec: STRING; : dir-files; : INTEGER;

2.7. 1.l.dirlist ( mask-i n : STRING; VAR name-list : dirfiles; VAR f i 1 e-counter : INTEGER) ;

VAR 1 : BYTE; regs : REG I STERS ; DTAseg , DTAof S : WORD; Fi 1 ename : STRING[201;

-2.7.2. Musi (T, S : INTEGER);

-2.7.3. Cabeza-Tabla3; VAR

1: INTEGER;

-2.7.4. Mostrar-Tabla1 ( i : INTEGER; gradosX, minutX, gradosY, minutY: arInt; segundX,

se g u ndY, topo, frea, Estl: alf; signox, signoY: arStr; VAR renglon: INTEGER);

2.7.4.1. sigue2;

2.7.4.2. Cabeza-Tabla3; VAR

i : INTEGER;

2.8. anexar ;

i , GrX, renglon: INTEGER; respuesta : CHAR; files : STRING;

getf iles; I TYPE 1 5 1

dir-files= ARRAY[1..2001 OF STRINGr131; VAR filespec: STRING; df : dir-files; fc,i : INTEGER;

-2.8.1.l.dirlist ( mask-i n : STRING; VAR name-1 ist : dir-f i les; VAR f i le-counter: INTEGER) ;

VAR i : BYTE; regs : REG I STERS ; DTAseg , DTAof S : WORD ; Fi 1 ename : STRING[BOI ;

2.8.2. Musi (T, S: INTEGER);

2 . 8 . 3. Ver * (ejemplo, sigue2, .. ., arreglos de trabajo, sigue21

-2.9. Musi (T, S: INTEGER);

1 5 2

UNIT Superfic; CONST sB= 10; S= 12; TIS= 12; Tit= 12; Le= 24;

TYPE matriz3= ARRAY [l..Tis,l..SI OF REAL; elf= ARRAY[1..4] OF REAL;

VAR Amap2: matriz3; sale: TEXT;

3 . Plot-surf marca: BOOLEAN; Xmax, Ymax, IH, IW, Espa, vgoints, ugoints,

I

cont2: INTEGER; dX1, dX2, Xlmin, X2max, zmax, zmin, REAL; VAR Amap2: matriz3); :YPE matrizl= ARRAY [O..(Tis-l),O..(S-l)l OF REAL; matriz2= ARRAY [O..sB,O..sBI OF REAL; vectorl= ARRAY [O..(S-l)l OF REAL; vector2= ARRAY [O..(S+Tis-l)I OF REAL; vector 3 = ARRAY [O.. (Tis-111 OF REAL; vector4= ARRAY [O..sBI OF REAL; IAR degree , degree-u, degree-v, npoints, ugointsl, contl, INTEGER ; t, u, v, delt, delt-u, deltp, aux, minim: REAL; bx, by, bz: matrizl; polnts - x , poi nts3, poi nts-z , XBezsinAjuste, ZBezsinAJuste: matriz2; coeff: vector2; aux-x, auxq., aux-z: vector3; points: vector4; orilla2: elf;

-3. l . Lectura-de-Amap (IH, I W : INTEGER; VAR sale: .TEXT; VAR amap2: matriz3; elf ;

VAR i f J : INTEGER;

-3.2. Ini-ceros (VAR d e g ree, degree-u, degree-v, npoints, ugointsl, VAR t , u, v, delt, delt-u, delt-v, aux: REAL; VAR matr i z l ; VAR coeff: vector2; VAR aux-x, auxy, aux-z: points-x, pointsq., points-z: matriz2; VAR points: vector4);

VAR i , J : INTEGER;

-3.3. D a t o s q l o t (IH, I U : INTEGER; DX1, DX2, Xlmin, X2max: REAL; Amap2: bx, by, bz: matrizl; VAR degree-u, degree-v: INTEGER);

VAR 1 , J : INTEGER;

k, Formato:

exceso, i v:

YBezsinAjuste,

VAR orilla2:

iv: INTEGER; bx, by, bz: vector3; VAR

matriz3; VAR

153

r 3.4. CalcMin (IH, IW: INTEGER; Amap2: mat r iz3 ; VAR minim: REAL); VAR

i , J : INTEGER;

-3.5. Puntos-de-control-de-la-curva-v V , aux: REAL; degree, degree-u, degree-v: INTEGER; bx, by, bz:

matrizl; VAR c o e f f : v e c t o r 2 ; VAR aux-x, auxJ, aux-z: v e c t o r 3 ) ;

i , J : INTEGER; ar ray-x , a r rayqr , a r ray-z : vec tor l ;

(VAR a r r a y - x , a r r d y 2 , a r r a y - z : v e c t o r l ) ;

i : INTEGER;

L 3 . 5 . 2 . Ungunto-deBezier-del-renglon-i ( c o e f f : vec tor2 ; a r ray-x , a r ray_y, a r ray-z : v e c t o r l ; i , d e g r e e ,

d e g ree - Y: INTEGER; t , aux,v: REAL; VAR aux-x, auxq. , aux-2:

vec tor31 ; VAR m: INTEGER;

-3.5.2. 1. Adaptacion-de-Hornbez ( m : ? N TEGER; degree-v: INTEGER; v: REAL; array-x, arrayq. ,

a r r a y -2: v e c t o r l ; VAR degree: INTEGER; VAR t : REAL; VAR c o e f f :

v e c t o r 2 ) ; VAR

1: INTEGER;

L 3 . 5 . 2 . 2 . Hor,nbez (degree : INTEGER; coe f f : vec to r2 ; t : REAL;VAR aux: REAL); VAR

n-choose-i , i : INTEGER; t l , f a c t : REAL;

-3.6, Puntos-de-Bezier-de-la-curva-v (aux- x , auxq. , aux-z: vec to r3 ; coe f f : vec to r2 ; po in t s : vec to r4 ;

degr e e , d e g r e e - u , n p o i n t s , u g o i n t s , i v , c o n t l , Espa: INTEGER; t , u , d e 1 t , delt-u, aux, minim: REAL; VAR points-x, p o i n t s ~ , points-2: matriz2; VAR exceso: INTEGER) ;

VAR m, i , J : INTEGER; u a r r e g l o : v e c t o r 4 ;

-3 .6 .1 . Adaptacion-de-bez-toqoints ( m , d e g r e e-u, u g o i n t s : INTEGER; u, de l t -u : REAL; aux-x, auxq. ,

a u x - z : v e c t o r 3 ; VAR degree , npoin ts : INTEGER; VAR t , d e l t : REAL; VAR c o e f f : v e c t o r 2 ) ;

VAR 1 : INTEGER;

-3.6.2. bez"toqoints (Es p a , c o n t l : INTEGER; minim: REAL; VAR degree , npo in t s , exceso : IN T E G E R; VAR coe f f : vec to r2 ; VAR p o i n t s : v e c t o r 4 ; VAR d e l t : REAL; VAR u a r r e g l o : v e c t o r 4 ) ; 154

VAR i : INTEGER; t , aux: REAL;

-3.6.2. l. Hornbez (degree: INTEGER; coeff: VAR

-3 a

vector2; t : REAL; VAR aux: REAL) ;

n-choose-i , i : INTEGER; tl, fact: REAL;

6.2.2. Ajustnivel : E S p a , i , contl, degree, npoints: INTEGER; minim, t, delt:

R EA L ; coeff: vector2; VAR exceso: INTEGER; VAR aux: REAL; VAR uarreglo: vector4); :ONST epsilon= 0.0001; IAR NumCurva, J : INTEGER; tinicial, Zinicial, 2 , t2, 22, t3, 23: REAL; exi to : BOOLEAN;

-3.6.2.2.1. Conservar-Valores-Iniciales_tinicial-2inicial (t, aux: REAL; VAR tinicial, zinicial: REAL);

-3.6.2.2.2. Numeros-Curva-Vecinos-de-Z (minim, 2: REAL; Espa: INTEGER; VAR NumCurva: INTEGER);

sena 1 : BOOLEAN ;

1. NumCurvaMinimo (Espa: INTEGER; minim: REAL; VAR NumCurva: INTEGER);

-3.6.2.2.2. 1. 1. EspalO (minim: REAL; VAR NumCurva: INTEGER); VAR dux: REAL;

-3.6.2.2.2. l. 2. Espa5O (minim: REAL; VAR NumCurva: INTEGER); VAR auxl: REAL; aux2: INTEGER;

-3.6.2.2.2. 1.3. EspalOO (minim: REAL; VAR NunCurva: INTEGER); VAR aux: REAL;

-3.6.2.2.2. l. 4. EspaSOO (minim: REAL; VAR NumCurva: INTEGER); VAR auxl : REAL; aux2: INTEGER;

-3.6.2.2.3. Vecino-mas-Cercano-de-2 (2: REAL; VAR NumCurva: INTEGER);

-3.6.2.2.4. t-mas-sal to-o-t.-menos-sal to 155

( de 1 t, Zi n i cia1 : REAL; degree, NumCurva: INTEGER; coeff: vector2; VAR 2: REAL; VAR exito: BOOLEAN; VAR t, aux: REAL) ; 'AR p: INTEGER; salto, alto: REAL;

-3.6.2.2.4. 1. Hornbez (degree: INTEGER; coeff: vector2; t: REAL; VAR aux: REAL); VAR n-choose-i , i : INTEGER; tl, fact: REAL;

-3.6.2.2.4.2.Opcion-A I (delt, salto, alto: REAL; degree, NumCurva:INTEGER; coeff: PAL); vec t o r 2 ; VAR Z: REAL; VAR exito: BOOLEAN; VAR t, aux:

3.6.2.2.4.2. 1. Hornbez (de g r e e : IN T EGER; coeff: vector2; t: REAL; VAR aux: REAL 1 ;

VAR n-choose-i , i : INTEGER; tl, fact: REAL;

-3.6.2.2.4.3.0pcion-B

1 I ( del t , S alto, alto: REAL; degree, NumCurva:INTEGER; coeff:

v ec t o r 2 ; VAR Z: REAL; VAR exito: BOOLEAN; VAR t, aux: REAL) ;

3.6.2.2.4.3. l. Hornbez (degree: INTEGER; coeff: vector2; t: REAL; VAR aux: REAL); VAR n-choose-i, i : INTEGER; tl, fact: REAL;

-3.6.2.2.5. Busca-t-Zqara-interpolar (t, aux, tinicial, Zinicial, Z: REAL; NumCurva, j: INTEGER; VAR t2, 22, t3, 23: REAL);

21: REAL;

3.6.2.2.5.1. Hallar-segunda-t-Zqara_interpolar ( Z 1 , t 2 , 22, t 3, 23: REAL; NumCurva: INTEGER; VAR t, 2:

REAL ; VAR sena1 : BOOLEAN;

-3.6.2.2.6. FUNCTION P (2: INTEGER; t2, 22, t3, 23: REAL): REAL;

-3.6.2.2.7. Hornbez (degree: INTEGER; coeff: vector2; t: REAL; VAR aux: REAL); VAR n-choose-i , i : INTEGER; tl, fact: REAL;

3.6.3. Ajustar-XY (up0 i nts, m, degree, iv: INTEGER; coeff: vector2; t, dux: REAL; uarreglo: vector4; VAR points-x, points>: matriz2); 156

1 J: INTEGER;

3.6.3.1. Hornbez (degree: INTEGER; coeff: vector2; t: REAL; VAR aux: REAL);

VAR n-choose-i , i : INTEGER; tl, fact: REAL;

-3.7. Almacenar-en-3-arreglos (contl, ugoints, vqoints: INTEGER; points-x, points~, points-z: matriz 2 ; VAR XBezsinAJuste, YBezsinAJuste, ZBezsinAJuste: matr 122) ;

VAR 1, J: INTEGER;

-3.8. Most rarqunt os (points-x, points~, points-z: matriz2; Xmax, Ymax, uqoints, vgoints, exceso: INTEGER; k, formato: REAL; orilla2: elf);

VAR 1, J : INTEGER;

-3.8.1. FUNCTION hl (x, k: REAL; orilla2: elf; Xmax: INTEGER): REAL; VAR x1 : REAL; x2: REAL;

-3.8.2. FUNCTION h2 (y, k, Formato: REAL; orillal: elf; Ymax: INTEGER): REAL; VAR yl: REAL; y2: REAL;

-3.8.3. Poner-al turas

.~AR

( p oints-x, p o ints_y, points-z: matriz2; 1, J, Xmax, Ymax: INTEGER; k, formato: REAL; orilla2: elf);

band, altura: STRING[GI ;

3.8.3.1. FUNCTION hl (x, k: REAL; orilla2: elf; Xmax: INTEGER): REAL;

x1 : REAL; x2: REAL;

3.8.3.2. FUNCTION h2 (y, k, Formato: REAL; orilla2: elf; Ymax: INTEGER): REAL; VAR yl: REAL; y2: REAL;

-3.9. SIGUE3 (marca:BOOLEAN; Ymax: INTEGER);

-3.10. dibujar3D (ugoints, vgoints, Xmax, Ymax, cont2, degree-u, degree-v:INTEGER; formato, zmax, zmin, minim: REAL; bX, by: matrizl; XBezsinAJuste, YBezsinAJuste, ZBezsinAjuste: matriz2; marca: BOOLEAN) ;

CONST 157

a= 10.; b= 8;

Titi= 17; base= SO; AR alfa, kl, k2, X1, X2, 21, 22, Xt, Zt: REAL; Xp, Zp: matriz2;

-3.10. l. M ~ C O (Xmax, Ymax: INTEGER);

-3.10.2. Titulo3D (cont2: INTEGER); VAR band: STRING[S81;

-3.10.3. Transperspectiva (ugoints, vgoints, Xmax, Ymax, degree-u, degreep: INTEGER; formato, zmax, zmin, minim: REAL; bX, by: matrizl; XBezsinAjuste, YBezsinAjuste, ZBezsinAjuste: matriz2; VAR alfa, kl, k2, X1, X2, 21, 22, Xt, Zt: REAL; VAR Xp, Zp: matriz2);

f i R

b

i , j: INTEGER; zmaxi, zmini: REAL;

3.10.3.1. FUNCTION Tx (X, Y, alfa, kl, X1, Xt: REAL; Xmax: INTEGER): REAL;

3.10.3.2. FUNCTION Tz (2, Y, alfa, formato, k2, Z1, Zt: REAL; Ymax: INTEGER): REAL;

-3. 10.4. Traza-malla (ugoints, vgoints: INTEGER; Xp, Zp: matriz2); VAR

i , j : INTEGER;

-3.10.5. Poner-base (XBezsinAjuste, YBezsinAjuste, ZBezsinAjuste: matriz2; alfa, kl, k2, formato, X1, Xt, 21, Zt: REAL; Xmax, Ymax: INTEGER);

X3, 23, X4, 2 4 , XS, 2 5 , X6, 26: INTEGER;

(X, Y, alfa, kl, X1, Xt: REAL; Xmax: INTEGER): REAL;

(2, Y, alfa, formato, k2, 21, Z t : REAL; Ymax: INTEGER): REAL;

-3. 10.6. SIGUE3 (marca: BOOLEAN; Ymax: INTEGER) ;

Resultados by, b2:

e s o , Ymax: z sinAjuste,

matrizl; degree-u, deqreep, INTEGER; delt-u, deltp: ZBezsinAjuste, PO i nts-X,

uqoints, vgoints, REAL; XBezsinAjuste, poi nts-Y, poi nts-2:

158

I matriz2; marca: BOOLEAN);

VAR renglon, i, j, cntrlren, cntrlcol: INTEGER;

-3.ll.l.Condicion (d e gree - u, degreep, ugoints, vgoints: INTEGER; VAR cntrlren, cntrlcol: INTEGER) ;

-3.1 l. 2. Cabeza-Tabla;

[:AR

i : INTEGER;

3.11.2.1. linea-corta ( i : INTEGER) ;

j : INTEGER;

3.11.2.2. linea-larga ( i : INTEGER) ; VAR

j : INTEGER;

-3.11.3. Escribirquntos-de-control (i, j, renglon: INTEGER; bx, by, bz: matrizl);

-3.11.4. Escribirquntos-deBezier-sin-ajuste ( i , J 9 renglon: INTEGER; XBezsinAjuste, YBezsinAjuste, ZBezsinAjuste: matriz2);

-3.11.5. Escribirquntos-deBezier-ajustados ( 1 , j, r englon, exceso: INTEGER; points-x, p o i n t s ~ , points-2: matriz2) ;

-3.11.6. Cambiar_pantalla-si-es-necesario

1’ 3.11.6.2. Cabeza-Tabla;

11 AR

j, c ntrlren, cntrlcol, Ymax: INTEGER; VAR renglon: INTEGER; marca: BOOLEAN) ;

3. 11.6. 1.SIGUE3 (marca: BOOLEAN; Ymax: INTEGER) ;

i : INTEGER;

3.11.6.2.1. linea-corta ( i : INTEGER) ;

j : I NTEGER ;

3.11.6.2.2. linea-larga ( i : INTEGER) ; VAR j : INTEGER ;

-3.12. SIGUE3 (marca: BOOLEAN; Ymax: INTEGER) ;

159

ANEXO 1 .

PROGRAMA Curva de Bézier XY.

Pseudoc6digo. - Este programa para la creaci6n de curvas de Bézier en dos

dimensiones está basado en las rutinas "bez-togoints" y "hornbez" del

libro de Farin (ver paginas 32 y 47 de este escrito) pero no sólamente reporta los puntos de la curva hallados por estas rutinas sino que

tiene un procedimiento o rutina de ajuste el cual consiste en buscar

para cada punto encontrado por las dos rutinas de Farin un punto

cercano, si lo hay, cuya coordenada Y sea un número entero y no un

número con decimales.

Originalmente, las rutinas de Farin encuentran las coordenadas X y Y de cada punto mediante cálculos con el valor de un parámetro t. Para hallar cierto número de puntos, se dan igual número de valores a

t entre O y 1 y los valores de t son igualmente espaciados. Esto se

logra haciendo primeramente los cálculos para las coordenadas Y y en segundo lugar los cálculos para las coordenadas X.

El programa Curva de Bézier XY hace una tercera y una cuarta

series de cálculos empleando ahora en ellos la rutina de ajuste. En la

tercera, la rutina de ajuste lee el valor Y de cada punto encontrado durante las series de cfilculos primera y segunda y si no es entero,

busca cerca del punto, sobre la curva, un valor entero de Y. Si existe el entero, entonces modifica a t y se obtiene un nuevo valor Y. Si este último aún no es un entero, entonces se usa la interpolacibn

lineal inversa repetidas veces hasta que el valor de Y sea entero. Si la rutina detecta desde el inicio que no hay cercano al punto inicial

un valor entero de Y, entonces no reporta nada y sigue con el

siguiente punto encontrado por las rutinas de Farin. Durante la cuarta

serie de cálculos, cada valor encontrado de t se usa para calcular la

coordenada X. Como datos entran "degree + 1 " vértices Pi(Xi, Yi) de un polígono

de control, Dando valores a t entre cero y uno, incluyendo estos dos,

se encuentran "npoints + 1" puntos ?i (xi,Yi) de la curva de Bézier.

El programa original de Farin da "npoints + 1" valores igualmente

espaciados a t. Y se obtienen valores de Yi con punto decimal. Se

desea obtener valores enteros de Yi. ¿Cómo hacerlo?

1- 1

Para resolverlo se creó el procedimiento

"Ajustes-Para-que-Y-sea-NÚmero-Curva_depl", el cuál modifica a

cada valor Yi hasta que se convierta en casi un entero. Sean enteros

los números de curva de nivel. Con un ejemplo se mostrará como hace su

funci6n la rutina de ajuste y después del ejemplo se mostrara el

pseudoc6digo de ella.

Ejemplo:

Con un valor de t= 0.231 se calcul6 el punto (5.432, 2.281). Y= 2.281 está m& próxima a 2 que a 3.

Se dá un valor h pequeño y se resta a t. t= 0.231 - 0.005= 0.226.

Se calcula la Y del punto correspondiente a esa t. Supóngase que da Y= l. 21. Resumiendo:

0.231 1 2.281

O. 226 1.21

Con interpolación lineal inversa se encuentra el valor de t que asegure que Y= 2.

([Y=2l-Y3) ([Y=2l-Y2) t= P(Y=2)= t2 + t3

(Y2-Y3 (Y3-YZ ) . . . (1)

Así se encuentra un valor t. Ese se mete al procedimiento

Hornbez. Se obtiene un valor casi cercano a 2, Supóngase que se

obtiene t= 0.2283, Y= 2.05. VCase la siguiente tabla:

O. 231 2.281 O. 2283 O. 226

Se escogen de la tabla dos parejas de valores (t,Y) para hacer la interpolación. ¿Cuáles? Los que limiten al punto Y= 2.

1- 2

" O. 226

Se aplica de nuevo la ecuacion ( 1 1 con las dos parejas (t, Y) de la tabla anterior y con Y= 2, y se obtiene un nuevo valor de t. Luego

se mete este último al procedimiento Hornbez. Supóngase que queda t= 0.2731, y= 2.008.

Se escogen dos nuevas parejas de valores, ¿cuáles? Los que

1 imiten al va1.or Y= 2. N6tese que una pareja es siempre la (t, Y) que result6 de la interpolación y Hornbez; y la otra se escoge entre

(t2,Yz) y (ta,Y3) que fueron manejados en esa misma interpolación. Etcétera, hasta que el valor de Y calculado dé

(~-21 5 EPSILON 0.001).

l. 1 Pseudoc6digo del procedimiento "Ajustesgara-que. . . ' l . - El siguiente es el esquema general:

COMIENZA

SI (se está calculando coordenadas Y) ENTONCES

-Local izar a Y entre dos valores consecutivos dentro de O, 1, 2, . . . , (L=16).

-¿Y está más cerca del número de curva "inmediato superior" o del

"inmediato inferior"?

-SI ]Y- número de curva mas cercanol>e ENTONCES hacer lo siguiente: -¿(t+h) o (t-h)? (se busca aproximadamente si el número de

curva más cercano a Y está en el espacio comprendido desde

poco antes de Y a poco después de Y sobre la curva. Si está, es éxito, si no está, es no éxito alrededor del punto(X,Y). En

caso de éxito, la aproximación del número de curva más cercano

es aux.

-SI (éxito alrededor de X, Y) ENTONCES {se buscará más

precisamente la localización del número de curva más cercano a

Y): -Y: = aux

1- 3

-MIENTRAS IY-nGmero de curva mas cercano/>& HAZ 1)~cuales dos parejas (t2, Yz), (t3, Y3) se usarán para

interpolar?

2 )

(Y-Y3 1 (Y-Y2 1 t: =P(Y= mas proximo )=

numero de c u r v a t2 + t3

(Y2-Y3 ) (Y3-Y2 3 1 Hornbez

-Guardar el valor de t con el que se encontró la

aproximaci6n Y del número de curva más cercano. OTRO {comunicar al procedimiento bez-togoints que no se

reporte punto de la curva de Bézier.)

SI (se estan calculando coordenadas X) ENTONCES -Usar el valor de "t ajustado" para calcular a "X ajustado" que estar& en la variable aux.

TERM1 NA.

Enseguida, los procedimientos contenidos en "Ajuste_para-que . . . ' l .

Algunos tienen una explicación mas amplia.

1.1.1 PROCEDIMIENTO Localizar a Y entre dos valores consecutivos de O , 1, 2 , . . . , (L= 16).

-señal : = FALSA -Num: = O

-REP I TE SI (YSNum) ENTONCES señal : = VERDADERA

Num: = Num+l

HASTA (señal sea verdadera)

1. l. 2 PROCEDIMIENTO ¿Y esta más cerca del número de curva "inmediato

superior" o del "inmediato inferior"?

-Comparar cuál distancia es menor

(Num-Y) o (Y-[Num-ll) -Al número de curva cuya distancia a Y sea menor se le renombra como Num.

1- 4

1.1.3 PROCEDIMIENTO L(t+h) O (t-h)?

El intervalo del parametro t que originalmente dB el procedimiento Bez-toqoints (por cada t calcula un punto) es delt= l/(npoints). Aquí

se revisara si en el espacio de delt/2 atras del valor t de un punto o en el espacio de delt/2 adelante de 61 se puede encontrar otro punto

cuya coordenada Y sea un número curva. Se revisan un número de p ( 1 )

posiciones en esos espacios con ayuda del procedimiento Hornbez. No se

encuentra exactamente al punto sino a una aproximación de su posición.

La localización exacta se realiza en otros procedimientos

pertenecientes a "Ajustesgara-que. . . ' I . La revisión puede resultar en

Cxito o en no &xito para el punto dado, lo que significa que cerca de

ese punto se encontró o no al número curva.

r - L del t

del t 1 0 saltos I / I ......... ! d

l I - I - I - I - I - I .. .

O 0 . 2 6 0 . 3 0 . 4 9 0.6 0 . 0 3 1 valores de t

I > Figura 2 1 . En sombreado se muestra la zona alrededor del punto 2 en la que- se busca al número curva. La zona corresponde a valores de t entre ( 0 . 3 + delt) y (0.3 - delt). El número de saltos es p=10 y

-

salto=delt/p.

1.1.4 PROCEDIMIENTO ¿Cuales dos parejas. . . ?

Una de las parejas (t , Y ) que se usará para la fórmula de

interpolación es siempre la formada por los valores t y Y que existen inmediatamente antes de entrar al procedimiento "LcuBles dos

parejas.. . ? " . En la primera vez que se usa el ciclo WHILE, esa primer pareja es: (t?h,Y). En las siguientes veces que se usa el ciclo, la

"""""_"""""""""""""""""""""""""""""~ (')Se tomÓ arbitrariamente p= 10. Para un segmento de curva que tenga muchas tortuosidades, a lo mejor el valor 10 ser& muy pequeño (ver limitaciones del programa).

1- 5

pareja es: (tinterpolada,Y). ¿Cual es la otra pareja?

Para el caso en el que se usa por primera vez el ciclo WHILE, la otra pareja es (tinicial, Yinicial). Pero como a esta altura del

programa esos valores ya se borraron, entonces se debe poner algún

procedimiento que los conserve y así se podrán usar en este momento. Por tanto, al principio del procedimiento "Ajustesgara-que . . . " se puede poner el siguiente:

1.1.4.1 PROCEDIMIENTO Conservar valores iniciales

COMIENZA

-t inicial : = t

-Yinicial: = aux

TERMI NA

Entonces, la primera vez del ciclo WHILE no se necesita averiguar

cual es la otra pareja. En las demas veces sí.

En resumen, este procedimiento queda como sigue:

1.1.4.2 (PROCEDIMIENTO ¿Cuáles dos parejas (t2,Y2), (t3, Y3) se

usaran para interpolar?)

COMIENZA

-t1:= t -Y1 : = aux

S I (i=l) {i= número de iteración) ENTONCES

(t2,Y2):= (t1,Yl)

(t3, Y3): = (to, Yo) ELSE {las otras iteraciones) Averiguacih

(tz,Y2):= (t1,Yl) (t3,Y3):= (t,Y)

TERMI NA

1.1.4.2.1 PROCEDIMIENTO Averiguación

Los valores que intervienen en la fórmula de interpolación son:

1- 6

aux= Y t2 Y2

o bien (no se sabe):

aux=Y t3 Y3

Cualquiera de las dos tablas anteriores puede ser en algún momento,

correcta. El orden no se puede predecir. Dentro de la tabla que

resulte correcta existe intercalado el valor NumCurva. Hay que

averiguar si est& entre Y y Y2 o entre Y y Y3. En resumen, este procedimiento queda como sigue:

(PROCEDIMIENTO Averiguación)

COMIENZA

S I Num est& dentro del intervalo [Y1,Yzl o [Yz,Y11 ENTONCES Y:= Y2 t:= t2 señal : = VERDADERA

OTRO

señal : = FALSA -SI Num está dentro del intervalo [YI, Y31 o [Y3, Y1 I ENTONCES

Y:= Y3 t:= t3

señal : = VERDADERA OTRO

señal : = FALSA -SI (señal es FALSA) ENTONCES

ESCRIBE (ERROR: En el procedimiento "Cuáles dos parejas. . . " está

el procedimiento "averiguaci6n". Allí sucedi6 que Num no est& en l o s intervalos de estudio).

1- 7

1.2 Pseudocódigo del procedimiento "Almacenar en 6 arreglos".-

Las rutinas de Farin tienen dos arreglos, uno para alguna coordenada de puntos de contro 1 y otro para alguna coordenada de puntos de

Bkzier. La primera vez son usados para coordenadas Y y la segunda para

coordenadas X. El programa Curva-deBezier-XY los usa dos veces más

porque calcula tambiCn puntos de B6zier ajustados. El programa se

corre cuatro veces y los arreglos borran su contenido vez con vez.

Para presentar resultados en tabla y gráfica se querían usar los dos

únicos arreglos vaciando sus contenidos en la tabla y en la grBfica

cada vez que se usaran. Esto sería una labor muy compleja cuando el

número de valores fuera mayor que el que cupiera en una pantalla de

computadora, entonces se pensó en dos opciones, 1) enviar a un archivo

los valores de los arreglos antes de cambiar sus contenidos y 2 ) crear

seis arreglos auxiliares para almacenar la información. Se escogió la

ultima opción y se usaron nombres que sugerían el contenido de los

arreglos. En la primera vez que se hacen cálculos, se llenan los

arreglos Xcontrol y YBezSinAjuste; en la segunda vez se llenan los

arreglos Xcontroi y XBezSinAjuste; en la tercera vez se llena el

arreglo YBezAjuste. En la cuarta se llena XBezAjuste.

El programa quiere encontrar un punto ajustado cercano a cada punto

no ajustado. Pero algunos puntos no ajustados no son hallados y se

pone una marca en esa posición faltante en el arreglo YBezSinAjuste.

Esa marca es un número exageradamente grande que es exceso= 26000.

Esos puntos son borrados de los arreglos con el siguiente:

1.2.1 PROCEDIMIENTO Eliminar puntos no calculados.

-Revisar YBezSinAjuste y localizar la(s) posicion(es) que tengan

Y=exceso.

-Memorizar esas posiciones

-SI hubo posiciones ENTONCES

posición:= primera posición encontrada

REP I TE Borra esa posición de los arreglos YBezSinAjuste, XBezSinAjuste

y Tarreglo, y recorre el resto de los elementos del arreglo para tapar el hueco.

posición:= siguiente posición encontrada

1- a

HASTA (haberlo hecho con todas las posiciones).

El programa Curva de Bézier XY muestra en forma de tabla y en forma grafica al poligono de control y a la curva de Bézier. Esta

última con los puntos de Bézier según l o s calcularían las rutinas

originales de Farin y con l o s puntos cuyas Y están ajustadas a

enteros. Enseguida se escriben los pseudocódigos que hacen ésto.

1.3 Pseudocódigo del Procedimiento Mostrar Tabla.-

Es deseable tener una sola tabla que contenga: a)X de los puntos de control, b)Y de los puntos de control, c)X de los puntos sin ajustar

de Bézier, d)Y de los puntos sin ajustar de Bézier, d)X de los puntos

ajustados de Bézier, f)Y de l o s puntos ajustados de Bézier. Todos l o s

valores se leen de los arreglos de almacenamiento. La tabla se

presentara en el número necesario de pantallas; es decir, cuando el

número de puntos calculados exceda el número que puede ser mostrado en

pantalla, debe continuarse la exhibición de los puntos restantes en la

siguiente pantalla, para lo cuál debe mandarse al usuario (en el

ultimo renglón) el mensaje de teclear el boton ENTER. Si vuelve a

suceder que los puntos calculados no han terminado de exhibirse en la

segunda pantalla, debe de nuevo mandarse el mismo mensaje y continuar

en la siguiente pantalla la exhibición de puntos y así se seguirá

haciendo hasta que se terminen de exhibir l o s puntos. Al final

aparecer& el mismo mensaje pero después el programa continuará con su

siguiente paso. Cada pantalla con datos debe mostrar el encabezado de

la tabla.

1.4 Pseudocódigo del Procedimiento Mostrar GrBfica.-

Se muestra en pantalla la gráfica de: alel polígono de control,

b)los puntos de Bézier sin ajustar y c)los puntos de Bézier

ajustados. Incluye lo siguiente:

-1nicializar el modo gráfico en Pascal.

-RectBngulo (ver figura 2 2 1 de la gráfica en la pantalla dejando sólo el lugar suficiente para escribir: el título, la leyenda con

la simbología usada, la numeración del eje Y y la del eje X. -Poner la leyenda (con la simbología) y el título.

-Hallar YmBxima y Yminima.

1- 9

-Hallar Xmáxima y Xmínima. -Dibujar numeraci6n de eje Y. -Dibujar numeraci6n de eje X. draficar polígono de Control.

draficar puntos sin ajustar de Bkzier.

4raficar puntos ajustados de Bézier.

-Trazo curva de Bézier.

(27,20) Crafica del poligono de control y su cur- va de Bezier con puntos con y sin ajustar.

5t

! 2

1 +

<

0 1 2 3 4 5 x 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 + Puntos de control.

+-+ Poligono de control. o Puntos sin ajustar de la curva de Bezier.

Puntos ajustados a enteros de la curva de Bezier

: - r e c tangul o

t( xmax-2,ymax-73)

Figura 2 2 . Aspecto de la gráfica mostrada en pantalla. El rectángulo se dibuja en la pantalla indicando las (X,Y) de dos esquinas opuestas donde los valores X,Y se pensaron para dejar espacios en los que se

anotarían el resto de los aspectos de la gráfica (título, leyenda y numeración de eles).

Algunas partes del pseudocódigo de Mostrar Gráfica requieren de

mayor explicacibn:

l. 4. 1 PROCEDIMIENTO Numeracibn de eje Y. - Se quiere numerar el eje Y con números enteros, de uno en uno,

indicando su posición con rayitas y además ponerle una Y mayascula. Hay dos aspectos importantes que comentar:

1-10

1)LCuBl es el entero menor y cual el mayor? Primero se necesita un

procedimiento que calcule tanto el valor maxim0 como el valor mínimo

del conjunto de las Y de los puntos de control (no del conjunto de las Y de los puntos de BCzier porque hay una propiedad de las curvas de B6zier (la propiedad de cavidad convexa o convex hull describe que la

curva de Bézier de un polígono de control queda necesariamente

contenida en el &rea que encerraría una cuerda tensa que envolviera al

polígono) de la que se deduce que el polígono de control tiene su valor Y minimo menor o igual al de Y mínimo de la curva de Bézier y

tiene su valor Y mhimo mayor o igual al de Y maxim0 de la curva de Bkzier). Esos dos valores muy probablemente serBn con decimales y no

enteros. Se proponen los siguientes:

entero menor: = ROUND(Ymínimo)-1

entero mayor:= ROUND(ymáximo)+l

Se ha puesto el número UNO porque la operación de redondeo a veces

produce un número inferior o a veces superior al que se redondea y con el UNO se asegura que las figuras no rebacen la numeraci6n ni por arriba ni por abajo. El c&lculo del valor Yentero menor y del valor Yentero mayor, lo mismo que el cálculo de los enteros correspondientes

de X se hace en los procedimientos "hallar Y mCaxima y Y mínima" y "Hallar X maxima y X mínima". 2)¿C6mo poner en pantalla la posici6n exacta de cada entero en el

eje?

Se emplea la misma funcion f2 que transforma la coordenada Y de cualquier punto del polígono o de la curva en una coordenada Y de pantalla. En esencia f2 usa una "regla de tres" entre distancias:

entero - entero mayor me nor

valor Y del lado valor Y del lado + superior del - inferior del

rectangulo rectángulo

valor Y en el que valor Y del lado -+ debe quedar - inferior del

el entero recthngulo cualquier! - entero entero menor

1-11

entero - entero 20 - mayor menor 1 Ymax-67 I 3

- -

Iy - entero f2 - menor 3 I Ymax-67 1

e n t e r o * m e n o r

Y - 2 0 - [ Y m a x - 6 7 1

Entonces: f2(y)= + [ Y m a x - 6 7 1 e n t e r o e n t e r o

m a y o r m e n o r -

20 = ( # renglones para título=T=2)*(altura del caracter=Al=lO). 67 = ( # renglones para leyenda=R=4)*(altura del caracter=Al=lO)+

( # cifras del entero mayor=Lx=3)*(ancho del caracter=An=8)+ (2 pixeles para la raya pequeña=2)+ ( 1 pixel entre raya y caracter=l).

Se escriben l os enteros y sus rayitas desde el "entero mayor

hasta el "entero menor", de uno en uno, ubicando su posici6n en

pantalla con la funci6n fy. No se escribe el entero mayor, pero sí su

raya pequeña porque ese espacio se deja para escribir Y mayúscula.

1.4.2 PROCEDIMIENTO Numeración eje X. Es similar al del eje Y pero difiere en que l o s números se escriben

verticalmente para que no haya posibilidad de que se encímen uno con

otro: tambiCn difiere en la función fx.

entero entero Xmax-2 1 mayor menor

entero x - menor - 27

x - e n t e r o

me n o r * [ X m a x - 2 1 - 27

Entonces : f x= e n t e r o e n t e r o

m a y o r m e n o r

+ 27 -

2= (espacio entre recthngulo y puntos). 27= ( # cifras del entero mayor=Ly=3)*(ancho del caracter=An=8)+

(2 pixeles para la raya pequeña=2)+ (1 pixel entre raya pequeña y caracter=l).

1-12

1.4.3 PROCEDIMIENTO Graficar Polígono de control.

-Leer cada valor Y y cada valor X en los arreglos. -Aplicar las funciones fx y fy para que cada (X,Y) se adapte a la pantal la. -Exhibir en pantalla l o s puntos (fx,fy), mediante un símbolo

adecuado (asterisco, círculo o rectAngulo) y unirlos con un

polígono.

Resumiendo y haciendo mas claro:

-(X,Y):= (Xcontrol[Ol, Ycontrol[Ol) -(X, Y): = (fx, fy)

-PAM i:=l HASTA último HACER (a, b): = (X, Y) (X,Y):= (Xcontrol[il, Ycontrol[il) (X,Y):= (fx,fy) Poner (X,Y) no como punto sino como un asterisco LINE(a, b, X, Y ) .

1.4.4 PROCEDIMIENTO Graficar puntos sin ajustar de Bézier.

-Leer cada Y y leer cada X de l o s arreglos.

-Aplicar fx y fy.

-Exhibir cada punto (fx,fy) representado por su símbolo (asterisco,

círculo o rectángulo), SIN trazar rectas que unan los puntos.

1.4.5 PROCEDIMIENTO Graficar puntos ajustados de Bézier.

Similar a lo que se hizo con los puntos sin ajustar.

1.4.6 PROCEDIMIENTO Trazo Curva Bézier.

-Insertar en un "arreglo grande" las 1)X de puntos de Bézier sin

ajustar y 2)X de puntos de Bézier ajustados. En otro "arreglo

grande", las Y. -Ordenar los.

Los "arreglos grandes" de X y de Y recién formados que son las coordenadas (X, Y) de puntos que pertenecen TODOS a una curva de Bézier se ordenaran de acuerdo al orden ascendente de l o s valores

de un "arreglo grande" de t (t toma valores entre O y 1).

1-13

El ordenamiento en orden ascendente de un arreglo se hace asi:

l. 4.6.1 PROCEDIMIENTO Ordenar. -it j=-1

-REPEAT Pasar al siguiente elemento (i=i+l) j:= i+l (n6tese que es i+l)

REPEAT Si(e1emento i>elemento j) ENTONCES

Enrócalos j:= j+l

HASTA (revisar con el Último elemento, j>úiltimo)

HASTA(l1egar al penúltimo número, i=penúltimo)

1.4.6. 1.1 PROCEDIMIENTO Enrócalos.

-Sacar el número de la posición i y meterlo en la variable aux.

Sacar el número de la posición j y meterlo en la posición i.

-Meter el número que está en aux dentro de la posición j.

4raficar la curva de Bézier por medio de tramos de línea recta

trazados cada dos puntos.

1-14

2 Limitaciones y modificaciones más usuales en el programa Curva de

BCzier XY. 1)Los enteros de la numeración de los ejes deben ser de tres

cifras. Si se quiere poner un ejemplo con valores mayores a tres

cifras, quizas cinco, deberá cambiarse el número de la longitud del

string Ly y/o Lx a cinco.

2)El programa es para ajustar a enteros. Si se quiere cambiar a

por ejemplo: alcada 1.5 enteros, blcada 2 enteros, etc. deberá

pensarse en cómo hacerlo en los procedimientos "numeración eje Y", "numeraci6n eje X", "ajuste para que Y sea.. . I' y "Ajustar Y".

3)Se numeran los ejes desde el entero mayor hasta el entero menor

pero si se quiere que sea hasta el cero deber& modificarse "Hallar Y maxima y Y mínima" poniendo Entero Y menor: = O en el últ imo renglón para anular el cAlculo del valor mínimo. De similar manera, si se

quiere para el eje X, que la numeración empiece desde 'el cero, deberá en "Hallar X máxima y X mínima" ponerse Entero X menor:= O. (el entero menor lo calcula el procedimiento "Hallar . . . " con ROUND1.Y también debera ser revisada la presentación de la gráfica porque quizás, si el

entero X menor es un número de más de una cifra, pueda encimarse la numeraci6n del eje X con la leyenda.

4)Para curvas muy tortuosas o hasta para una curva sencilla

pudieran no detectarse algunos puntos con valor.entero en un segmento

en el que sí existe ese valor. Esto puede deberse a que en " ( t+h) o

( t - h ) " se uso un cierto valor de p posiciones pués el segmento se

revisa por posiciones puntuales y no en forma continua. El usuario

comun se dará cuenta de la inexistencia de esos puntos, así que se

recomienda analizar la curva de Bézier pidiendo un mayor número de

puntos (npoints) y así se encontrará mejor la forma de la curva. Si se hiciera, en lugar de ésto, un cambio de p para que valiera por ejemplo

15, 6 20, ó 25, lo más que con ello se lograría sería hallar un punto

de Bézier (pero si en el segmento de análisis hubieran más de un punto

de Bézier con Y=entera? entonces por muy grande que p fuera, sólamente

podría hallarse un punto porque "Ajuste para que Y ..." encuentra a el punto con Y=entera más cercano al punto encontrado en llHornbeZ1l.

5)No poner un polígono de control cuyos valores Y estén en un rango que contenga al 26 O00 porque este valor se usa en la variable exceso como indicador de que el programa no encontr6 un punto ajustado

1-15

de BCzier. Si acaso se debe hacer, entonces modificar el valor de

exceso a un valor "Extremadamente fuera de l o s posibles valores que se

esperen de Y". 6)¿C6mo modificar el número de puntos de Bézier producidos?

1.Si número S m, entonces (m es una constante general) npoints : = número (en el Procedimiento "entrada")

2 . Si número > m, entonces npoints : = número (en el Procedimiento "entrada")

m : = número

7 )No se puede lograr que Y = entero. Lo que se puede es que Y =

entero t EPSILON. Si se quiere mayor exactitud, modificar EPSILON a un

valor mAs pequeño en el Procedimiento "Ajustar Y". 8I~C6mo cambiar de ejemplo?

El ejemplo se puede modificar en el Procedimiento "entrada". Si

así se hace, deberán cambiarse también a L ( L es el entero límite

superior de las coordenadas Y de entrada) y a degree. 9)~Cbmo modificar el número de posiciones p buscadas? ver 4.

10)No hay búsqueda del vecino más cercano al primer punto de

control ni del vecino más cercano al último punto de control.

Se sabe que el programa busca atrás y adelante de un valor Y de control a aquél valor Y entero más cercano (el programa elige en caso de que ambos vecinos estCn igual de cercanos, al inmediato superior).

Con la primera versi6n del programa no se sabia qué iba a pasar cuando

el vecino elegido del último punto estuviera fuera de la curva y no

dentro de ella. Una forma fácil de salir de este problema era: no

calcular el valor Y ajustado para el último punto. ¿El costo de tomar esta salida? no se calcularía el valor de Y ajustado cercano al último punto. Una segunda posibilidad era impedir la búsqueda del valor

vecino elegido-si éste se encontrara fuera ya de la curva y en cambio

buscar dentro de la curva al otro vecino aunque no estuviera cercano

(claro que el programa, si no encontrara a este número, ya estaba

programado para no reportar nada). Se eligió la primera salida, hay

que decir que su costo posiblemente se reducirá un poco cuando se

pidan muchos puntos de Bézier porque posiblemente así se encuentre el

punto faltante. El problema ocurria también en el primer punto de

control. ¿podría haberse hecho una modificación para que en los puntos

primero y último se buscara s610 dentro de la curva? S í , adicionando 1-16

dos casos en la sección de búsqueda del entero más cercano: en el

primer caso se buscaría ese punto adelante del punto de control y en

el segundo caso se buscaría el entero atrk y no adelante del punto de

control.

1-17

Comentarios al programa Curva de BCzier XY.-

1 1 Este programa tiene una cosa de 1 icada que es e 1 paso de 1

parhetro t. En algunas subrutinas, llamémoslas primarias, va

cambiando en forma constante su valor, pero al ingresar a algunas

rutinas secundarias, que son las rutinas de interpolacion, con un

valor por ejemplo de 0.3 tiene varios cambios no constantes para

encontrar un punto ajustado de Bézier. Cuando el programa sale de las

rutinas secundarias y reingresa a las primarias, lo hace con el valor que t tenía antes de ingresar a rutinas secundarias, en el ejemplo

reingresa con el valor 0.3. Quizas se podía haber empleado una

variable diferente para t mientras está siendo usada en las rutinas

secundarias pero esta idea se presentó cuando el programa estaba muy

avanzado y además sería algo complejo porque una rutina principal, la

rutina Hornbez, tambiCn es usada mucho durante la sección secundaria y

sería dificil que esta rutina Hornbez usara dos nombres diferentes

para la misma variable.

2)Se anexaron al programa dos secciones que quizas no

formaran

parte del programa pués sólo presentan resultados parciales. Fueron

útiles para la revisi6n del programa. Ellas muestran alel número de

puntos que fueron eliminados durante el proceso de búsqueda de puntos

ajustados porque no fueron encontrados y sólo contenían valores que sirvieron de señal. bllos puntos de BCzier sin ajustar y ajustados

despuCs de haber sido incluidos todos, en forma ordenada respecto al

parametro t, dentro de los llamados arreglos grandes. Respecto a esto

último, se puede notar que algunos puntos aparecen por duplicado. No

debía ocurrir esto. No fué investigada su causa. Sin embargo, no es un

problema serio puesto que no afecta la presentación de la gráfica

porque en e 1 1 a se marcara por dupl icado e 1 punto y no se trazara una

recta que una a un punto con su duplicado.

3)Se sugiere no modificar la presentaci6n de los datos dentro de

la tabla porque así como está tiene la ventaja de que puede contener

valores desde los que tienen una cifra a la izquierda del punto

decimal hasta los que tengan tres.

1-18

P R O G R A M A C U R V A D E E E Z I E R X Y E L programa calcula la curva de Eerier correspondiente a un

poligono de contro l . Como ejemplo se incluye un poligono cuyos ver t ices se escr ib ieron como datos de entrada y se ca lcu la una curva formada de un c ie r to n !hero -da to de entrada- de puntos.

E l programa consta de cuatro llamadas. En l a primera se c a l - culan las coordenadas Y de los puntos de l a curva, en l a segun- da se calculan las coordenadas X , en la t e rce ra y cuarta llama- das se ajustan las coordenadas Y y X calculadas hasta hal lar puntos con coordenada Y casi entera, s in decimales.

E l programa acepta un m ximo de m puntos de entrada y m pun- tos de sa l i da -m es una constante general-.

E l ejemplo se puede modif icar en e l procedure 81entrada11. S i

asA se hace, deber n cambiarse tambin a L - L es e l en tero lhi- te super ior de l as coordenadas Y de entrada- y a degree.

OPRIMA LA TECLA "ENTER" !

~~ ~~~~ ~ ~ ~ ~ ~ ~ ~~~ ~~~~~~~~ ~~~ ~ ~~~~

Puntos de Control Puntos de l a Curva de Bezier Puntos ajustados de Eerier Valor de Valor de

Punto ( X , Y ) Punto Parametro t ( X , Y ) Punto Parametro t ( X , Y )

O (3.00,1.50) O 0.00 (3.00,1.50) O 0.07 (2.33,3.00) 1 (0.00,6.50) 1 0.07 (2.35,2.94) 1 0.13 (2.23,4.00) 2 (6.00,5.50) 2 0.13 (2.23,4.03) 2 0.20 (2.46,5.00) 3 (3.50,ll.OO) 3 0.20 (2.44,4.94) 3 0.29 (2.94,6.00) 4 (6.50,15.00) 4 0.27 (2.82,5.77) 4 0.37 (3.51.7.00) 5 (15.00,5.50) 5 0.33 (3.28,6.60) 5 0.44 (4.09,8.00)

6 0.40 (3.77,7.44) 6 0.52 (4.73.9.001 7 0.47 (4.28,8.31) 7 0.61 (5.58,lO.OO) 8 0.53 (4.83,9.15) 8 0.85 (9.80,lO.OO) 9 0.60 (5.47,9.90) 9 0.94 (12.52,8.00) 10 0.67 (6.27,10.46) 1 1 0.73 (7.29,10.72) 12 0.80 (8.60,10.52) 13 0.87 (10.29,9.71) 14 0.93 (12.41,8.10) 15 1.00 (15.00,5.50)

OPRIMA LA TECLA "ENTER" I

,

1-19

Programa Concluido

OPRIMA LA TECLA "ENTER" !

1-20

ANEXO 2. Observaciones para poder hacer que el programa sea útil para

representar cualquier zona de la Tierra y no sólo zonas con longitud

Oeste y latitud Norte.

El diametro de los círculos paralelos al ecuador terrestre va

disminuyendo conforme se consideran círculos mAs alejados del ecuador

y , a la vez, mAs próximos a los polos; pero el diametro del círculo

formado por un meridiano con su antimeridiano es igual para todo

meridiano terrestre.

A continuaci6n se calculara el valor en kil6metros que tiene un

arco de longitud igual a un grado y un arco de latitud tambiCn igual a

un grado.

Sean:

r= radio de la Tierra en km.

€I= ángulo expresado en grados decimales, o sea es la latitud

en grados decimal es.

Ver la figura 23.

Figura 2 3 . Corte de la Tierra. La línea vertical une los polos Norte y Sur. r es el radio promedio de la Tierra y P un punto cualquiera sobre la superficie.

Obsérvese que:

Luego, el perimetro de la circunferencia de radio a es:

Considerando la latitud 8 de un punto P, se calcula enseguida la medida en kilómetros del arco correspondiente a un grado de longitud.

(Nota: g = grados).

2 - 1

lg (2-TI*a) 360g

= - """"

= - "_""""" l g (2*TI*r*cose) 360g

- - - """""""""_" lg (2*TI*r*cos(latitud)) 360g

=? x = - '8 """" (2*n*r) cos(1atitud) 360g

Por otro lado, la medida en kilómetros de un arco de un grado de latitud es:

lg (2*lT*r) =? Y = - """" 360g

Ahora bien, en la pantalla de la computadora se muestran las

coordenadas longitud y latitud en grados, no en kilómetros. Pero,

debido al diferente tamaño de l o s paralelos de nuestro planeta, se

encontrara que para cualquier zona de la superficie terrestre, el

valor que tiene en kilómetros un grado de latitud es constante; pero

el valor en kilómetros de un grado de longitud es variable dependiendo

de la latitud promedio que tenga la zona. Por ello, en la pantal la,

aunque se grafiquen grados, se vera que no mide igual un grado de

latitud que un grado de longitud (ver figura 24) .

2 - 2

2200

Figura 2 4 . Una zona de la superficie terrestre comprendida entre los paralelos 15 N y 16 N y los meridianos 22 O y 23 O no es un rectangulo sino un trapecio.

Para representar en la pantalla de la computadora el rectangulo

definido por las coordenadas de longitud mínima, longitud maxima, latitud mínima y latitud maxima, lo que se hara es representar la

distancia entre las latitudes mínima y maxima como se haya acordado

según el tamaño de la pantalla, pero ¿la distancia entre las

longitudes mínima y mAxima? Pues bien, en realidad la pantalla no

mostrara un rectangulo sino una figura con una de las bases mayor que la otra debido a que la distancia entre la longitud mhima y la mínima

varía dependiendo de si se traza sobre la línea de latitud maxima o

sobre la línea de latitud mínima.

En general, la longitud de cualquier punto en la pantalla queda

así :

para la

longitud real del punt o i. longitud mi-

- nima del conjunto de punt os

cos latitud real del

2- 3

Listado de un ejemplo de archivo de datos en turbo Pascal 5.0 usado

en el programa para trazar isolíneas.

Arch: B:\ISOLINEI.OAT

53 24 0.00 O 3 24 50.00 N 6495.00 6195.00 5895.00 53 23 0.00 O 3 24 10.00 N 6495.00 6195.00 5895.00 53 25 10.00 O 3 23 30.00 N 6565.00 6265.00 5965.00 53 21 30.00 O 3 23 30.00 N 6535.00 6235.00 5935.00 53 19 30.00 O 3 23 0.00 N 6495.00 6195.00 5895.00 53 26 0.00 O 3 22 20.00 N 6495.00 6195.00 5895.00 53 23 40.00 O 3 22 0.00 N 6475.00 6175.00 5875.00 53 20 30.00 O 3 21 40.00 N 6495.00 6195.00 5895.00 53 26 50.00 O 3 21 0.00 N 6475.00 6175.00 5875.00 53 18 40.00 O 3 20 50.00 N 6535.00 6235.00 5935.00 53 17 0.00 O 3 19 50.00 N 6495.00 6195.00 5895.00 53 26 20.00 O 3 17 30.00 N 6465.00 6165.00 5865.00 53 24 55.00 O 3 17 50.00 N 6455.00 6155.00 5855.00 53 24 0.00 O 3 17 50.00 N 6455.00 6155.00 5855.00 53 21 20.00 O 3 17 50.00 N 6465.00 6165.00 5865.00 53 19 30.00 O 3 18 0.00 N 6475.00 6175.00 5875.00 53 16 40.00 O 3 18 0.00 N 6535.00 6235.00 5935.00 53 15 30.00 O 3 17 0.00 N 6495.00 6195.00 5895.00 53 24 55.00 O 3 16 50.00 N 6453.00 6153.00 5853.00 53 15 40.00 O 3 16 10.00 N 6495.00 6195.00 5895.00 53 25 50.00 O 3 15 10.00 N 6455.00 6155.00 5855.00 53 17 0.00 O 3 15 0.00 N 6535.00 6235.00 5935.00 53 25 0.00 O 3 14 0.00 N 6465.00 6165.00 5865.00 53 18 30.00 O 3 14 30.00 N 6495.00 6195.00 5895.00 53 16 10.00 O 3 14 10.00 N 6495.00 6195.00 5895.00 53 21 10.00 O 3 13 0.00 N 6475.00 6175.00 5875.00 53 19 30.00 O 3 12 30.00 N 6535.00 6235.00 5935.00 53 20 20.00 O 3 1 1 40.00 N 6495.00 6195.00 5895.00 53 29 30.00 O 3 1 1 10.00 N 6475.00 6175.00 5875.00

3 - 1

Un ejemplo (listado de una corrida del programa 1solíneas.Pa-s).

" R e p r e s e n t a c l a w t g r a f l c s s en Gcolopls e s t r u c t u r a l

de los r a n t 0 1 a c u l f e r a r . " (Froprau en Turbo P e s c s l para c r e a c l m de

f r c a t l c o y de s l t l t r d de e s t r a t o s rocosos.)

Isollneas: de n ive l t w r a f l c o , de nivel

Asesor: Olpl. Ceal. BI8csIo S . Horst

A I m : l o z a n o Torres Strplo (mt:8532V5481

Mi lco , 0.r.. sep l lmbre de 1995.

+

I

3. Armar datos en m a r c h l w

L . C O Y T l N U A R

Archivos de d a t o s e r l s l e n t e s en C:\lPASCAl:

l s o ~ 1 n ~ 2 . o ~ ~ 1 s o 1 1 n ~ 3 . o ~ ~ l S O l l Y E l . 0 A T ISOLINEL.DA1

Y d r e de l a rch iva Isln e r t c n r l l n l : ISOLluEI

3 - 2

3 11'

3- 3

3. 2 4 1

3- I .I'

I

I

53.26 3.41

53 .30 3 .41

53.34 3.41

53.37 3 .41 53.41 3.41

53.49 3.41 53.f.5 3 .11

53.26 3 . 3 0 53.30 3 . 3 0 53 34 3 . 3 0

53 .37 3 .30 53.41 3 . 3 0 53.45 3 .30 53 .49 3 . 3 0

53.26 3.34 53 30 3.34 53.34 3 . 3 4

6510.16

6509.92

6505.82

m n . 0 9

6509.19

6510.04 6503.05 6510.59

651G.10

6499.66

6SOt.I.0

6510.03

6500.46

6500.02

6509.86

6510.47

6491.23

OPRIMA L A TECLA "EII1LR1* I

53.49 3 . 2 6

53.30 3 . 2 2

53 26 3 . 2 2

53 .37 3 . L 2

53.34 3 .22

53.41 3 . 2 2 53.45 3.22 53 .49 3 . 2 2 )3.26 3 . 1 9 53.30 3 .19 53.34 3 . 1 9 53 .31 3 . 1 9 53.41 3 . 1 9 5 3 . 4 5 3 . 1 9 53 .49 3 .19

6502 58

6462.43

6503.04 6510 14

6403.31

6462.37

6463 06

6510.56 6464.86

6502.89 6502.19

6492.23 6471.09

6 4 M . 2 1 L%lS.OO

OPRIMA LA TECLA "ENIER" I

3- 5

3. 24' SI" 5 3 . i 31'.

s3- 1 13'

3 - 6

8S66666S661666666186A46h86h66S46S866666hh466666~h4S66SS646686SSS4S6S66SSSSSSS~ Pmlm dato3 de 'Pultos interpolndos o d e ' P m t o s i n t w p o t s d o s o de'

Is s q x r f i c i c ' B e l i e r . sin ajuste. "0ez ie i , ; ,)rrrtodos. ' - i . i long* l a t l ' a l t u r a l . ' long. l a r / * a l t u r a / . long- 1at / ' a l t u r a / '

* dos * doo

* g r a - * gra. ~ m m . * gr." gr*- *mm. " gra" gra- om-.

d 6 s 6 ~ ~ e S 6 s 6 6 E ~ s 8 ~ ~ 6 ~ 8 6 6 6 s s 8 ~ 6 s ~ € 6 6 S 6 6 € 6 s ~ s 6 6 ~ 8 6 8 ~ 6 6 8 e 6 s 6 € 6 . ~ s s s ~ 6 6 6 s s s ~ s s 6 s ~ s ~ ~

das dos e dos dos "

L . 0 53.26 3.26 6503.07 53.26 3.20 6507.01

4 . 2 53.34 3.26 bL07.17 53.32 3.20 649L.35

L . 1 53.30 3.26 6512.86 53.29 3.20 6503.01

L. 3 53.37 3.26 6L62.24 53.36 1.2U 6403.16

L . L 5 3 . 4 1 3.26 6456.22 5 3 . 3 9 3.20 6473.02 4 . 5 5 3 . 4 5 3.26 6L58.46 13.L2 3.20 6468.47 53.42 3.29 6410.00

4 , 6 53.49 3.26 6L62.43 53.46 3.20 6461.47 53.46 3 . 3 0 6470.00 53.LV 3.20 6469.20 53.49 3.29 6410.00

5. 0 53.26 3.22 6502.50 53.26 3.25 6505.72

5 . 2 53.34 3.22 6503.04 53.32 3.25 6495.31

5 . 1 53 30 3.22 6510.74 53.29 3.25 6503.07

5 . 4 5 3 . 4 1 3.22 6465.06 5 3 . 3 9 3.25 6Lf3.76 5 . 3 53.37 3.22 6L03.31 53.36 3.25 6 4 U . 0 0

5 . 5 53.L5 3.22 bLb2.37 53.42 3.25 61M.87 5 . 6 5 3 . 4 9 3.22 6464.86 53.46 3.25 VWA.61

5 3 . 4 9 3.25 h L M . 3 0 QPRlHA L A T E C L A "ENlER'. I

3 1" 1/11 I

7 7

3 - 7

d 6 A A 0 6 6 6 A 6 1 6 6 6 h 6 6 h 6 h 6 6 ~ h b 6 h 6 h h h ~ h 6 ~ 6 6 ~ 6 h 4 6 h h ~ h 6 ~

Longitvd L a t i t u d Alturslmctros sobre

h 6 6 S 6 h ~ h 6 6 6 6 ~ 6 S A ~ ~ ~ 6 6 h h 6 ~ 6 h 4 6 6 6 6 h 6 6 6 6 6 h h b 6 6 6 6 ~ h ~

Iqra&s lqrados ' e l n ive l del m c *

Pvltar I n t e r p l a d o s con Gr id

53.26 3.61

53.30 3 . 4 1 6210.16

5 3 . 3 4 3 . 4 1 62W.92

53.37 3 . 4 1 6205.02 6208.09

5 3 . 4 1 3.41 5 3 . 4 % 3 . 4 1

6207.19

53.19 3 . 4 1 6210.04 6203.05

53.26 3 .30 53.30 3.30

6210.59

13.34 3.30 6210.10

53.37 3 . 3 0 6206.48

53.41 3 . 3 0 619V.M 6210.03

% 3 . 4 5 3 . 3 0 6200.16

53.26 3 . 3 4 5 3 . 4 9 3.30

6200.86 6200.02

5 3 . 3 0 3 . 3 6210.41 6197.23 53.34 3 . 3 4

OPRIYA LA TECLA "EUTER" 1

5 3 . 4 9

53.26 53. 30

5 3 . 3 1 53.37 5 3 . 4 1 5 3 . 4 5

53.147

53.26 53.30 5 3 . 3 4

53.61 53.37

5 3 . 4 5

53.49

3.26

3-22 3-22

3.22 3.22

3.22 3.22

3.22

3.19 3.19 3.19 3 . 19

3.19

3 .19 3.19

6162.43

6210.74 6202.50

6103.31 6203.84

6163.06 6162.37

6164.86

6210.56

6202.89 6702.19

6171.89 6192.23

6175.00

61h6.21

OPRIMA L A T E C L A "ENTER"

53.37 53.41 5 3 . 4 % .53.49 53.26 53.30 53.34 53.37

5 3 . 4 5 53.41

5 3 . 4 9 53.26 53.30 5 3 . 3 4 53.37 53.41 53.45

3 . 3 L 3 .34 3.34

3.30 3 . 3 6

3.30 3 . 3 0

3 2 0

3.30 3.30

3.30 3.26 3.26 3.26 3.26 3.26 3.26

6111.56 6183.05

6103.77 6107.56 6209.8I 6203.25

6160.40

6105 20

6155.55 6161.41

6161.37

6203.8T 6212.86 6107.17 6162.24

6150.46 6156.22

OPRIUA L A TECLA * * E u T w * 1

OPRIMA L A TECLA "ENTER" I

s3- 1

J

53' J 3- 11' Y 29..

3 - 9

53-

51.26 3.41 53 .30 3 .41 53.34 3.41 53.37 3.41

53.41 3.41

53.C9 3.41

53 .45 3.41

53.26 3 .30 53.30 3 . 3 8 53.34 3 . 3 8 53.37 3 . 3 ~

53.45 3 . 3 8 53.41 3.38

53.49 3 . 3 8

53.30 3 3 4

53.26 3.34

53.34 3.34

5909.92 5910.16

5905 .az

5909.19 5908.09

5910.04

5103 .O5 5910.59 5910.18 5906. :a 5aw.u 5910.83 5900.46 5900.02 5909.W 5910.L7 5097.23

OPRIMA L A IECLA " E N l E R ~ ~ I

7 7

5883.05 5071 .5.5

5887.56

5 W 3 . 2 5 5909.81

5885.20

5883.77

5860.4a 5855.55 5861.41

5903.87 5861.37

5887.17 5912.86

5862.21

5858.46 5856.22

w n w L A rEctA ~ W I E P ~ ~ ,

3-10

53.49 3.26

53.30 3.22 53.26 3.22

53.31 3.22 53.37 3.22

53.45 3.22 53.41 3.22

5 3 . 4 v 3.22 53.26 3.19

5 3 . 3 4 3.19 53.30 3.19

53.31 3.19 53.41 3.19 5 3 . 4 5 3.19 53.49 3.19

5862.43

5910.74

5883.31 5901.04

5863.06 5862.37

5910.56 5864 .e4

5902.09 5902.19 5892.23

5902.sn

5871 .n9 5 8 M . 2 1 5875.00

OPRIMA L A I E C L A " t H l f R " I

L. 5 3 - 1

WRlW L A IECLA " E N l t R " I

I * 2 4 ' SI' 53.

3- 11' 9- 29.' 1

31'.

3. 11' 9 29-

I

OhhhAh68hh6hh(1hhhh66666Kh66~h66666A886666666868h666bb6866A6866ASSA8A8886Sh6SSt * p m t o s d a t o s de *Puntos interpelados o de'Pwtos interpelados a de"

' l a superficie ' B e l i c r , s i n a juste . "Bezier. ajustadas. 3 1 , i (m' [ a t / " s i t u r n / ' lo-" l e t / * a l t u r o l " long" le t/ "a l tura/"

* gra- . grs. *mm. qra-' ora- 'mm. qra- ' g ra- 'mm.

* d o s . d o s - ' dos ' dos * a o dos dos

~ 6 6 6 6 6 C b 6 6 6 6 ~ 6 6 h 6 6 6 ~ b 8 6 8 h 6 8 C 6 S 6 b ( 1 8 S 6 A ~ 6 h 6 6 6 6 ~ h 6 8 6 6 6 6 C 6 6 6 ~ 6 8 A 6 6 C h 6 8 ~ 6 B ~ 6 A h 8 6 S 6 ~ O. O 53.26 3.41 5910.16 53.26 3.41 5910.16 O. 1 53.30 3.41 5909 .92 53.29 3.41 5909.27 O, 2 5 3 . 3 4 3.41 5905 .82 53.32 3.41 5900.29 O, 3 5 3 . 3 7 3 . 4 1 5908.09 5 3 . 3 6 3 . 4 1 5908.03 o. 4 53.41 3 .61 5909 .19 5 3 . 3 9 3.41 5 W 8 . 2 7

O. 5 5 3 . 4 5 3.41 5910.04 53.42 3.41 5908.29 O, 6 5 3 . 4 9 3 . 4 1 5903.05 5 3 . 4 6 3 . 4 1 5907.03

5 3 . 4 9 3 . 4 1 5903.05 1, O 53.26 3.38 5910.59 53.26 3.38 5910.24 1. 1 53.30 3.38 5910.18 53.29 3.38 5900.57 1. 2 53 .34 3.38 5906.48 53.32 3.30 5905 .56 1. 3 5 3 . 3 7 3.38 5899.64 53.36 3.38 5902.84 53.36 3.37 5900.00 1 , 4 53.41 3.38 5910.83 53 .39 3.38 5901 .09 53.39 3 . 3 0 5900.00 I , 5 53.45 3.38 5900.46 53.42 3.38 5900.13 53.42 3.38 5900.00 1, 6 53.49 3.38 5900.02 53.46 3.38 5899.18 53.46 3.38 5900.00

53 .49 3 . 3 0 5897.56 53.49 3.39 5900.00 OPUlUA LA TECLA "ENTER" I

O 6 6 6 6 6 6 8 6 6 6 h 6 A 6 S 8 6 6 6 8 S 6 8 B 8 6 ~ 8 6 6 A 6 6 S 6 6 S 6 6 S S S S 8 h A 6 S S S 6 ~ S 8 S S h S S h S S S ~ S S S S S ~ S S S ~ ~ S ~ ' PLntoS datos de 'PVntos interpelados o de"Pwtos interpelados o de"

' Is Superficie '8ezier. s i n ajuste . "0ez ier . a justados.

i , i ' lo-. ta t/ "altura/" 0 long" l e t / "altura/" long* l e t / " a l t u r a / " . . * dos d a A S ~ 6 h h E 6 S S Q 6 C 8 S 8 6 8 S ¿ S 8 ~ S A 6 S ¿ S S S é 8 S S 8 6 ¿ S 8 ~ S S 8 ¿ S B S S ~ 8 S ~ 6 S S C h S h S S ~ 6 6 S ~ S S ~ ~ S h S S S S ~

qra. ' gra- 'mm. e gra- ' q ra- 'm-. e qra-' gra . 'mcrm.

das ' dos " dos dos "

4 , O 53.26 3.26 5903.07 53.26 3.28 5907.01 4 , 1 53.30 3.26 5912 .86 5 3 . 2 9 3.28 5903.81

4 . 2 5 3 . 3 4 3 .26 5887 .17 53.32 3.20 5094.35 4, 3 53.37 3.26 5862.24 53.36 3.28 5883.16 4 . I 5 3 . 4 1 3.26 5056.22 53.39 3.20 5875.02 4 , 5 53.45 3.26 5858.46 53.42 3.28 5065 .47 53.62 3 . 2 9 5870.00 4 , 6 53.49 3.26 5862.43 53.46 3.28 5867.47 53.46 3.30 5870.00

5 p O 53.26 3.22 5902.58 53.26 3.25 5905.72 5. 1 53.30 3.22 5910.74 5 3 . 2 9 3 .25 5903.87 5 . 2 5 3 . 3 4 3.22 5903.84 53.32 3.25 5895.31 5 , 3 5 3 . 3 7 3.22 5883.31 53 .36 3.25 5084.00

5 3 . 4 9 3.28 5869.20 53.49 3 .29 5a7o.00

5 . I 5 3 . 4 1 3.22 5863.06 53.39 5-25 5 0 7 5 . 7 ~

5 . 5 5 3 . 4 5 3.22 5862 .37 53.42 3.25 5866.87 5. 6 53.49 3.22 5 W . M 53.16 3.25 5 W . 6 1

53.49 3.25 5864.30 OPRIMA 11 TECLA " E N I E U " I

Programs concluido

OFRlYA L A TECLA "ENTER" I

~ 6 8 8 8 ~ 6 6 A 6 6 B 6 6 6 6 6 6 8 8 6 6 8 6 6 6 h ~ 8 6 8 6 6 6 6 6 6 6 h h ~ ~ 8 h 6 h 6 6 h ~ h b ~ 6 6 h 8 6 6 6 8 B 6 8 A h h b h 8 ~ h 6 6 h h ~ ~

Puntos datos de 'Pwtos interpoladas o de'Pmtos interpoladas o de'

' e l a s u p e r f i c i e ' B e z i e r . s i n a i u s t e . ' E e l i e r , ajustados. * o i , j ' long" l e t / " a l t u r a / " e long" l a r/ "a l tura/ ' l ong" ( s t/ ' a l tura/ '

gre-e qrn- %sm. * gr." B r a - 'mm. gra. ' gra- 'mm. . s o

' dos ' dos ' * ' dos dos ' dos * dos ' B 6 6 6 B 6 C 6 6 h 6 6 b 6 S B B 4 6 ¿ 6 B A 6 4 6 6 C 6 8 6 C h 6 6 6 6 ~ 6 6 8 h 6 6 C h 6 6 B 8 B 8 ~ 6 h 6 ~ 6 h h 6 h ¿ 6 6 6 h h h ~ h h 6 h S 6 h ~ 2. O 53.26 3.34 5909.86 5 5 . 2 6 3 . 3 5 5909.76 53 .26 3 . 3 6 5P10.00

2 . 1 53.30 3 . 3 4 5910.47 53.29 3 . 3 5 5906 .77

2. 2 5 3 . 3 4 3 . 3 4 5897.23 53.52 3.35 5 9 o o . n 53.32 3.34 s90o.00 2. 3 53.37 3.34 5883.05 53.36 3.35 5894.45 53.36 3.33 5890.00 2, 4 53.41 3.34 5871.56 53 .39 3 .35 5889.76 5 3 . 3 9 3.35 5090 .00

2 , 6 53 .49 3 . 3 4 5887.56 5 3 . 4 6 3.35 5887.19 53.46 3.36 5890.00 2, 5 5 3 . 4 5 3 . 3 4 5883 .77 53.42 3 . 3 5 5887.47 53.42 3 .36 5090 .00

5 3 . 4 9 3 . 3 5 5887.64 5 3 . 6 9 3 . 3 6 5090.00 3 , O 53 .26 3.30 5909.81 53.26 3.32 5908.62

3. 2 53.34 3 . 3 0 5885.20 5 3 . 3 2 3.32 5896.37

3 , 1 53.30 3.30 5903.25 53.29 3 . 3 2 59OL.88

3 . 3 53 .37 3.30 5860.48 53.36 3.32 5886.94 53.36 3 33 5890.00 3 , 6 53.41 3.30 5855.55 53.39 3.32 58n.55 53 .39 3.32 5uao.00 3 . 5 5 3 . 4 5 3.30 5 ~ 1 . 4 1 53.42 3.32 5575.76 53.42 3 . 3 3 5880.00 3. 6 53.49 3.30 5861.37 5 3 . 4 6 3 . 3 2 5 8 n . 5 0 53.16 3 . 3 3 5M0.00

53.49 3.32 5877.00 53.L9 3.33 5080.00 OPRIMA LA T € C l A " E U T E U " I

3 - 1 2

Anexo 5. Impresión de gr&ficos.

En este anexo se dan las instrucciones para poder imprimir los

mapas que aparecen en los programas de creación de superficies y de creación de curvas.

El motivo de haber puesto estas instrucciones separadas del

manual del usuario fué que al querer imprimir en papel la informaci6n

en texto, en tablas y en mapas que contiene los resultados producidos

por e 1 programa, no todo quedaba en el papel. En efecto, usando la

combinación de teclas de impresión Shift + Print-screen") durante la

ejecución de un programa en lenguaje Pascal sólo es mandada a imprimir

la información que est& en modo texto, no la producida en modo

grhfico. Para que este último tipo de información se pueda imprimir

con la misma combinación de teclas, debe cargarse el graphics del sistema operativo antes que cargar el turbo pascal o antes que correr

el programa ejecutable. Enseguida se explica en detalle cómo hacerlo.

Instruccciones para poder imprimir la informacióg producida en modo gr&f ico de turbo pascal.

1. Encienda la computadora y la impresora.

2. Si su computadora tiene disco duro, ella cargar& el sistema

operativo y después de un rato mostrará en pantalla algo como c: \

pero si su computadora no tiene disco duro aparecer& el mensaje de

que usted tiene que meter el diskette que contenga al sistema

operativo. Despues de que usted lo haga, pasar& un poco de tiempo hasta que al final la pantalla muestre algo parecido a a:\.

3. Cuando usted est& en posibilidad de teclear órdenes que aparezcan

en pantalla o sea cuando la pantalla muestra algo como c: \ o como

a:\, el paso normal sería poner el diskette de trabajo en la

computadora y cargar el turbo pascal (el turbo pascal se carga

escribiendo la palabra turbo y luego oprimiendo la tecla ENTER, en

(l'significa que se debe oprimir la tecla Shift y , sin soltarla, """""""""""""""""""""""""""""""""""

también se debe oprimir la tecla Print-screen.

5 - 1

el caso de tener a:\ en la pantalla; o bien, para el caso de tener

c:\ en la pantalla, primero se escribe a:, luego se pulsa la tecla

ENTER, tras lo cuál aparecer& el letrero a:, y luego se carga turbo pascal como ya se dijo); pero l o que se hará es cargar el graphics:

Escriba lo siguiente con el teclado (no quite el diskette de

sistema operativo si su maquina no es de disco duro)

graphics laserjet /pb: std

y luego oprima la tecla ENTER. Después de unos segundos volverd a aparecer c:\ o bien a:\. Con esto la computadora habra cargado el

graphics con ciertos parámetros que le indicaron el tipo de

impresora y el tipo estándard del printbox. Nota: si su impresora

no es tipo laserjet, entonces escriba en su lugar el tipo correcto.

4. Corra el programa ejecutable. De otra manera, cargue turbo, elija

el programa deseado y hagalo correr. Para detalles sobre ésto, vea

el manual de usuario.

5. Imprima lo que desee de la información que muestre la pantalla

durante la corrida del programa usando la combinación de teclas

Shift + Print-screen, lo cual hace que se imprima en papel todo lo

mostrado en la pantalla.

5- 2

AGRADECIMIENTOS

1) A mis compañeros de licenciatura en la Universidad (Benjamín,

Mauro, Jose Luis, Cruz, Rodrigo, Carmen, RenC, Ana, Nelly,

Gabriel, No&, Lalo, Pancho, Mario, Claudia) por preguntar

continuamente sobre el avance del proyecto.

2) A Ana, Carmen y a mi hermana Vero quienes gentilmente se

ofrecieron a ayudarme en pasar parte del texto a la computadora. 3 ) A mis papas, mis sostenes econ6micos, por su apoyo completo, por

preguntar con mis hermanos sobre e 1 avance del proyecto y por e 1 gozo que mostraron todos cuando termine la carrera.

4 ) A Ana Gonzalez quiCn me ayud6 cuando ya no pude imprimir.

5) Al profesor Blaesig qui& dirigi6 el trabajo, ayud6 en decisiones,

mejor6 la presentaci6n en la fase inicial, prest6 el material para

manejo de archivos y para una parte de la validaci6n de datos,

permiti6 el uso de programas de otros autores, revis6 el trabajo,

present6 entusiasmo, quit6 la presi6n al final del programa y

permitib la exclusi6n de tareas debido al poco tiempo restante. 6 ) Al profesor Leonardo Traversoni quiCn prest6 el libro de G. Farin,

asesor6 en la comprensi6n del inicio del libro, permiti6 el uso de una computadora y una impresora y ayud6 en el manejo de Units.

7 ) A Adrib Rend6n quien me sac6 de apuros tecnicos con los diskettes

debidos a fallas en ellos, a problemas con la impresi6n y con la introducci6n de virus. TambiCn ayud6 a teclear informaci6n y a

intentar hacer tablas en un paquete de hojas de calculo (EXCEL).

8 ) A Adrian Brianza quiCn me copi6 un sistema operativo que para mí

era imposible.

9 ) A Dios quien me levant6 en muchas ocasiones.

10) A Antonina y a Victor qui6nes me ayudaron a decidir que no

cambiara el proyecto cuando ya estaba muy avanzado.

11 1 A Josh (y a su familia) porque nos empujabarnos a terminar y en varias veces trabajé en su casa.

12) A Paty quiCn con entusiasmo preguntaba por el estado del proyecto. 13) Al profesor Armando Saavedra quiCn di6 la idea para diseñar y

programar el ajuste al programa "curva de BCzier XY" que

permitiría obtener puntos con valores de altura 2 deseados. :{&S

adelante la misma idea se usaría para obtener un mapa a base de

los puntos pertenecientes a isolíneas (aunque éstas no se

trazaron) con valores de altura igualmente espaciados.

14) A mi cuñado Javier Benítez quién me permitió usar su computadora y

su impresora varios días para presentar informes preliminares del

proyecto y quién me asesoró en ciertos aspectos de la escritura

con el procesador de textos "ChiWriter". Y a mi hermana quién me invitaba a ir a su casa a trabajar en la computadora.

BI BLI OGRAFI A

1. - Baldor, Eugenio. "Algebra". Publicaciones Cultural, S.A. Primera reimpresi6n. México, 1984. Páginas 14, 15 y 16 (Elementos y grado de un termino en una expresi6n algebraica llamada polinomio).

2.- Berger, Marc. "Graficaci6n por computador". Addison - Wesley I beroamer icana. edicibn. México, 1991. Paginas 36 y 37 (Formato de imagen), 97 a 101 (Procedimientos para dibujar los ejes X y Y y para marcar los valores de las coordenadas sobre los ejes), 279 a 322 (Graficas tridimensionales) y 325 a 346 (Curvas y superficies 1 .

3. - Bronshtein, I. y Semendiaev, K. "Manual de Matematicas para Ingenieros y Estudiantes". Versi6n española de Inés Harding Rojas. Ediciones de Cultura Popular, S.A. México, D.F. Paginas 266 y 267 (Paraboloide Hiperb6lico).

4 . - Davis, John C. "Statistics and Data Analysis in Geology". John Wiley and sons. First edition. New York, 1973. Capítulo 5 (analisis de secuencias de datos), páginas 176, 177, 179; y capítulo 6 (Map Analysis - Contouring), paginas 310 a 322.

5.- Davis, John C. "Statistics and Data Analysis in Geology". John Wiley and sons. Second edition. New York, 1986. Capítulo 4 (Analysis of Secuences of Data), páginas 356 a 377 (Computer contouring: by triangulation, by gridding).

6.- de Galiana Mingol Tomás. "Pequeño Larousse Técnico". Ediciones Larousse. Edici6n 1978. México, 1978. Pagina 623 (Definicibn de 1 ineal 1 .

7.- Farin, Gerald. "Curves and Surfaces for Computer Aided Geometric Design. A practical guide". Academic Press Inc. Second edition, Estados Unidos de América, 1990. Capítulos 2 (Introductory material), 3 (The de Casteljau algorithm), 4 (The Bernstein form of a Bézier curve) y 16 (Tensor Product Bézier surfaces).

8. - Frumkin Saban, Michelle Elena. "Tesis: Un método de Cartografía Automatizada aplicado al análisis de factores climaticos del estado de Guerrero". Instituto de Geografía, UNAM, 1977. (Mapa isoplCtico y Métodos de interpolaci6n para estimar valores).

9.- Hearn, Donald y Baker, M. Pauline. "Grhficas por Computadora". Prentice Hall Hispanoamericana, S. A. Traduccibn de la primera edici6n en inglés. México, 1989. Páginas 209 a 221 (Curvas y Superficies de Bézier, Curvas y Superficies Spline, y Métodos de generaci6n de superficies).

10.- Parker, Harry y MacGuire, John W. "Ingeniería de Campo Simplificada para Arquitectos y Constructores". Editoriales Limusa - Wiley. S. A. y Centro Regional de Ayuda Técnica, Agencia para el desarrollo internacional (A.I.D.), Departamento de Estado del gobierno de los Estados Unidos. Primera edici6n. México, 1972. Páginas 139 a 142 (Método de secciones transversales o emparrillada para graficar curvas de nivel en Areas pequeñas).

11.- k m e l , John T. y Miller, Michael J. "GrAficas por computadora". Editora1 McGraw-Hill. Traduccibn de la primera edicibn en ingles. Mkxico, 1988. PBginas 304 a 306 (Representaciones oblicuas).