|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
# coding:utf-8
from tkinter import *
import numpy as np
import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
stye = 1
def draw_pic():
"""
获取GUI界面设置的参数,利用该参数绘制图片
"""
global stye
# 获取GUI界面上的参数
try:
samplepoint_x = int(inputentry_x.get())
samplepoint_y = int(inputentry_y.get())
accurate_unit = float(inputentry_straight_unit.get())
# accurate_unit2 = float(inputentry_circle_unit.get())
####################################################
circle_r = int(inputentry_r.get())
except:
samplepoint_x = 5
samplepoint_y = 10
print('请输入整数')
inputentry_x.delete(0, END)
inputentry_x.insert(0, '5')
inputentry_y.delete(0, END)
inputentry_y.insert(0, '10')
############################################
circle_r = 5
print('请输入整数')
inputentry_r.delete(0, END)
inputentry_r.insert(0, '5')
# 清空图像,以使得前后两次绘制的图像不会重叠
draw_pic.f.clf()
draw_pic.a = draw_pic.f.add_subplot(121)
draw_pic.b = draw_pic.f.add_subplot(122)
if stye == 0:
############################################################
# global accurate_unit
# 在[0,]范围内生成等距的1000个数据点
slope = samplepoint_y / samplepoint_x
x_axis = np.linspace(0, samplepoint_x, 1000)
# y = np.sqrt(4 - x ** 2)
y_axis = (slope * x_axis)
# color = ['b', 'r', 'y', 'g']
# 生成折线点
step_point_x = [0]
step_point_y = [0]
x = 0
y = 0
all_step = int((samplepoint_x + samplepoint_y) / accurate_unit)
for i in range(0, all_step):
v = y * samplepoint_x - x * samplepoint_y
if v >= 0:
x += accurate_unit
if v < 0:
y += accurate_unit
step_point_x.append(x)
step_point_y.append(y)
if stye == 1:
####################################################################
# global accurate_unit
# 在[0,]范围内生成等距的1000个数据点
x_axis = np.linspace(0, circle_r, 1000)
# y = np.sqrt(4 - x ** 2)
y_axis = np.sqrt(circle_r**2 - x_axis ** 2)
# color = ['b', 'r', 'y', 'g']
# 生成折线点
step_point_x = [circle_r]
step_point_y = [0]
x = circle_r
y = 0
all_step = int(2*circle_r / accurate_unit)
v = 0
for i in range(0, all_step):
if v >= 0:
v = v - 2 * x + accurate_unit
x -= accurate_unit
if v < 0:
v = v + 2 * y + accurate_unit
y += accurate_unit
step_point_x.append(x)
step_point_y.append(y)
######################################################
# 绘制正比例函数
draw_pic.a.plot(x_axis, y_axis, color='r')
draw_pic.b.plot(step_point_x, step_point_y, color='b')
axis_lim = max(samplepoint_x, samplepoint_y)
# draw_pic.a.set_xticks(np.linspace(0, axis_lim, axis_lim))
# draw_pic.a.set_xticklabels(np.linspace(0, axis_lim, axis_lim))
draw_pic.a.set_xlim(0, axis_lim)
draw_pic.a.set_ylim(0, axis_lim)
draw_pic.b.set_xlim(0, axis_lim)
draw_pic.b.set_ylim(0, axis_lim)
draw_pic.a.set_title('Straight_line')
draw_pic.canvas.show()
#def choise_type():
if __name__ == '__main__':
matplotlib.use('TkAgg')
root = Tk()
# 在Tk的GUI上放置一个画布,并用.grid()来调整布局
draw_pic.f = Figure(figsize=(8, 4), dpi=100)
draw_pic.canvas = FigureCanvasTkAgg(draw_pic.f, master=root)
draw_pic.canvas.show()
draw_pic.canvas.get_tk_widget().grid(row=0, columnspan=3)
inputentry_x = Entry(root)
inputentry_y = Entry(root)
inputentry_straight_unit = Entry(root)
inputentry_r = Entry(root)
#inputentry_circle_unit = Entry(root)
Label(root, text='插补分辨率:').grid(row=2, column=0)
inputentry_straight_unit.grid(row=2, column=1, columnspan=2)
inputentry_straight_unit.insert(0, '0.1')
def straight():
global stye
stye = 0
# 放置标签、文本框和按钮等部件,并设置文本框的默认值和按钮的事件函数
Label(root, text='请输入终点坐标:').grid(row=1, column=0)
inputentry_x.grid(row=1, column=1)
inputentry_x.insert(0, '5')
inputentry_y.grid(row=1, column=2)
inputentry_y.insert(0, '5')
Button(root, text='画图', command=draw_pic).grid(row=2, column=2, columnspan=3)
def circle():
global stye
stye = 1
# 放置标签、文本框和按钮等部件,并设置文本框的默认值和按钮的事件函数
Label(root, text='请输入圆弧半径:').grid(row=1, column=0)
inputentry_r.grid(row=1, column=1)
inputentry_r.insert(0, '5')
Label(root, text='插补分辨率:').grid(row=2, column=0)
Button(root, text='画图', command=draw_pic).grid(row=2, column=2, columnspan=3)
#Label(root, text='插补分辨率:').grid(row=2, column=0)
#inputentry_circle_unit.grid(row=2, column=1, columnspan=2)
#inputentry_circle_unit.insert(0, '0.5')
#Button(root, text='画图', command=draw_pic).grid(row=2, column=2, columnspan=3)
# 显示选择按钮
Button(root, text='直线', command=straight).grid(row=3, column=0, columnspan=2)
Button(root, text='圆弧', command=circle).grid(row=3, column=1, columnspan=2)
# 启动事件循环
root.mainloop()
|
|