drawDymaxion.frink

Download or view drawDymaxion.frink in plain text format


/** Draws the countries of the world using the Buckminster Fuller "Dymaxion"
    icosahedral projection.
*/


use Country.frink
use geometry.frink
use Dymaxion.frink

g = new graphics
g.stroke[0.1 degree]
g.font["SansSerif", "bold", 1.5 degree]

for [code, country] = Country.getCountryList[]
{
   cc = new color[randomFloat[0,1], randomFloat[0,1], randomFloat[0,1], .8]

   first = true
   for poly = country.borders
   {
      p = new filledPolygon
      pl = new polyline
      for [long, lat] = poly
      {
         [x,y, tri] = Dymaxion.latLongToXY[lat degree, long degree]
         p.addPoint[x,-y]
         p.addPoint[x,-y]
      }

      g.color[cc]
      g.add[p]
      g.color[0,0,0,0.5]
      g.add[pl]
      

      // Draw country names.  The polygons in Country.frink are sorted so
      // that the largest polygon is first.  Label only the largest.
      if first
      {
         [clong, clat] = polygonCentroid[poly]
         g.color[0,0,0]
         [x,y] = Dymaxion.latLongToXY[clat degree, clong degree]
         g.text[code, x, -y]
      }
      first = false
   }
}


// Draw the numbers of the "triangles" used in the projection.
/*g.font["SansSerif" , 2 deg]
for lat = -90 deg to 90 deg step 10 deg
   for long = -180 deg to 180 deg step 10 deg
   {
      [x,y,tri] = Dymaxion.latLongToXY[lat, long]
      text=format[lat,deg,0] + "," + format[long,deg,0]
      g.text[tri,x,-y]
   }
*/


// Draw lines of latitude
/*
g.color[0.5, 0.5, 0.5, 0.5]   
for lat = -90 deg to 90 deg step 10 deg
{
   p = new polyline
   lasttri = 0
   for long = -180 deg to 180 deg step 1 deg
   {
      [x,y,tri,lcd] = Dymaxion.latLongToXY[lat, long]
      text=format[lat,deg,0] + "," + format[long,deg,0]
      if (lasttri == tri)
         p.addPoint[x,-y]
      else
      {
         g.add[p]
         p = new polyline
      }
      lasttri = tri
   }
   g.add[p]
}
   
// Draw lines of longitude
g.color[0.5, 0.5, 0.5, 0.5]   
for long = -180 deg to 180 deg step 10 deg
{
   p = new polyline
   lasttri = 0
   for lat = -90 deg to 90 deg step 1 deg
   {
      [x,y,tri,lcd] = Dymaxion.latLongToXY[lat, long]
      text=format[lat,deg,0] + "," + format[long,deg,0]
      if (lasttri == tri)
         p.addPoint[x,-y]
      else
      {
         g.add[p]
         p = new polyline
      }
      lasttri = tri
   }
   g.add[p]
} */


g.show[]
//g.write["world.svg", 1000, 500]
g.write["world.png", 1000, 500]


Download or view drawDymaxion.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19944 days, 12 hours, 32 minutes ago.