The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

บทที่ 5 การประยุกต์ใช้เพื่อสร้างชิ้นงาน

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by chaowalert, 2019-12-18 01:54:31

บทที่ 5 การประยุกต์ใช้เพื่อสร้างชิ้นงาน

บทที่ 5 การประยุกต์ใช้เพื่อสร้างชิ้นงาน

LESSON

5 การประยกุ ตใ์ ช้

เพื่อสรา้ งช้ินงาน

การเรยี กใชง้ านไลบารสี าหรบั สรา้ งแผนภูมิ

Matplotlib เป็นไลบาร่ีท่ีนิยมมาก ๆ สาหรับการแสดงผลข้อมูลในรูปแบบแผนภูมิ ซึ่งใน QuantML
เรากม็ ีการใช้ library นีใ้ นการแสดงผลพื้นฐานอยู่เป็นประจา Matplotlib library ได้มีการเตรยี มรปู แบบกราฟ
ทน่ี ่าสนใจและเปน็ ประโยชนใ์ หก้ ับผู้ใชม้ ากมาย ยกตวั อย่างเชน่

• กราฟเสน้ (Line plots)
• กราฟการกระจายของจุด (Scatter plots)
• กราฟแทง่ และ ฮสิ โตรแกรม (Bar charts and Histograms)
• กราฟแผนภูมวิ งกลม (Pie charts)
• กราฟคอนทัวร์ (Contour plots)
• กราฟสเปคตรัม (Spectrograms)

ในpython มไี ลบรารี pylab ที่รวมฟงั ก์ชันทสี่ าคัญในการคานวณดา้ น คณติ ศาสตร์ และพลอต กราฟ
มาไวใ้ นโมดลู เดียวกัน โดยเราจะ import เพ่ือดึงเอาฟงั ก์ชนั เหลา่ นน้ั ออกมาไว้ในเนมสเปซโกลบอล ดงั นี้

from pylab import *

เทียบเท่ากับการเรยี ก

from numpy import *
from scipy import *
from matplotlib import *

ตวั อย่างที่ 5.1 ความสมั พันธ์กาลังสองและแผนภมู ิพาราโบลา

1 from pylab import* #เป็นการเรียกฟังกช์ นั จากโมดลู pylab

2 x =arange(-5,5) #ฟังก์ชัน arange() เป็นฟงั ก์ชันใน pylab ท่คี ืนค่าเป็น array

3 print(x)

4 y =x**2

5 print(y)

6 plot(x,y) #เปน็ การนาเอา x และy มาสรา้ งแผนภมู เิ ส้นจากความสมั พนั ธ์ y = x2

7 show() #เปน็ คาส่ังในการแสดงกราฟที่ได้จากคาสั่ง plot()

lesson 5 การประยกุ ตใ์ ชเ้ พ่ือสรา้ งชิน้ งาน 83

ผลลัพธ์ทีไ่ ด้คือ

ตัวอย่างท่ี 5.2 การเพ่ิมเสน้ กรดิ และข้อความบนแกน x y

1 from pylab import* #เพิ่มเสน้ กรดิ แสดงชว่ งจานวน
2 x =arange(-5,5,0.1) #คาอธิบายแกน x
3 y =x**2 #คาอธบิ ายแกน y
4 plot(x,y)
5 grid(True)
6 xlabel('x')
7 ylabel('y')
8 show()

ผลลัพธท์ ี่ได้คือ

lesson 5 การประยกุ ตใ์ ชเ้ พื่อสรา้ งชิ้นงาน 84

ตัวอยา่ งท่ี 5.3 การมีกราฟหลายเสน้

1 from pylab import*
2 x =arange(-5,5)
3 y1 =x**2
4 y2 =2*x
5 plot(x,y1)
6 plot(x,y2)
7 grid(True)
8 xlabel('x')
9 ylabel('y')
10 show()

ผลลัพธท์ ่ีไดค้ ือ

ตวั อย่างที่ 5.4 การสร้าง histogram

1 from pylab import* #เปน็ การสมุ่ ตัวเลข 10000 ตวั ใหก้ ับ array x
2 x =randn(10000) #พลอต histogram 100 ช่วงจากข้อมูล x
3 hist(x,100)
4 show()

ผลลพั ธ์ท่ีไดค้ ือ

lesson 5 การประยกุ ตใ์ ชเ้ พื่อสรา้ งชิ้นงาน 85

1. การประยกุ ตด์ า้ นคณติ ศาสตรแ์ ละสถิติ

ตัวอยา่ งท่ี 5.5 การคานวณค่าเฉลยี่ มธั ยฐาน และส่วนเบ่ยี งเบนมาตรฐานของคะแนนสอบ

