Я написал программу которая рисует графики по функциям.Когда я попытался создать график по функции sin(x),я увидел совсем не то что ожидал.Синусоид было аж шесть.С другими тригонометрическими функциями она работает тоже неадекватно,а вот парабола получается волне нормальная.Я попробовал посмотреть другие такие программы на питоне.Они страдают той же проблемой(
смотрел вот этот )
Вот код:
from tkinter import *
from tkinter import messagebox as messagebox
from math import *
from random import *
canvas_width = 1000
canvas_height = 500
root2 = Tk()
root2.title("PyGraph")
def TkGraph():
global x
global min_x
global max_x
global min_x2
global max_x2
global step
global step2
global function2
global canvas
global root
if x < max_x2:
x += step2
xgraph = x + 1000
y = eval(function2) + 1000
print(str(x) + " " + str(y))
canvas.create_oval(xgraph, y, xgraph+2, y+2, fill="black")
root.after(1,TkGraph)
else:
messagebox.showinfo(title="done", message="Graphic is done")
x = min_x2
def create_graphic():
global min_x
global max_x
global min_x2
global max_x2
global step
global step2
global x
global function2
global canvas
global root
try:
function2 = str(function.get())
min_x2 = int(min_x.get())
max_x2 = int(max_x.get())
step2 = float(step.get())
x = min_x2
except Exception as e:
messagebox.showerror(title="Error", message="Something wrong with function,max/min x or step.Error Code:" + str(e.__class__))
print("Something wrong with function,max/min x or step.")
else:
root = Toplevel(root2)
frame=Frame(root,width=canvas_width,height=canvas_height)
frame.pack(expand=True, fill=BOTH)
canvas = Canvas(frame,
width=canvas_width,
height=canvas_height,
scrollregion=(0,0,canvas_width * 10,canvas_height * 10))
hbar=Scrollbar(frame,orient=HORIZONTAL)
hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=canvas.xview)
vbar=Scrollbar(frame,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=canvas.yview)
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)
canvas.pack(expand=YES, fill=BOTH)
canvas.create_line(1000, 0, 1000, 11000, fill="red")#xyxy
canvas.create_line(0, 1000, 10000, 1000, fill="red")
root.after(1,TkGraph)
root.mainloop()
Label1 = Label(text="function y(x)")
Label1.pack()
function = StringVar()
func_entry = Entry(textvariable=function)
func_entry.pack()
Label2 = Label(text="min x")
Label2.pack()
min_x = StringVar()
minx_entry = Entry(textvariable=min_x)
minx_entry.pack()
Label3 = Label(text="max x")
Label3.pack()
max_x = StringVar()
maxx_entry = Entry(textvariable=max_x)
maxx_entry.pack()
Label4 = Label(text="step")
Label4.pack()
step = StringVar()
maxx_entry = Entry(textvariable=step)
maxx_entry.pack()
Graph_button = Button(text="Make Graphic", command=create_graphic)
Graph_button.pack()
root2.mainloop()
Заранее прошу прощение за кривой код.
График функции sin(x)*100 (step:5):