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 20145 days, 5 hours, 59 minutes ago.