Skip to Main Content


The Most Irrational Number 
 

 


 

Here is the TrueBasic program that generated the images of seed packing.
! seed packing

LET s = 400
! set window size - large to make room for type
SET WINDOW 0,s,0,s
LET g = .5*(5^(.5)+1) ! set spacing factor
!LET g = sqr(2)
!LET g = pi
!LET g = 7/31
LET n = 80 ! set number of seeds
LET a = 30 ! set size of (eqil triang) seed
LET i = 1 ! initialize
LET m = a/2
DIM h(200) ! NOTE this must be at least n

DO while i < n+1
   LET x = (i*g - int(i*g)) * s !calculate ith x-coordinate
   LET gim = x - m
      IF gim < 0 THEN ! fix to be mod s
      LET gim = gim + s
      END IF
   LET gip = x + m
      IF gip > s THEN ! fix to be mod s
      LET gip = gip - s
      END IF
   LET h(i) = m*sqr(3) !h(i) will be height of APEX
   LET j = 1
   DO while j < i
      LET xj = (j*g - int(j*g)) * s
      LET gjm = xj - m
         IF gjm < 0 THEN
         LET gjm = gjm + s ! fix to be mod s
         END IF
      LET gjp = xj + m
         IF gjp > s THEN ! fix to be mod s
         LET gjp = gjp - s
         END IF
      CALL hij( gim, gip, gjm, gjp)
      IF hnew > h(i) THEN
         LET h(i) = hnew
      END IF
      LET j = j + 1
   LOOP
   CALL tri ( x, h(i))
   LET i = i + 1
   Pause .1
LOOP

SUB hij(gim, gip, gjm, gjp) !correction to height i to miss triangle j
   CALL dif (gip, gjm) !determine overlap between base of
   IF d < 0 THEN !i-th triangle and base of j-th
      LET hnew = m*sqr(3)
      EXIT SUB
   END IF
   CALL dif (gip, gjm + m)
   IF d < 0 THEN
      LET hnew = h(j) + sqr(3)*(gip-gjm)
      EXIT SUB
   END IF
   CALL dif (gip, gjp)
   IF d < 0 THEN
      LET hnew = h(j) + m*sqr(3)
      EXIT SUB
   END IF
   CALL DIF (gim, gjm + m)
   IF d < 0 THEN
      LET hnew = h(j) + m*sqr(3)
      EXIT SUB
   END IF
   CALL DIF (gim,gjp)
   IF d < 0 THEN
      LET hnew = h(j) - sqr(3)*(gim-gjp)
      EXIT SUB
   END IF
   LET hnew = m*sqr(3)
END SUB

SUB dif (a, b) !calculate distances mod s
   LET d = a - b
   IF d < -s/2 THEN
      LET d = d + s
      EXIT SUB
   END IF
   IF d > s/2 THEN
      LET d = d - s
      EXIT SUB
   END IF
END SUB

SUB tri (a,b) !draw triangle and plot i inside
   PLOT a-m,b-m*sqr(3);a,b
   PLOT a,b;a+m,b-m*sqr(3)
   PLOT a-m,b-m*sqr(3); a+m,b-m*sqr(3)
   PLOT TEXT, at a-8,b-m*sqr(3)+2: str$(i)
END SUB
GET key zz
END

 


Back to previous irrational page.

Back to first irrational page.