1 from pylab import*
2 score = [20,23,18,25,15,18,22,20,24,17]
3 means=mean(score)
4 medians = median(score)
5 stds = std(score)
6 print("Mean:", means)
7 print("Median:", medians)
8 print("Standard deviation:", stds)

ผลลพั ธ์ทีไ่ ดค้ ือ

2. การประยกุ ตด์ า้ นวทิ ยาศาสตร์

ตัวอย่างโปรแกรมท่ี 5.6 การเคล่อื นทแ่ี บบโพรเจกไทล์

เขยี นโปรแกรมเพอื่ รบั ความเร็วตน้ (เมตร/วนิ าที) และมุมเงย (องศา) ที่ลกู กระสุนถูกยิงออกจากปนื

ใหญ่ จากนั้นแสดงระยะทางในแนวราบท่ีลกู ปนื เคลื่อนท่ีได้กอ่ นตกถงึ พ้ืน ระยะในแนวดิ่งสงู สุด และเวลาตง้ั แต่

ลูกปืนถูกยงิ จนกระทงั่ ตกถึงพื้น รวมถึงสรา้ งแผนภมู ิแสดงเสน้ ทางการเคล่ือนที่ของลูกปืนในแนวแกน x และ y

โดยสมมตวิ า่ ปนื ใหญม่ ขี นาดเล็กมาก แรงต้านอากาศไม่มผี ลตอ่ การเคลื่อนท่ี และความเร่งจากแรงโนม้ ถ่วง

เท่ากับ 9.8 m/s2 ในเบื้องต้นคานวณสูตรทีจ่ ะนาไปใชใ้ นโปรแกรมโดยใหค้ วามเรว็ ตน้ เท่ากับ u เมตร/วนิ าที

คานวณความเรว็ ต้นในแนวราบและแนวด่ิงได้ดังน้ี

ux = u  cos

uy = u  cos
คานวณเวลาท่ีลูกปืนลอยอยู่ในอากาศจากความสมั พนั ธ์

= − 1 2
2
เมอ่ื g คือความเรง่ จากแรงโน้มถ่วง และ sy คอื ระยะกระจัดในแนวดิ่ง จงึ คานวณเวลาท่ีลูกปืนอยู่ทตี่ าแหนง่

เดิมจากความสัมพันธข์ ้างต้นได้โดยกาหนดให้ sy = 0

= − 1 2
2

= 1 2
2

= 2


lesson 5 การประยกุ ตใ์ ชเ้ พ่ือสรา้ งชน้ิ งาน 86

เวลาท่ีลูกปืนอยูท่ ่ีจุดสงู สุดจงึ เป็นครง่ึ หน่ึงของเวลาข้างต้น ซ่งึ เท่ากบั uy/g นาเวลาท่ีไดม้ าคานวณหาระยะ
กระจดั ทลี่ ูกปนื เคล่ือนที่ได้ในแนวราบก่อนท่ีจะตกถงึ พนื้ ซ่ึงเป็นการเคลื่อนท่โี ดยไมม่ คี วามเรง่ ระยะกระจัดใน
แนวราบจงึ เทา่ กับ

=

นาสมการเหลา่ น้ีมาเขยี นเป็นโปรแกรมดงั นี้

1 from pylab import *
2 u = float(input("Enter initial speed (m/s): "))
3 theta = float(input("Enter angle (degree): "))
4 g = 9.8
5 ux = u*cos(radians(theta))
6 uy = u*sin(radians(theta))
7 total_time = 2*uy/g
8 sx = ux*total_time
9 def height(t):
10 return uy*t - (g*t**2)/2
11 max_height = height(total_time/2)
12 print("Distance =", sx, "meters.")
13 print("Maximum height =", max_height, "meters.")
14 print("Total time =", total_time, "seconds.")
15 t = linspace(0, total_time, 500)
16 plot(t*ux, height(t))
17 xlabel("Distance (m)")
18 ylabel("Height (m)")
19 grid(True)
20 show()

ผลลพั ธท์ ไี่ ด้คือ

lesson 5 การประยกุ ตใ์ ชเ้ พื่อสรา้ งชิน้ งาน 87

ตัวอยา่ งท่ี 5.7 ความถ่ีบตี ส์
บีตส์ของเสยี งเปน็ ปรากฏการณ์ที่คลืน่ เสียงสองคลนื่ ท่ีมคี วามถใี่ กล้เคยี งกนั ซ้อนทบั กันทาให้เกิดเสียง

ดงั เบาเป็นจงั หวะคงตัว ความถี่ของการดังข้นึ และเบาลงของเสียงทไี่ ด้ยินน้เี รยี กว่าความถี่บีตส์ ซง่ึ มคี า่ เท่ากับ
ผลต่างของความถตี่ ั้งต้นโดยมีความสัมพันธ์ดงั นี้

Δ = | 1 − 2|

เขียนโปรแกรมแสดงคลืน่ ความถ่ีทเี่ กดิ จากการผสมคลน่ื ซายน์ความถ่ี 10 และ 12 เฮริ ตซเ์ ขา้ ดว้ ยกนั โดยแสดง
คล่นื ในช่วงเวลา 0 ถงึ 2 วนิ าที ดงั น้ี

ตวั อย่างท่ี 5.7

1 from pylab import *
2 t = arange(0,2,0.001)
3 f1 = sin(2*pi*t*10)
4 f2 = sin(2*pi*t*12)
5 plot(t, f1+f2)
6 xlabel('Time (seconds)')
7 ylabel('Amplitude')
8 ylim(-3,3)
9 grid(True)
10 show()

ผลลัพธท์ ไี่ ดค้ ือ

lesson 5 การประยกุ ตใ์ ชเ้ พ่ือสรา้ งช้ินงาน 88

Python GUI

GUI คืออะไร

GUI ยอ่ มาจาก Graphical User Interface GUI (อ่านว่า จียูไอ หรอื กุย) คอื การตดิ ต่อกบั ผูใ้ ช้โดยใช้
ภาพสัญลักษณ์ เป็นการออกแบบส่วนของโปรแกรมคอมพิวเตอร์ให้มีการโต้ตอบกับผู้ใช้ โดยการใช้ Icon,
รูปภาพ และสัญลักษณ์อื่น ๆ เพื่อแทนลักษณะต่าง ๆ ของโปรแกรม แทนที่ผู้ใช้จะพิมพ์คาสั่งต่าง ๆในการ
ทางาน ช่วยทาให้ผูใ้ ชง้ านสามารถทางานได้ง่าย และรวดเร็วข้ึน ไมจ่ าเปน็ ต้องจดจาคาส่ังต่าง ๆ ของโปรแกรม
มากนัก ถือเป็นวิธีการให้ความสะดวกแก่ผู้ใช้คอมพิวเตอร์ ให้ติดต่อส่ือสารกับระบบโดยผ่านทางภาพ เช่น ใช้
เมาส์กดเลือก icon แทนการพิมพ์คาสั่งดังแต่ก่อน โดยเฉพาะในบางโปรแกรมท่ีมีคาสั่งมาก ๆ เช่น โปรแกรม
Autocad ทีใ่ ชใ้ นการวาดแบบ ซ่ึงจะมี คาส่ังต่าง ๆ ทใ่ี ช้ในการสรา้ งรูปมากมาย ผใู้ ช้สามารถใช้เมาส์ (mouse)
เลือกคาสั่งท่ีต้องการจะวาดจาก Icons ท่ีปรากฏในโปรแกรมและใช้งานได้เลย โดยไม่ต้องพิมพ์คาส่ังต่าง ๆ
ทางแป้นพิมพ์ ช่วยทาให้เกิดความรวดเร็วในการทางาน และไม่ต้องเสียเวลาในการเรียนรู้และจดจาคาสั่งท่ี
ตอ้ งการมากนกั เพยี งดจู าก Icons ทีป่ รากฏในโปรแกรมก็สามารถใชง้ านได้ทันที

สาหรับการเขียนโปรแกรมด้วยภาษา Python เพื่อสร้าง GUI ขึ้นมาไม่ได้มีแค่ Tkinter เท่านั้น
Python เองยังมี framework ตัวอ่ืน ๆ อีกเช่น WxPython, PyQt, JPython ซึ่งแต่ละตัวก็มีความสามารถ
โดดเด่นที่แตกต่างกัน แต่ในบทนี้เราจะใช้ Tkinter เพื่อสร้าง GUI ขึ้นมา ด้วยความท่ีไม่ซับซ้อนและไม่ต้องลง
หรือตดิ ตั้งอะไรเพ่มิ เตมิ ก็สามารถทีจ่ ะเรยี กใช้ได้เลย

ตวั อยา่ งท่ี 5.8 การสร้างหน้าตา่ ง application

1 from tkinter import *
2 root = Tk(className="My first GUI") # creates root window
3 root.mainloop() # To keep GUI window running

ผลลัพธ์ทีไ่ ด้คือ

จากตัวอย่างท่ี 5.8 เราทาการ เรียกใช้งานหรือ import module tkinter เข้ามาก่อน ไม่อย่างนั้นจะไม่
สามารถเรียกใช้งานได้ ด้วยโค้ด from tkinter import * หลังจากนั้นก็สร้าง instance ขึ้นมาโดยใช้ชื่อว่า
root ด้วยโค้ด root = Tk(className="My first GUI") ข้ันตอนสุดท้ายคือ การกาหนด mainloop ด้วย
โค้ด root.mainloop() ถ้าไม่มคี าสั่งนเี้ วลาเรารัน script กจ็ ะไมป่ รากฏหน้าตา่ งโปรแกรมข้ึนมา

