coding utf-8 from math import from tkinter import def Grafik Xmin Xmax

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# -*- coding: utf-8 -*-
from math import *
from tkinter import *
def Grafik(F, Xmin, Xmax,n, W, H):
INF = float('inf')
def II(x):
# функция масштабирования по оси ОХ
return I1+int((x-Xmin)*(I2-I1)/(Xmax-Xmin))
def JJ(y):
# функция масштабирования по оси ОY
return J2+int((y-Ymin)*(J1-J2)/(Ymax-Ymin))
# вычисление шага по оси ОХ
h = (Xmax-Xmin)/n
XY = [] # список координат пикселей холста [x1, y1, x2, y2, ...]
y = [] # список ординат функции
x = Xmin
Ymin = INF; Ymax = -INF
for i in range(n):
y.append(F(x))
x += h
# определение максимального и минимального значений F(x)
Ymin = min(y); Ymax = max(y)
root = Tk()
root.title('График функции F(x)')
# создание холста
canv = Canvas(root, width = W, height = H, bg = "lightblue")
boundx = 70 # отступы слева и справа от края экрана
boundy = 50 # отступы снизу и сверху от края экрана
I1 = boundx; J1 = boundy
I2 = W - boundx; J2 = H - boundy
# построение осей координат
canv.create_line(II(0), JJ(Ymin)+5, II(0), JJ(Ymax)-5, width = 2) # ось OY
canv.create_line(II(Xmin)-5, JJ(0), II(Xmax)+5, JJ(0), width = 2) # ось OX
# штрихи по осям координат
dx = (Xmax - Xmin)/10
x = dx
while x <= Xmax:
canv.create_line(II(x), JJ(0)-5, II(x), JJ(0)+5, width = 2)
canv.create_text(II(x), boundy//2,text=str(int(100*x)/100))
x += dx
x = dx
while x >= Xmin:
canv.create_line(II(x), JJ(0)-5, II(x), JJ(0)+5, width = 2)
canv.create_text(II(x), boundy//2, text = str(int(100*x)/100))
x -= dx
dy = (Ymax - Ymin)/10
yt = dy
while yt <= Ymax:
canv.create_line(II(0)-5, JJ(yt), II(0)+5, JJ(yt), width = 2)
canv.create_text(boundx//2, JJ(yt), text = str(int(100*yt)/100))
yt += dy
yt = dy
while yt >= Ymin:
canv.create_line(II(0)-5, JJ(yt), II(0)+5, JJ(yt), width = 2)
canv.create_text(boundx//2, JJ(yt), text = str(int(100*yt)/100))
yt -= dy
# построение графика
x = Xmin
for i in range(n): # пересчёт в координаты холста
XY.append(II(x))
XY.append(JJ(y[i]))
x += h
canv.create_line(XY, width = 2, fill = 'green', smooth = 1)
canv.pack()
root.mainloop()
def F(x):
if x == 0: f = 1
else: f = sin(x)/abs(x)
return f*abs(cos(5*x))
Xmin = -5*pi
Xmax = 5*pi
n = 200
# задание окна на экране
W = 800; H = 500 # размер холста
Grafik(F, Xmin, Xmax,n, W, H)