@retrogamer16

Программа рисующая графики странно отображает графики тригонометрических функций.Как исправить?

Я написал программу которая рисует графики по функциям.Когда я попытался создать график по функции 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):
60588dc50fd74435469804.png
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 1
HemulGM
@HemulGM Куратор тега Python
Delphi Developer, сис. админ
Линии она не рисует от точки к точке, рисует только вычисленные точки

Метод def TkGraph(): у тебя рисует только точки:
canvas.create_oval(xgraph, y, xgraph+2, y+2, fill="black")

Рисуй линию от предыдущей точки

Они страдают той же проблемой(смотрел вот этот )

Это питон страдает от студентов...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы