Advertisement
Guest User

Untitled

a guest
Mar 29th, 2015
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.49 KB | None | 0 0
  1. from tkinter import Tk, Canvas, mainloop
  2. from math import *
  3.  
  4. WIDTH, HEIGHT = 640, 480
  5. BACKGROUND_COLOR = "#000"
  6. PLOT_COLOR = '#aaa'
  7. AXIS_COLOR = '#0f0'
  8. BORDER_COLOR = '#a00'
  9. GRID_COLOR = '#040'
  10. EPSILON = 10e-8
  11.  
  12. window = Tk()
  13. canvas = Canvas(window, width=WIDTH, height=HEIGHT, bg=BACKGROUND_COLOR)
  14. canvas.pack()
  15.  
  16. a, b = -2.1, 2.1
  17. if a == b:
  18.     a += EPSILON
  19.     b -= EPSILON
  20.  
  21. def f(x):
  22.     if x == 0:
  23.         x = EPSILON
  24.     return sin(1/x)*10
  25.     # return x**2
  26.     # return 1
  27.     # return -x**2
  28.  
  29. PADDING = 50
  30. minx, miny = PADDING, PADDING
  31. maxx, maxy = WIDTH - PADDING, HEIGHT - PADDING
  32. ymin = ymax = f(a)
  33.  
  34. for xx in range(minx, maxx + 1):
  35.     x  = a + xx * (b - a) / maxx
  36.     y  = f(x)
  37.     if (y < ymin):
  38.         ymin = y
  39.     if (y > ymax):
  40.         ymax = y
  41. if ymax == ymin:
  42.     ymax += EPSILON
  43.     ymin -= EPSILON
  44.  
  45. def drawGraph():
  46.     yy = (ymax - f(a)) / (ymax - ymin) * (maxy - miny) + PADDING
  47.     xx0, yy0 = minx, round(yy)
  48.     # print(str(xx0) + ' ' + str(yy0))
  49.     for xx in range(minx + 1, maxx + 1):
  50.         x  = a + (xx - minx)* (b - a) / (maxx - minx)
  51.         y  = f(x)
  52.         yy = (ymax - y) / (ymax - ymin) * (maxy - miny) + PADDING
  53.         # print(str(xx) + ' ' + str(yy))
  54.         canvas.create_line(xx0, yy0, xx, yy, fill=PLOT_COLOR)
  55.         canvas.create_line(xx, yy, xx0, yy0, fill=PLOT_COLOR)   #kostyl
  56.         xx0, yy0 = xx, yy
  57.     # print(str(xx) + ' ' + str(yy))
  58.  
  59. def drawAxis():
  60.     xx0 = minx + (0 - a) * (maxx - minx) / (b - a)
  61.     if xx0 >= minx and xx0 <= maxx:
  62.         canvas.create_line(xx0, miny - PADDING, xx0, maxy + PADDING, fill=AXIS_COLOR)
  63.  
  64.     yy0 = (ymax - 0) / (ymax - ymin) * (maxy - miny) + PADDING
  65.     if yy0 >= miny and yy0 <= maxy:
  66.         canvas.create_line(minx - PADDING, yy0, maxx + PADDING, yy0, fill=AXIS_COLOR)
  67.     pass
  68.  
  69. def drawGrid():
  70.     for x in range(ceil(a), floor(b + 1)):
  71.         xx = minx + (x - a) * (maxx - minx) / (b - a)
  72.         canvas.create_line(xx, miny - PADDING, xx, maxy + PADDING, fill=GRID_COLOR)
  73.     for y in range(ceil(ymin), floor(ymax + 1)):
  74.         yy = (ymax - y) / (ymax - ymin) * (maxy - miny) + PADDING
  75.         canvas.create_line(minx - PADDING, yy, maxx + PADDING, yy, fill=GRID_COLOR)
  76.  
  77. def drawBorders():
  78.     xx = minx
  79.     canvas.create_line(xx, miny - PADDING, xx, maxy + PADDING, fill=BORDER_COLOR)  
  80.     xx = maxx
  81.     canvas.create_line(xx, miny - PADDING, xx, maxy + PADDING, fill=BORDER_COLOR)
  82.     yy = PADDING
  83.     canvas.create_line(minx - PADDING, yy, maxx + PADDING, yy, fill=BORDER_COLOR)
  84.     yy = maxy
  85.     canvas.create_line(minx - PADDING, yy, maxx + PADDING, yy, fill=BORDER_COLOR)
  86.  
  87. drawGrid()
  88. drawBorders()
  89. drawAxis()
  90. drawGraph()
  91. mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement