I A HI TEMA - 148.206.53.84148.206.53.84/tesiuami/UAM1182.pdf · tpu, superf ic. tpu, is01 ineas....
Transcript of I A HI TEMA - 148.206.53.84148.206.53.84/tesiuami/UAM1182.pdf · tpu, superf ic. tpu, is01 ineas....
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
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
@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
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
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
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
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
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
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
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
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-
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).