home *** CD-ROM | disk | FTP | other *** search
- read.me The World Digitized
- vs 1.01 May 1986
-
-
- The World Digitized is a collection of more than 100,000
- points of latitude and longitude. When connected together, these
- co-ordinates form outlines of the entire world's coastlands, islands,
- lakes, and national boundaries in surprising detail.
-
- The philosophy adopted in making The World Digitized
- available to the public is that the exercise of ones own
- creativity and imagination is much more interesting and profitable
- than the acquisition of a fixed program. The World Digitized is,
- therefore, simply a raw data base sprinkled with a few suggestions
- to be used as jumping off points in your personal quest to create
- significant and dazzling programs.
-
-
- Installation:
-
- The World Digitized is supplied on three 360 KB diskettes.
- Batch files are included to automate the transfer of data to a
- single hard disk under the directory WORLD. While use of a large
- capacity hard disk is not absolutely necessary, its presence
- certainly makes life a lot easier for work of this volume. The
- following instructions refer to making that transfer.
-
- Place Disk 1 of The World Digitized into drive A:. If
- your hard disk is not drive C:, edit INSTALL.BAT on A: changing
- every occurrence of C: to your target hard drive's designation.
- Then switch to your hard drive [e.g. C:] and change directory
- to the directory in which you want the new directory WORLD to
- be created [e.g. cd xyz or cd \]. You need about 1.3 MB of
- free space on your hard disk to make the transfer. Switch back
- to drive A: and execute INSTALL as follows:
-
- A:
- INSTALL
-
- The contents of the three World Digitized diskettes will
- be transfered to your hard disk. WORLD and a number of sub-
- directories will be created in the process.
-
-
- What You Got:
-
- The World Digitized is segregated into directories and
- into files within the directories for ease of use. First are
- some files of general or early interest kept directly under
- the WORLD directory:
-
- read.me - this file.
- copying - details of your right to copy (save)
- install.bat - installation batch file.
- install1.bat - 2nd part of install.
- expand.bat - data base converter control file.
- mpstomp1.exe - shipping to ASCII file converter.
- mpstomp1.c - source of converter.
-
- demo - Source files of the Alaska demo. The
- corresponding demo.mp2 file is not included
- because of lack of space. You can make
- your own from a subset of NA*.mp1
-
- Africa
-
- AF0 - coastlands
- AF1 - islands
- AF2 - lakes
- AF3 - political boundaries (includes Middle East)
-
- Antarctica
-
- AN0 - coastlands
- AN1 - islands
-
- Asia
-
- AS0 - coastlands
- AS1 - islands
- AS2 - lakes
- AS3 - political boundaries
-
- Australia
-
- AU0 - coastlands
- AU1 - islands
- Au2 - lakes
-
- Europe
-
- E0 - coastlands
- E1 - islands
- E2 - lakes
- E3 - political boundaries
-
- Northamerica
-
- primarily Canada and Alaska
- NA0 - coastlands
- NA1 - islands
- NA2 - lakes
- NA3 - political boundaries
-
- USA0 - coastlands
- USA1 - islands
-
- Greenland
- GR0 - coastlands
- GR1 - islands
-
- PA1 - Hawaii and mid Pacific islands
-
- Southamerica with Central America and Caribbean
-
- SA0 - coastlands
- SA1 - islands
- SA2 - lakes
- SA3 - political boundaries
-
-
- Expanding Files:
-
- For the purposes of shipping, the normal ASCII files which
- hold The World Digitized (.mp1 format) have been compressed into
- binary (.mps) formated files. You can expand the binary files
- into their ASCII conterparts by executing the program
-
- mpstomp1 file_name b:
-
- where:
-
- file_name is the name of a .mps file without
- extension or drive designation.
-
- b: is the designation of the destination drive.
- It may be your current drive.
-
- The result will be the newly created file b:file_name.mp1. You
- can use your favorite text editor to view or modify any .mp1 file.
-
- The batch file EXPAND.BAT is provided to expand all your
- .mps files automtically. Be sure that you have approximately
- 1.8 MB free space on your disk before executing this file. Again
- the assumed designation of your hard drive is C:. If this is not
- so, edit EXPAND.BAT to correct the destination drive on each
- line where C: is used. EXPAND.BAT takes about one and a quarter
- hours to run.
-
-
- Concatinating Files:
-
- Expanded .mp1 text files and .mp2 binary files can
- be concatinated into large .mp1 and .mp2 files if you want
- to use more than one small section of The World Digitized
- at a time. You might, for instance, desire to display the
- coastlands, islands, lakes, and political boundries of Asia
- together. Asia was shipped as four separate files. They can
- be concatinated with the PC DOS copy command:
-
- copy as*.mp1 large.mp1
-
- or
-
- copy/B as0.mp2+as1.mp2+as3.mp2+as4.mp2 asia.mp2
-
- Note the use of the /B binary switch when concatinating binary
- files. This switch is necessary because binary data might
- be interpreted as the End-of-File marker (Ctrl Z) expected
- at the end of default ASCII files.
-
-
- Making Backups:
-
- You are encouraged to make backup copies of any and all
- the material you received with The World Digitized. You are
- even encouraged to make copies for your friends as long as you
- include the COPYING file and inform them of their obligation to
- obtain a product license. They can be both licensed and put on
- a list for possible future product announcements by sending $20 to:
-
- The World Digitized
- Dept. PC SIG
- 166 Shady Lane
- Apollo, PA 15613
-
- User Supported Software benefits everybody concerned.
-
- Your license extends to your personal use of The World
- Digitized. Both it and its derivatives are Copyright 1986 by
- John B. Allison.
-
-
- Special Educational License:
-
- If you are involved with teaching, a special Educational
- License can be obtained by sending $65 to the above address.
- This will license you to use The World Digitized not only in your
- private activity, but also extends those rights to those whom you
- teach while they are in your classroom or lab setting. Students
- wishing to use these materials or their derivatives at home should
- register personally as outlined above.
-
-
- Related Products:
-
- A completed version of Programs I - V outlined below is
- available from The World Digitized. Send $19 (plus 6% sales tax
- for those with Pennsylvania mailing addresses) and ask for the
- Simple Display Program. Source versions for the Simple Display
- and mp1tomp2 programs will be supplied on a single diskette.
- The Educational License for use of these programs is $59.
-
-
- Accuracy vs. Precision:
-
- You may be lulled into thinking that the coastal outlines
- included in this product are highly accurate. I wish they were!
- Implicit in the Real variables used to record The World Digitized
- data are seven or eight digits of accuracy. Go to Double Precision
- (which is the C language default), and you have 17 places! The
- latitudes and longitudes in .mp1 files are limited to 3 places
- to the right of the decimal, primarily to save disk space. One
- thousandth of a degree of a Great Circle of the Earth is 0.069 miles.
- (3959 mi radius * 2pi/360 deg = 69 miles/deg) The unwary might
- incorrectly conclude that this precision implies co-ordinate accuracy
- to within 365 feet!
-
- You will observe goofs in The World Digitized many times
- this amount. In fact extraneous points were disposed of which
- were separated by less than a mile. Yet although this data base
- may lack absolute accuracy when viewed from a global perspective,
- relative to their neighbors, most of the points are suprisingly
- accurate.
-
-
-
-
- Data Formats:
-
- Three formats are used to store The World Digitized
- data base.
-
- .mps - binary for shipping and space saving
-
- .mp1 - ASCII, latitude and longitude with comments
-
- .mp2 - binary, Mercator y and longitude for speed
- and proper vertical scaling.
-
- In general, all these file formats are characterized by
- strings of data records representing connected points. String
- terminations are marked by separator records or fields which
- delineate the strings from each other.
-
- .MP1 File Format: variable length ASCII records
-
- Data Records
- field
- 1 latitude floating point number
-
- 2 blank field separator
-
- 3 longitude floating point number
-
- [4] optional begining with a blank
- comment
-
- 5 line feed end of record (LF - 10)
-
- Separator Records
- field
- [1] optional blanks[s]
-
- 2 line feed end of record (LF - 10)
-
-
- .MPS File Format: variable length mixed binary/ASCII records
-
- field
- 1 latitude 4 byte binary floating
-
- 2 longitude 4 byte binary floating
-
- [3] optional ASCII characters
- comment
-
- [4] optional end of string (SOH - 1)
- separator
-
- 5 line feed end of record (LF - 10)
-
-
- .MP2 File Format: fixed length (10 byte) binary records
-
- field
- 1 type 2 byte integer
- 0 - start of a new string
- 1 - continuation of a string
-
- 2 latitude 4 byte binary floating
-
- 3 longitude 4 byte binary floating
-
-
- Programming Suggestions Using
-
- The World Digitized Database
-
-
- John B. Allison
-
-
-
-
- I. Simple display program:
-
- 1. Define a world co-ordinate system whose lower left corner
- is -246 (degrees West Long), -85 (degrees South Lat) and
- whose upper right corner is 246, 85.
-
- 2. Draw lines of latitude and longitude every 20 degrees
- labeling them.
-
- 3. Traverse a .mp1 formatted file plotting lines from latitude/
- longitude point to point. Terminate the current sequence
- of connected lines at a blank input record and prepare to
- start a new sequence if there is one.
-
- 4. The name of the file to be displayed must be accepted
- as a command line argument.
-
- 5. The program should exit after it displays for about 30 seconds.
-
- II. Simple zoom display program:
- Provide the ability to zoom in on a chosen area of the display
- in the previous program.
-
- 1. Convert the mainline function of your Simple Display Program (I)
- to a function named "display1()".
-
- 2. Write the function "zoomwin()" which resets the world co-ordinates
- of the display based on input returned by "getlocs(x, y)" called
- from within "zoomwin".
-
- The aspect ratio of the world co-ordinates must be maintained
- even though the requested zoom is not in correct proportion.
-
- One way to signal program termination is for "zoomwin" to return
- TRUE if a the zoom was accomplished and FALSE if the same corner is
- entered twice. The mainline alternately calls "display1" and
- "zoomwin".
-
- 3. "Getlocs(x, y)" returns the display co-ordinates of window
- corners entered to mark the desired extent of the new display.
-
- Dynamically mark the current cursor position (which is initially
- centered) by cross hairs. Move the cross hairs by the keypad
- arrow keys (1, 3, 7, and 9 can be used for diagonal movement).
-
- Cursor jump should be the minimum detectable on your display
- unless the shift key is simultaneously held down. Then it
- should be 10 times the minimum.
-
- Striking the Return key should "mark" a corner of the zoom
- window with permanent dashed cross hairs. The user will then move
- the solid cross hairs to mark the second diametrically opposed
- corner with a second Return.
-
- The decimal values returned by striking the keypad keys follow:
-
- key byte1 byte2
-
- 1 0 79
- 2 0 80
- 3 0 81
- 4 0 75
- 5 0 76
- 6 0 77
- 7 0 71
- 8 0 72
- 9 0 73
-
- III. Display Program with Mercator Projection:
- You may have noticed distortion in the maps displayed in the
- previous programs, epecially at extreme latitudes. This
- distortion is caused by an attempt to map the curved surface
- of a three dimensional globe onto a two dimensional plane. As
- you travel toward the poles, the 360 degrees of longitude are
- squeezed into less and less space on the globe, but not on the
- plane.
-
- There are many ways to compensate for the distortion problem.
- Probably the solution most widely recognized is the Mercator
- projection, named for a famous early map maker. Mercator's
- projection has the characteristics that both lines of latitude
- and longitude are straight and at right angles to each other
- (orthogonal). In addition, if a small area is viewed, there
- is no distortion of form: areas have the right shape although
- the vertical scale and total area is distorted as you move from
- the equator.
-
- The formula for the Mercator projection is
-
- y = ln{tan[45 deg + latitude/2)/deg_per_radian]}
-
- Check out the Encyclopedia Britannica under Map for all this
- good stuff and more.
-
- 1. Use the Mercator formula in a function which, when passed a
- latitude in degrees, returns a vertical displacement. Can you
- predict what sorts of evil things happen at the poles (90 and -90)?
-
- 2. Use the function "mercator(lat)" to give the correct vertical
- displacement when generating graphics in Program II. Set the
- corners of the world co-ordinates to (-246,-2.9) and (246, 2.9).
- The horizontal scale is still in degrees while the vertical
- is in Mercator displacement units.
-
- IV. Faster Display Program:
- What you gained in making your display look more realistic
- you paid for in speed. Real division and tangent and log
- functions take time, even with a math chip. The extra time
- can be more than made up for by reading the pre-calculated
- Mercator displacement and longitude from a binary file rather
- than latitude and longitude from a text file.
-
- 1. Alter the input function of your display program to open and
- read from a binary .mp2 formatted file rather than from an
- ASCII .mp1 formatted file. (Refer to the section on File
- Formats for a detailed description.)
-
- 2. Write a program called mp1tomp2 which converts .mp1 files to
- .mp2 files. This program should accept the name of the file
- (without extension) as the first command line argument and the
- destination disk as the second argument.
-
-
- V. Display Program with Print:
- A nice addition to your display program is the ability to
- reproduce the displayed image on the printer. This is an
- easy addition in some graphics languages.
-
- 1. Add a call to print the displayed image. The call should be
- added to function "getloc()" and activated by entering "p"
- from the keyboard. Note that upper case "P" (preceded by a
- null) will result from striking keypad "2".
-
-
- Note: If you are having trouble with the Simple Display Program outlined
- above, don't be discouraged. The program is not really simple!
- When you put enough simple things together, they inevitably become
- complicated by the nature of their mututal interactions. That's what
- structured programming is all about: designing simple and logical
- interfaces between the many pieces. The first rule of programmning
- is never to attempt any truly difficult programs because even simple
- programs are difficult.
-
- If you have simply come up against a dead end or if an alternate
- solution is desired, the completed source of Programs I - V is
- available from The World Digitized. Send $19 and ask for the
- Simple Display Program. C language source for the simple display
- and mp1tomp2 will be supplied on a single diskette.
-
- VI. Simple Display Program with Scale of Miles:
- As you zoom the display up further and further, you know that
- you are getting up closer, but its easy to loose track of the
- scale, the number of miles from one point to another, or the distance
- across the screen especially with the inherent scale distortion in
- latitudes greater than 30 degrees.
-
- 1. Add a function which prints an indiction of the scale along the
- bottom of the display. This indication can be a solid horizontal
- line labeled with its length: 1000 miles, 100 miles, 10 miles, 1 mile,
- or whatever is appropriate. Alternately the indication could be
- text showing the width of the screen. In either case the scale
- represented should be that scale at the middle of the screen.
- You will need to define the inverse Mercator function "mercainv(y)"
- to return the latitude when supplied with the vertical offset
- from the equator.
-
- 2. Another interesting indicator is the zoom factor which can be
- placed at either the top or bottom of the display. Define the
- initial display zoom ratio as 1.0. As you zoom in, that ratio
- increases. Professional CAD (Computer Aided Design & Drafting)
- systems once blew up at factors of about 500. You will be surprised
- at how far your display can zoom. The limit is ultimately dependent
- upon the data representation, single precision real in the case of
- Halo.
-
-
- VII. Simple Display Program with Location Display:
- You will want to be able to display the geographic location of any
- point on your display. The inverse Mercator function "mercainv()"
- you constructed for the previous program will be useful.
-
- 1. Add the function "markloc()" which, when called by entering the
- letter "M", displays the cross hairs on the screen. The cross hairs
- can be moved with the keypad as in windowing for a zoom, but when a
- single Return is entered, a small cross is left to mark the
- spot. To the right of the cross (or to the left as spacing permits),
- print the latitude and longitude of the location. This feature is
- invaluable when trying to relate points on your graphics display
- to the source .mp1 files.
-
-
- VIII. Simple Display Program with Unzoom:
- Now that you can zoom your display anywhere at will, it would
- be convenient to be able to change your mind, backup to a
- previous display, and commence again. The ability to change
- your mind is available in commerical packages such as Computer-
- vision's CADDS 4X graphics system. In their system a command is
- never "final" until you hit the Return key. The results of your
- actions are shown graphically as you enter them, however. If you
- don't like what you just did, you always have the option of aborting
- the command while it is still in progress and returning, graphics
- display as well as data base, back to the pre-command state. Pretty
- nifty!
-
- Without getting into CV's total command interpretor
- solution which is complicated and arguably ghastly to program,
- there is an interesting solution with two variations for the
- lesser problem of returning to previous states from the current
- one. First of all the states which must be saved are the zoom
- extents - the world co-ordinates for each sucessive zoomed
- display. The most straight forward implementation is to store
- each sucessive display in an array (or a C structure). Each time
- the display is zoomed, the old drawing extents (corners) are
- stored as the next elements of the array. To get back to any
- previous zoom ratio, the old extents are retrieved from the
- array, the last-valid-element-marker of the array is moved
- backward, and the drawing is redisplayed. Care must be taken
- not to overflow the array.
-
- The more interesting but functionally equivalent approach
- is to recursively have "zoomwin()" call itself thereby storing
- past extents (and all other variables) on the stack. "Zoomwin()"
- must also call "display2()" directly so the drawing can be re-
- displayed after each zoom. Recursion has the advantage of
- automatically handling the record keeping chores - no extra
- arrays are necessary. Recursion is also intellectually challenging.
- People don't think that way naturally and its fun to try. Recursion
- should only be used where it is truly advantageous. Don't use it
- where a simple loop will do. Be sure that you prepare a way of
- returning back to yourself otherwise you will recurse yourself
- right off the end of the stack.
-
- If your stack is too small, the program will fail at
- run time with a *** STACK OVERFLOW *** message if you're lucky.
- Executing your program
-
- PROGRAM =8000
-
- will allocate an 8000 bytes stack to you program instead of its
- default (2048?). The linker has an optional stack switch good
- up to 64k, and the Lattice C compiler supports a larger default
- declaration programmatically.
-
- 1. Add the capability to your program to unzoom. This can be done
- by assigning the Esc key the meaning to backup one level and
- redisplay. For backing up several levels at once (redisplay
- takes time), the sequence "-n" where "n" is a single digit
- should be used.
-
-
- IX. Simple Display Program which Includes a City/Nation Database:
- The World Digitized comes with no cities. Making a list of
- the major (perhaps captial) cities of the world with their
- co-ordinates is a straight forward task.
-
- 1. Make a list of major cities/countries and organize them into file
- structure suitable for both sequencial and random processing. Modify
- the simple display program so that cities are displayed when
- a "c" is entered. The cities are displayed by a small filled
- circle or square. Choose different shapes or sizes depending
- on population. Print the name of the city beside its shape.
-
- 2. Modify the simple display program to display (at the current
- zoom factor) a city and its surroundings when an "f" (for find)
- and its name is entered. Develop a method for handling ambiguous
- cases by listing the possible cases and asking for additional
- information such as state or nation.
-
- 3. Modify the simple display program to display the names of the
- nations when an "n" is entered. If you enter "f" for find and
- the name of a nation, it should be displayed as in 2 above.
-
-
- X. Program to Display in Polar Co-ordinates:
- If you aren't entirely sick of map display programs by now,
- design one to display in polar co-ordinates. The most suitable
- continent to display, of course, is Antarctica. Remember it
- is in the southern hemisphere, and therefore mathematically
- backward or inside out.
-
-
- XI. Program to Automatically Clean Up Database:
- As you have already discovered by this time, there are many
- small errors in The World Digitized database. The number
- of points and the difficulty of interpreting them outside
- of a graphics context makes correcting these errors by
- hand tedious and error prone. Any programs which can
- be developed to locate and correct errors automatically
- are valuable and inately fulfulling. Here's your chance
- to be fulfilled.
-
- 1. Closure on many closed bodies such as islands and lakes is
- not complete. The database consists of strings of co-ordinates
- separated by blank lines. The first point of the next string
- may be either a continuation of the same body or the start
- of a new one. Write a program which traverses .mp1 files
- outputing each record to an output file. When a new
- string is found, determine whether the new string is a
- continuation of the old one (is sufficiently close to the
- last point of the old string) or is the start of a new body.
- If it is a continuation of the same body, the blank record
- should be left out. If it is the start of a new body, an
- additional or a replacement last record should be inserted
- in the output file which matches the first point of the old
- body thus assuring closure. There is a strong possibility
- that the relation of the strings and points is indeterminate
- automatically.
-
- 2. Two more problems affecting the reasonableness of the data in
- the database are lines which cross themselves and angles
- which are unnaturally acute. Perhaps both these problems can
- be addressed by solving the acute angle problem. Write a
- program which, as in case 1 above, reads a .mp1 file and outputs
- good records to another .mp1 file. Discard any point n which
- causes vectors drawn from n-2 to n-1 and from n-1 to n to
- form an angle of less than 45 degrees.
-
- While this approach probably will solve many problems automatically,
- it is not a fool-proof solution. First of all the results, the
- points discarded, are dependent on the order of traversing the
- database. Is there any way of avoiding this problem? Secondly
- and perhaps more obvious to you, throwing out point n associated
- with an acute angle may leave us with an equally bad n+1 point
- and angle. In the case of very small islands, the whole island
- may disappear, which may not be all bad. But you could conceive
- of whole spits or heads of islands being radically changed.
-
- Perhaps the best solution to problems of the types outlined in
- cases 1 and 2 is to try to combine automatic scanning with
- graphical display and human decision making at difficult points.
-
-
- XII. Mathematical Analysis of the Data:
- Several interesting programs can be written which investigate
- the relationship of the World Digitized co-ordinates to each
- other from a purely mathematical perspective.
-
- 1. Write the function "spheremi(lat0, long0, lat1, long1)" which
- returns the distance in statute miles separating two close places
- on the earth. For the sake of simplicity and speed of execution,
- you should assume that the chord approximates the arc of a swept
- angle for small angles or sin(theta) = tan(theta) = theta (in radians)
- for small theta's. The circle we are talking about, of course,
- is the great circle of the earth. The earth's radius is 3959 miles.
- Remember that while distance is linearly related to degrees of
- latitude, distance is not linearly related to degrees of longitude
- but depends on the latitude.
-
- 2. Using the function "spheremi()", write a program to calculate
- the total length of the coastlines of the world.
-
- 3. Write a program which prints a histogram or a curve of the
- distribution of the lengths of the vectors making up the
- coastlands of the world. One would expect the distribution to
- be "normal", or perhaps the log of the distribution because the
- lower bound is 0 while the upper is infinite. Can you explain
- why it is not normal? Is the average vector length different for
- high latitude sections of the database versus equitorial regions?
-
- 4. Write a program to calculate the area of enclosed figures (islands).
- I'm not acquainted with the mathematical theory needed to solve this
- problem, but I bet its simple and powerful. The storage require-
- ments of the program will probably also increase at least linearly
- with the number of vectors making up the figure to be evaluated
- making exact calculations of larger areas (continents) difficult.
- Use related algorithms to calculate the center of mass, moments
- of inertia, etc.
-
-
- XIII. Program to Insert a B-spline:
- As you zoom in closer and closer in your display of The World
- Digitized, the disjointed nature of the data begins to look very
- unnatural. Running a B-spline between points would insure that
- the slope of the curve at all points is continuous adding to
- the realism.
-
- 1. Write a variation of the Simple Display Program which would
- calculate and display a cyclic cubic spline for a limited
- number of points in the display area when zoomed up enough
- to make the discontinuous nature of the data obvious.
-
- 2. Devise a method to store the parameters of the spline in a
- binary file ahead of time to reduce the run time calculations.
-
- The mathematics of b-splines are beyond the scope of these
- programming suggestions to cover. Rogers and Adams in the
- Mathematical Elements for Computer Graphics, McGraw-Hill, 1976
- discuss cyclic cubic splines. See page 129 for pictures.
-
-
- XIV. Program to Add More Resolution:
- There is only so much information that is carried in a given
- drawing or database. The measure of that information is the
- number of points defining the vectors. You might suppose that
- it is impossible to add information which is not already explicitly
- there. Using the b-spline techniques suggested in the last
- program, it is possible to generate more data based on the
- implied relationship of the points to each other.
-
- 1. Build a program which reads in a series of points, constructs
- a spline along those points, and finally approximates the
- spline with a new set of points at twenty times the density
- of the original defining points.
-
-
- XV. Program to Reduce Resolution:
- There are cases in which the detail of the database might be
- too much for the application. This overkill would not only
- slow the display repaint down unnecessarily, but would consume
- extra disk space.
-
- 1. Develop an algorithm to cull unneeded points from a database
- (.mp1 format) outputing the new shorter file. The trick is
- to dispose of "extra" points without deforming the coastland
- being reduced. The simplest approach would be to skip 9 points
- out of every 10 if you wanted an output with one tenth the
- resolution. That might work tolerably if you were sure of
- a uniform distribution of points to begin with. A better
- solution is to use the "spheremi()" function developed previously
- to skip those points closer together than the resolution you
- require. The algorithm is to accept the first point and to
- look for the next point that falls outside the radius of
- minimum resolution from the first point. Write out this
- accepted point. It now becomes your new first point.
-
- 2. There may be cases in which the points are separated by
- distances greater than the minimum resolution but which fall
- almost in a straight line. Define a minimum channel width.
- Points falling within this channel can be replaced by a
- single straight line from the first point in the channel to
- the last point in the channel. This algorithm is a little
- more challenging and a little more compute intensive. It
- assumes that the points have passed the minimum radius test
- outlined above. Starting with the second point beyond the
- anchor point, imagine a line back to the anchor point. If
- the first point beyond the anchor point is within the channel
- width's distance to that line, it may be discarded. Advance
- to point 3 and check points 2 AND point 1 again. The process
- stops when a point n is chosen such that one of the points 1
- through n-1 falls outside the channel. Point n-1 is retained.
-
- You can see the need for checking back through all the points
- to the anchor each time if you consider what would happen if
- you tried to reduce a coastland whose points all gently arced
- around in a complete circle. Adjacent points would always
- be within the channel while the overall shape is obviously not
- a straight line! You can also appreciate the non-linear
- aspect of the number of calculations required as you walk
- back further and further to discard more and more points.
-
- I am not convinced that these two approaches to database pruning
- outlined above will always yield satisfactory results. Grotesque
- spurs not representative of the original coastal outline might
- in some cases be generated (or rather left). Play with this
- problem and see if you can come up with a better solution.
-
-
- XVI. A Program to Generate Pseudo Detail:
- The June 1982 issue of the Communications of the ACM contains
- the article "Computer Rendering of Stochastic Models" authored
- by three individuals, one from Lucasfilm. The abstract reads
- in part "A recurrent problem in generating realistic pictures
- by computers is to represent natural irregular objects and
- phenomena without undue time or space overhead.... A major
- advantage of this technique is that it allows us to compute
- the surface to arbitrary levels of details without increasing
- the database. Thus objects with complex appearances can be
- displayed from a very small database." The authors go on to
- give example code in Pascal (page 376) and generate a map of
- Australia from only eight points!
-
- 1. Obtain the article and implement a two dimensional version for
- use based on data from The World Digitized.
-
-
- XVII. A Program to Edit Graphics:
- Programmers have written more text editors than you can shake a
- stick at. A GOOD graphics editor for .mp1 files would be unique
- and useful (The World Digitized containing assorted, and we might
- add, minor errors). Without a graphics editor, the process
- of relating mistakes from the graphics display program back to
- the .mp1 source file is difficult and error prone. In addition
- the changed .mp1 file must be translated into its .mp2 version
- before redisplay and confirmation.
-
- 1. Write a graphics editor for .mp1 files. To keep the response
- snappy, it should not display the whole or large sections of
- a database file unless asked to do so. One should be able to
- ask for a latitude and longitude at which point the graphics editor
- scans the .mp1 text file looking points in that location's vicinity.
- N points (10 to 100, a setable value) should be displayed. The
- program must calculate the proper world co-ordinates based on the
- points chosen for this display. The exact point requested should
- be marked. Points themselves should be marked with small circles
- and linked with straight lines. The editor should allow points
- to be deleted, moved, or added using keypad control for selection
- and positioning. Multiple scans forward and backward through
- the database should be allowed.
-
- The problems of writing good programs fall into two parts: writing
- a good design specification and choosing the appropriate algorithm
- for implementation. This project is challenging on both counts.
- Writing a design spec must be a little like writing a murder mystery.
- You sit down, close your eyes, and ask what your user really wants
- to do. You dream up the smallest number of commands which will
- enable him to do this function well. You mull them over in your
- mind. The commands are your mystery characters. You want to develop
- their personalities fully. Are the commands coherent? Can they be
- simpler in syntax yet more powerful, ie. open-ended, all encompassing,
- or open to ways of use not forseen by you, the author. Of course there
- is a limit to what conjecture can accomplish. You must write the
- syntax of your user interface (language) down and program it. If
- the application is obvious or if you're experienced, your first pass
- attempt may be the final version. More often, however, we learn
- from exercising this prototype. That's why there are so many version
- 2.0 programs floating around!
-
- The graphics editor program may have (depending on your final design)
- commands such as:
-
- FIND latitude longitude
- SEARCH FORWARD
- SEARCH BACKWARD
- SEARCH ALL
- SEARCH ONE
- SET DISPLAY n
- DELETE
- MOVE
- ADD
- UNDO LAST
- UNDO ALL DISPLAYED
- DISPLAY ORIGINAL
- DISPLAY NOORIGINAL
- MEASURE DISTANCE
- MEASURE LENGTH
- EXIT
- QUIT
-
- You have the choice of implementing your grammar in a type-it-in
- interface if you're from the I-like-to-type school or as a series
- of menus if you're from the button-pushing school. Unless you're
- very experienced, either interface is a small project in and of
- itself in the graphics display context where you usually must
- solicit and display each character yourself while handling the
- delete, backspace, and newline functions normally taken care of by
- the terminal driver.
-
- Just as important as what the graphics editor is going to do is
- how it is going to do it. Issues of simplicity and performance
- loom before us. Text editors usually manipulate an in-memory linked
- list of lines. Large files complicate the issue by forcing portions
- of this linked list to be written to disk as internal buffers are
- filled. Functions such as the unlimited backward scan of text may
- be inhibited or become programmatically complex.
-
- This graphics editor is different from a text editor in that while
- it most assuredly does handle large text files, most of the changes
- to be made are minor in comparison to the bulk of data which is
- already in place. Therefore a simpler strategy for recording
- changes, additions, and deletions is in order. One method is for
- the editor to keep track of the line numbers of the displayed points.
- When changes, additions, or deletions are made, records of these
- transactions along with the related source code line numbers are
- stored in an in-memory structure. The structure may have either
- linked records, be indexed in some fashion, or be sequentially
- scanned for access. The details and trade offs of the strategy
- are best left to the implementor. In any event, after a change
- has been made to a section of the display and that section is left
- and returned to or searched for later, the new version must be
- displayed rather than the original version (except upon request).
- A new .mp1 file must be created at editor exit time by copying the
- original to the new with the appropriate changes folded in. The
- original .mp1 file should be renamed with a .bak extension.
-
-
- XVIII. A Program to View the World Digitized as a Globe:
- Until this point we have been using The World Digitized in two
- dimensional applications. Although perphaps not obvious, The World
- Digitized is inherently a 3 dimensional database. The co-ordinates
- of latitude and longitude are mappings from a sphere, a three
- dimensional solid.
-
- 1. Create a function which will translate co-ordinates given in
- latitude/longitude to Cartesian co-ordinates. The input arguments
- are latitude, longitude, and altitude above the surface of the
- earth, and the output arguments x, y, and z. Define the x-y
- plane to lie in the plane defined by the great circle of the
- equator with the positive x axis running from the center of the earth
- (the origin) through the Prime Meridian (longitude = 0). In keeping
- with right handed conventions, the positive z axis runs from the
- earth's center through the Georgraphic North Pole.
-
- 2. Use the function created in step 1 to display .mp2 files in
- 3 space. The details of the three-dimensional matrix transforms
- and projections are beyond the scope of this tutorial. Rogers'
- and Adams' book mentioned above treat these subjects thoroughly.
- A few general observations are in order, however. You will have
- to choose a view point for your perspective, beyond the surface
- of the earth to begin with. The view point for your projection
- can be at infinity or at some finite distance. You may want to
- choose your initial view point along the x axis (y = z = 0).
-
- Objects on the far side of the earth will be visible unless you
- clip them. One solution is to clip everything beyond a plane
- passing through the center of the earth and lying parallel to the
- plane of the display. This is known as z-clipping although if
- your view point lies on the positive x axis it would be literally
- -x axis clipping.
-
- Objects which lie toward the limb of the earth will be viewed
- almost edge on. You may have noticed that the horizon from
- satellite pictures is indistinct. That phenomenon may be due,
- in part, to the additional haze of the earth atmosphere, but at
- best those objects would be hard to distinguish because of
- perspective. You may wish to clip objects not only on the far
- side of the earth, but those just on this side of the horizon.
-
-
-
- XIX. A Program to Address the Speed/Detail Dilemma:
- One of the most difficult problems facing graphic application
- developers is speed. If you haven't noticed, you soon will that
- even a simple application such as displaying The World Digitized
- consumes appriciable time. People expect response in seconds.
- More than 3 to 5 seconds can be a long wait for some applications.
- The simple display program developed above can display at a rate
- approaching 200 vectors/second on a vanilla IBM PC with math chip
- (not sure it's being used). That implies that the full The World
- Digitized database, some 100,000+ co-ordinates, would take on
- the order of ten minutes to display! Fortunately the detail
- of the entire database is not needed when the full breadth of the
- database is presented. The problem, then, becomes one of dynamically
- trading off detail for speed depending on need.
-
- 1. Design a display module for the simple display program outlined
- above which will minimize display time by using only the detail
- necessary for the current zoom factor. I am aware of no
- practical solution to this most practical problem. The solution
- which first jumps to mind is using some form of indexing, first
- of all to limit the range of file scanning for high zooms, and
- secondly to skip the detail unnecessary in large area displays.
- The problems implicit in this solution, however, jump to mind almost
- as fast. Different levels of indexing would be required by
- differing zoom factors. A simple file organization into which to
- index isn't obvious. The twin problems of data scope and detail
- remain. One trick which may be helpful, however, is to paint the
- central portion of any given display first. While the user is
- studying what probably interests him most, the program can go on
- to finish the details around the edges or informationally ambiguous
- areas. (If any of you have a good solution, drop me a line. I
- may not be able to reply, but I certainly stand ready to learn.)