lesson 5 การประยกุ ตใ์ ชเ้ พ่ือสรา้ งชน้ิ งาน 89

ตวั อย่างที่ 5.9 การสรา้ ง button

1 from tkinter import *
2 from tkinter import messagebox
3 root = Tk(className="My first GUI")
4 def helloCallBack():
5 msg=messagebox.showinfo( "Hello Python", "Hello World")
6 B = Button(root, text ="Hello", command = helloCallBack)
7 B.place(x=10,y=10)
8 root.mainloop()

ผลลพั ธท์ ่ีไดค้ ือ

จากตวั อย่างท่ี 5.9 อธิบายการทางานได้ดังน้ี
บรรทัดที่ 1 import ทกุ ๆอย่างทีอ่ ยู่ใน tkinter เข้ามาในแอพ
บรรทัดท่ี 2 import messagebox เขา้ มา เพอื่ ใช้ในการทดสอบวา่ เมื่อ click ทป่ี ุ่มแล้ว function
บรรทัดท่ี 3 สรา้ ง instance ของ tkinter ขึ้นมาเกบ็ ไวใ้ นตัวแปล top
บรรทดั ท่ี 4-5 ประกาศ function เอาไว้ เพ่ือใชง้ านในกรณที ่ีมีการ click ท่ปี ุ่มกจ็ ะมี mesage box
โชว์คาว่า Hello World ข้ึนมาในแอพ
บรรทดั ท่ี 6-7 สร้าง ปมุ่ (Button)
บรรทดั ท่ี 8 mainloop เพื่อให้หน้าจอปรากฏออกมา

lesson 5 การประยกุ ตใ์ ชเ้ พ่ือสรา้ งช้ินงาน 90

ตัวอย่างที่ 5.10 การสร้างกลอ่ งโต้ตอบ

1 from tkinter import * #บรรทดั น้ี import module tkinter เข้ามาใช้งาน
2 root = Tk(className="My first GUI") #บรรทดั นี้ สรา้ ง instance Tkinter เก็บไวท้ ต่ี วั แปร root
3 L1 = Label(root, text="User Name") #บรรทดั นสี้ รา้ ง Label ขน้ึ มาโดยมีข้อความวา่ "User Name"
4 L1.pack( side = LEFT) #ทาการ pack เพ่ือใหแ้ สดงบน application แลว้ กาหนดใหอ้ ยู่ชิดดา้ นซ้าย side = LEFT
5 E1 = Entry(root, bd =3) #สร้าง text input(Entry) ข้ึนมาโดยกาหนดให้มคี วามหนาของกรอบเท่ากบั 3 pixel
6 E1.pack(side = LEFT) #ทาการ pack เพื่อใหแ้ สดงบน application แลว้ กาหนดให้กล่องอยชู่ ดิ ด้านซ้าย
7 root.mainloop() #กาหนด mainloop ให้ทั้งหมดแสดงทห่ี น้าจอ

ผลลัพธ์ท่ีไดค้ ือ

ตัวอย่างที่ 5.11 การสร้าง radio button

1 from tkinter import *
2 def sel():
3 selection = "You selected the option" + str(var.get())
4 lable.config(text=selection)
5 root = Tk(className="My first GUI")
6 var = IntVar()
7 R1 = Radiobutton(root, text="เพศชาย", variable=var, value=1, command=sel)
8 R1.pack(side = LEFT)
9 R2 = Radiobutton(root, text="เพศหญงิ ", variable=var, value=2, command=sel)
10 R2.pack(side = LEFT)
11 R3 = Radiobutton(root, text="อ่นื ๆ", variable=var, value=3, command=sel)
12 R3.pack(side = LEFT)
13 label = Label(root)
14 label.pack()
15 root.mainloop()

ผลลัพธท์ ี่ได้คือ

lesson 5 การประยกุ ตใ์ ชเ้ พ่ือสรา้ งชิน้ งาน 91

ตวั อยา่ งท่ี 5.12 การสร้างเมนู

1 from tkinter import *
2 root = Tk(className="My first GUI")
3 li = ['C','python','php','html','SQL','java']
4 listb = Listbox(root)
5 for item in li:
6 listb.insert(0,item)
7 listb.pack(side = LEFT)
8 root.mainloop()

ผลลพั ธท์ ่ีได้คือ

lesson 5 การประยกุ ตใ์ ชเ้ พ่ือสรา้ งชน้ิ งาน 92


Click to View FlipBook Version