Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import Tk, Canvas, mainloop
- from math import *
- WIDTH, HEIGHT = 640, 480
- BACKGROUND_COLOR = "#000"
- PLOT_COLOR = '#aaa'
- AXIS_COLOR = '#0f0'
- BORDER_COLOR = '#a00'
- GRID_COLOR = '#040'
- EPSILON = 10e-8
- window = Tk()
- canvas = Canvas(window, width=WIDTH, height=HEIGHT, bg=BACKGROUND_COLOR)
- canvas.pack()
- a, b = -2.1, 2.1
- if a == b:
- a += EPSILON
- b -= EPSILON
- def f(x):
- if x == 0:
- x = EPSILON
- return sin(1/x)*10
- # return x**2
- # return 1
- # return -x**2
- PADDING = 50
- minx, miny = PADDING, PADDING
- maxx, maxy = WIDTH - PADDING, HEIGHT - PADDING
- ymin = ymax = f(a)
- for xx in range(minx, maxx + 1):
- x = a + xx * (b - a) / maxx
- y = f(x)
- if (y < ymin):
- ymin = y
- if (y > ymax):
- ymax = y
- if ymax == ymin:
- ymax += EPSILON
- ymin -= EPSILON
- def drawGraph():
- yy = (ymax - f(a)) / (ymax - ymin) * (maxy - miny) + PADDING
- xx0, yy0 = minx, round(yy)
- # print(str(xx0) + ' ' + str(yy0))
- for xx in range(minx + 1, maxx + 1):
- x = a + (xx - minx)* (b - a) / (maxx - minx)
- y = f(x)
- yy = (ymax - y) / (ymax - ymin) * (maxy - miny) + PADDING
- # print(str(xx) + ' ' + str(yy))
- canvas.create_line(xx0, yy0, xx, yy, fill=PLOT_COLOR)
- canvas.create_line(xx, yy, xx0, yy0, fill=PLOT_COLOR) #kostyl
- xx0, yy0 = xx, yy
- # print(str(xx) + ' ' + str(yy))
- def drawAxis():
- xx0 = minx + (0 - a) * (maxx - minx) / (b - a)
- if xx0 >= minx and xx0 <= maxx:
- canvas.create_line(xx0, miny - PADDING, xx0, maxy + PADDING, fill=AXIS_COLOR)
- yy0 = (ymax - 0) / (ymax - ymin) * (maxy - miny) + PADDING
- if yy0 >= miny and yy0 <= maxy:
- canvas.create_line(minx - PADDING, yy0, maxx + PADDING, yy0, fill=AXIS_COLOR)
- pass
- def drawGrid():
- for x in range(ceil(a), floor(b + 1)):
- xx = minx + (x - a) * (maxx - minx) / (b - a)
- canvas.create_line(xx, miny - PADDING, xx, maxy + PADDING, fill=GRID_COLOR)
- for y in range(ceil(ymin), floor(ymax + 1)):
- yy = (ymax - y) / (ymax - ymin) * (maxy - miny) + PADDING
- canvas.create_line(minx - PADDING, yy, maxx + PADDING, yy, fill=GRID_COLOR)
- def drawBorders():
- xx = minx
- canvas.create_line(xx, miny - PADDING, xx, maxy + PADDING, fill=BORDER_COLOR)
- xx = maxx
- canvas.create_line(xx, miny - PADDING, xx, maxy + PADDING, fill=BORDER_COLOR)
- yy = PADDING
- canvas.create_line(minx - PADDING, yy, maxx + PADDING, yy, fill=BORDER_COLOR)
- yy = maxy
- canvas.create_line(minx - PADDING, yy, maxx + PADDING, yy, fill=BORDER_COLOR)
- drawGrid()
- drawBorders()
- drawAxis()
- drawGraph()
- mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement