Advertisement
phjoe

Koch+Sierp

Jan 23rd, 2015
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import appuifw as A
  2. import graphics as G
  3. import math
  4.  
  5. ''' Koch Square + Sierpinski Triangle '''
  6.  
  7. lock,run=A.e32.Ao_lock(),1
  8. w,h=G.sysinfo.display_pixels()
  9. img=G.Image.new((w,h))
  10. def exit():
  11.  lock.signal()
  12. def draw(x):
  13.  if img:canvas.blit(img)
  14.  
  15. A.app.screen='full'
  16. canvas=A.Canvas(redraw_callback=draw)
  17. A.app.body=canvas
  18. A.app.exit_key_handler=exit
  19.  
  20. def triangle(x0,y0,x1,y1,x2,y2):
  21.  a=math.sqrt((x1-x0)**2 + (y1-y0)**2)
  22.  b=math.sqrt((x2-x1)**2 + (y2-y1)**2)
  23.  c=math.sqrt((x0 - x2) ** 2 + (y0 - y2) ** 2)
  24.  if (a < 2) or (b < 2) or (c < 2): return
  25.  x3=(x0+x1)/2
  26.  y3=(y0+y1)/2
  27.  x4=(x1+x2)/2
  28.  y4=(y1+y2)/2
  29.  x5=(x2+x0)/2
  30.  y5=(y2+y0)/2
  31.  
  32.  img.line([(int(x3), int(y3)),(int(x4), int(y4))], color)
  33.  img.line([(int(x4), int(y4)),(int(x5), int(y5))], color)
  34.  img.line([(int(x5), int(y5)),(int(x3), int(y3))], color)
  35.  canvas.blit(img)
  36.  
  37.  triangle(x0,y0,x3,y3,x5,y5)
  38.  triangle(x3,y3,x1,y1,x4,y4)
  39.  triangle(x5,y5,x4,y4,x2,y2)
  40.  
  41. def square(ax,ay,bx,by):
  42.  f=math.sqrt((bx-ax)**2 + (by-ay)**2)
  43.  if f < 1:return
  44.  f3=f/3
  45.  cs=(bx-ax)/f
  46.  sn=(by-ay)/f
  47.  cx=ax+cs*f3
  48.  cy=ay+sn*f3
  49.  h=f3*math.sqrt(3)/2
  50.  dx=(ax+bx)/2+sn*h
  51.  dy=(ay+by)/2-cs*h
  52.  ex=bx-cs*f3
  53.  ey=by-sn*f3
  54.  triangle(cx,cy,dx,dy,ex,ey)
  55.  square(ax,ay,cx,cy)
  56.  square(cx,cy,dx,dy)
  57.  square(dx,dy,ex,ey)
  58.  square(ex,ey,bx,by)
  59.  
  60. cw=ch=w/2
  61. r=cw
  62. off=270.0*math.pi/180
  63. a = (2 * math.pi / 3)
  64. color=0xfffeef
  65.  
  66. img.clear(0)
  67. for k in range(3):
  68.  x0=cw+r*math.cos(a*k+off)
  69.  y0=ch+r*math.sin(a*k+off)
  70.  x1=cw+r*math.cos(a*(k+1)+off)
  71.  y1=ch+r*math.sin(a*(k+1)+off)
  72.  square(x0,y0,x1,y1)
  73.  
  74. x2=cw+r*math.cos(a+off)
  75. y2=ch+r*math.sin(a+off)
  76. triangle(x0,y0,x1,y1,x2,y2)
  77.  
  78. img.save(u'e:\\kochsierpinski.png')
  79. lock.wait()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement