คณิตศาสตร์กับโปรแกรมมิ่งมันเป็นยังไงนะ ตอนที่ 3 โจทย์พีทาโกรัส (จบ)


      ในบทความที่แล้วเราได้ลองทำไปโจทย์นึงก็คือโจทย์สร้างสามเหลี่ยมขึ้นมา คณิตศาสตร์กับโปรแกรมมิ่งมันเป็นยังไงนะ ตอนที่ 2 โจทย์พีทาโกรัส แต่ในบทความนี้เจ้าของบล็อกก็กะเอาให้จบอีก 2 โจทย์ที่เหลือเลย ซึ่งอีก 2 โจทย์ที่เหลือก็คือ สร้างวงกลมมาคลอบสามเหลี่ยมด้านเท่าที่พึ่งสร้างไปในบทความที่แล้วอีกที และอีกโจทย์สุดท้ายก็คือ ทำให้สามเหลี่ยมหมุนตามเข็มหรือทวนเข็มนาฬิกา


โจทย์วาดวงกลม

      มาดูที่โจทย์แรกของบทความนี้กันก่อน สร้างวงกลมคลอบสามเหลี่ยม หน้าตาก็จะออกมาประมาณนี้



      ผู้อ่านคิดว่า ถ้าเราจะสร้างวงกลมตัวนี้เนี่ย เราจำเป็นต้องรู้อะไรบ้าง


...

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



      แต่เมื่อลองสมมติจุดศูนย์กลางขึ้นมาก่อน แล้วลองลากเส้นจากจุดศูนย์กลางไปยังเส้นรอบวง จะเห็นว่าเราสามารถลากเส้นจากจุดศูนย์กลางไปยังมุมต่าง ๆ ของสามเหลี่ยมได้เลย เท่านี้เราก็หาจุดศูนย์กลางกับรัศมีได้สบาย ๆ เลย

      เจ้าของบล็อกจะลองลากเส้นให้ดู เผื่อเห็นภาพมากขึ้น



      เท่านี้ก็น่าจะพอมองออกแล้วนะ มันก็คือสามเหลี่ยมมุมฉากนั่นแหละ และพอเป็นสามเหลี่ยมมุมฉาก เราก็สามารถใช้ ทฤษฎีบทพีทาโกรัสได้เช่นกัน

      แต่อย่าลืมว่าตอนนี้เรารู้ความยาวด้านสามเหลี่ยมแค่ด้านเดียวเองนะ ก็คือความยาวฐานเป็น ความยาวด้าน / 2 


      ถ้าเรารู้ด้าน c เราก็จะรู้รัศมี ถ้าเรารู้ด้าน b เราก็จะรู้ว่าจุดศูนย์กลางอยู่สูงกว่าพิกัดจุด B มากแค่ไหน (จุดสีเขียวที่อยู่ซ้ายล่าง) 

      เราควรหาอะไรก่อนดี..?

      เจ้าของบล็อกไม่ต้องบอก ก็เชื่อว่าผู้อ่านคงรู้อยู่แล้ว (มั้ง) ว่าเราควรหาจุด c ก่อน เพื่อที่จะทราบรัศมีนั่นเอง แต่อย่างที่บอกว่าตอนนี้เรารู้แค่ความยาวฐาน แล้วเราจะหา c ยังไง

      ลองนึกภาพสามเหลี่ยมนี้ดี ๆ ว่ามันคือสามเหลี่ยมด้านเท่า และเมื่อมันเป็นสามเหลี่ยมด้านเท่า นั่นหมายความว่า มุมทุกมุมต้องเท่ากัน สามเหลี่ยมด้านเท่ามีมุมเท่ากันอยู่ที่ 60 องศาจ้า แต่เอ๊ะ 60 องศานี่มันของสามเหลี่ยมอันใหญ่นะ ไม่ใช่อันเล็ก แต่ถ้าของอันเล็ก มันโดนแบ่งครึ่งออกไป แสดงว่ามุมมันต้องเหลือแค่ 30 องศานั่นเอง

cosθ = ชิด / ฉาก


เราจะใช้ sin cos หรือ tan ได้ก็ต่อเมื่อเรารู้ว่ามันมีมุมเท่าไหร่

      
      เราต้องการหาว่าด้านตรงข้ามมุมฉากยาวเท่าไหร่ เราจึงต้องกลับสมการซะ
ฉาก = ชิด / cosθ
ดังนั้นเราจึงได้ว่า รัศมี = (ความยาวด้าน / 2) / cosθ

      ตอนนี้เราก็ได้รัศมีละ ต่อไปก็หาด้าน b ต่อใช่มะ ตรงนี้เราจะใช้  ทฤษฎีบทพีทาโกรัส ก็ได้ หรือจะใช้ sinθ = ข้าม / ฉาก หรือจะใช้ tanθ = ข้าม / ชิด ก็หาได้เช่นกัน จะเห็นว่ามีวิธีมากมายที่จะทำ ก็อยู่ที่เราจะเลือกใช้

      แต่ว่าเจ้าของบล็อกไม่ขอเลือกใช้วิธีต่าง ๆ ที่ว่ามาละกัน เพราะมันมีวิธีที่ดีกว่านั้น แต่เราก็ต้องกลับมาดูรูปสามเหลี่ยมนั่นอีกทีก่อน



      ที่จะให้ดูคือ อยากให้ลองพิจารณาพิกัดจุด A กับพิกัดจุด center ให้ดี จะเห็นว่าตำแหน่งในแกน x ทั้งสองจุดนั้นเท่ากัน ที่เหลือก็คือตำแหน่งในแกน y มันห่างกันเท่ากับรัศมีเลย ถ้าเราเอา Ay มาลบกับ รัศมี เราก็จะได้ตำแหน่งแกน y ของจุด center แล้ว


ดังนั้น เราจะได้ว่า center มีตำแหน่งแกน
x = Ax
y = Ay - [(ความยาวด้าน / 2) / cosθ] หรือ
y = Ay - รัศมี

      โหยย กว่าจะได้รัศมีกับพิกัดจุดศูนย์กลาง อธิบายยาวเหยียดเลย ทีนี้เราก็วาดวงกลมได้ซักที แล้วจะวาดวงกลมยังไงละ ? นี่แหละปัญหา หรือจะใช้สมการ


      ถึงจะเป็นสมการวาดวงกลมก็จริง แต่เจ้าของบล็อกก็นึกไม่ออกเหมือนกันว่าจะแปลงสมการตรงนี้มาใช้กับโปรแกรมยังไง เจ้าของบล็อกก็เลยไม่ใช้สมการนี้ แล้วเขียนสมการมาใหม่เองเลย



      อันนี้เป็นรูป concept ที่เจ้าของบล็อกคิดไว้ ก็จะเริ่มวาดวงกลมโดยเริ่มจากจุด start point ที่ 0 องศา แล้วก็ค่อย ๆ เปลี่ยนองศาจนครบ 360 องศา เราก็จะได้เป็นรูปวงกลมแล้ว เออเหมือนจะง่ายนะ แล้ววิธีละ..? งั้นก็มาลองวาดวงกลมดูก่อนละกันเนาะ


      เจ้าของบล็อกวาดอย่างนี้ให้ดูก็คงจะนึกอะไรออกแล้วใช่มั้ย แต่บางคนก็อาจจะรู้อยู่แล้ว ตำแหน่งที่จุดกำลังวาดไปเรื่อย ๆ รอบวงกลมนั้นก็สามารถหาพิกัด x และ y ได้เหมือนกัน

      ในตอนนี้เรารู้ว่า r เป็นเท่าไหร่ และขณะที่กำลังวาดรูปวงกลมอยู่นั้นเราก็รู้ด้วยว่าองศาเป็นเท่าไหร่ เพราะจาก concept คือจะค่อย ๆ วาดตามองศาตั้งแต่ 0 ถึง 360 ยังไงละ

      เราสามารถใช้ sin cos ในการหา x และ y ได้ หรือว่าจะหาแค่ x แล้ว y ใช้ทฤษฎีบทพีทาโกรัสก็ยังได้ แต่ว่าเพื่อให้ง่าย ก็ใช้ sin cos นั่นและฮะ

x = rcosθ
y = rsinθ 
      สมการแค่นี้เราก็สามารถวาดวงกลมได้แล้ว ถ้าคนไหนที่เคยเรียนฟิสิกมา มันก็เหมือนกับการแตกแรงตามแกนต่าง ๆ นั่นแหละ แต่ปกติแล้วสามเหลี่ยมมันจะไม่เกิน 90 องศาใช่มะ แต่ถ้ามันเกินมาแล้ว มันจะไม่ใช่เรื่องสามเหลี่ยมซะทีเดียว แต่มันจะว่าด้วยเรื่องของ วงกลม 1 หน่วยนั่นเอง



      วงกลม 1 หน่วยคืออะไร..? มันก็คือวงกลมที่มีรัศมี 1 หน่วยนั่นเอง

      ในการวาดวงกลมเราจำเป็นต้องทำความเข้าใจกับวงกลม 1 หน่วยนี้ด้วย ต้องดูความสัมพันธ์ของ sin และ cos ตัวอย่างในภาพ แล้วก็กราฟแสดงความสัมพันธ์ของ sin กับ cos ซึ่งจะเห็นว่า sin และ cos จะมีค่าอยู่ระหว่าง 1 จนถึง -1 ก็มาจาก concept ของวงกลม 1 หน่วยนี่แหละ


      code วาดวงกลมก็จะประมาณนี้ เอ้อตำแหน่ง x y ที่หามาจาก sin cos ก็อย่าลืมไปบวกเข้ากับจุด x y ที่เป็นจุดศูนย์กลางด้วยละ ไม่งั้นก็จะกลายเป็นว่าเราไปวาดโปรแกรมอยู่มุมหน้าจอเราเองซะงั้น ซึ่งจุดศูนย์กลางที่เจ้าของบล็อกหมายถึงก็คือกึ่งกลางของสามเหลี่ยมด้านเท่านั่นแหละ



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

      จบไปสำหรับสมการวาดวงกลมละ ในโจทย์ต่อไป แค่ให้วาดสามเหลี่ยมด้านเท่า หมุนตามเข็มหรือทวนเข็มก็ได้


โจทย์วาดสามเหลี่ยมด้านเท่าให้หมุน

      โจทย์นี้บางคนก็อาจจะคิดว่ามันน่าจะยากแน่เลย จะทำยังไงให้สามเหลี่ยมมันหมุนได้เนี่ย แต่จะลองให้ผู้อ่านได้คิดเล่น ๆ ดูก่อนที่จะดูกันว่าเจ้าของบล็อกจะทำยังไง

...

      
      สิ่งที่เจ้าของบล็อกทำคือ มองให้มันเป็นแค่ จุด 3 จุดครับ เป็นจุด 3 จุดที่วิ่งอยู่บนเส้นรอบวงกลมเส้นนึงเท่านั้น


      
      พอมองเป็นจุดแล้วมันก็เหมือนกับการวาดวงกลมก่อนหน้านี้ ที่จะมีจุด ๆ นึงค่อย ๆ วาดตัวเองด้วย สมการ


x = rcosθ
y = rsinθ

      ซึ่งพอเป็นสมการนี้แล้ว จุดจุดนั้นมันก็จะค่อย ๆ เคลื่อนตำแหน่ง x y ไปตามองศาที่เปลี่ยนไป แต่เมื่อมองมาดูสามเหลี่ยม นั่นหมายความว่ามันต้องมีทั้งหมด 3 จุดด้วยกัน หรือจะให้พูดอีกอย่างก็คือจะมีสมการแบบที่กล่าวมาก่อนหน้านี้ ทั้งหมดเป็น 3 สมการ


      แต่ถ้าสมการเหมือนกัน ไอ้จุด 3 จุดนั้นไม่ใช่ว่าจะเคลื่อนที่ที่จุดเดียวกันหรอกหรือ


      นี่คือสิ่งที่จะเกิดขึ้น เมื่อเราใช้สมการเดียวกันทั้ง 3 จุด ทุกจุดจะเริ่มหมุนจากจุดเดียวกัน แล้วเราจะทำให้มันเป็นสามเหลี่ยมได้ยังไงนะ..?

      ตัวแปรที่สำคัญคือ มุม นั่นเอง จะเห็นว่าสามเหลี่ยมด้านเท่านั้นจะทำมุมห่างกันในแต่ละจุด 120 องศา เพราะงั้นเราก็สามารถกำหนดได้เลยว่า จุด A เริ่มที่ 0 องศา จุด B เริ่มที่ 120 องศา และจุด c เริ่มที่ 240 องศา เท่านี้มันก็กลายเป็นจุดที่สามารถโยงเส้นแต่ละจุดเชื่อมกันกลายเป็นรูปสามเหลี่ยมด้านเท่าได้แล้ววว



     เท่านี้เราก็ได้ 3 จุด ทำมุมห่างกันจุดละ 120 องศา ต่อไปก็คือการเพิ่มมุมไปเรื่อย ๆ เพื่อให้สามเหลี่ยมของเราค่อย ๆ หมุนไปเรื่อย ๆ จนครบ 360 องศานั่นเอง


      อันนี้ก็จะเป็นโค้ด จะเห็นว่าใช้สมการเดียวกันกับตอนวาดวงกลมเลยใช่มะ ที่แตกต่างกันคือองศานั่นเอง สุดท้ายเราก็ได้จุด 3 จุดอย่างที่ว่าแล้ว



      ก็จะประมาณนี้ บทความก็จะยาวนิดนึง โจทย์สุดท้ายจะอธิบายน้อยหน่อยเพราะมันก็ใช้ concept ของโจทย์ที่สองมาอีกทีเนาะ


สรุป

      ในเนื้อหาโจทย์ 3 โจทย์นี้ ก็รู้สึกว่าได้เรียนรู้เกี่ยวกับตรีโกณมิติไประดับนึงพอสมควร ทฤษฎีบทพีทาโกรัสก็ได้ใช้ sin cos ก็ได้ใช้ วงกลม 1 หน่วยก็มีให้ได้ทบทวน ในเรื่องพวกนี้ยังสามารถใช้ไปต่อยอดได้อีกเยอะเลย ทั้งทางฟิสิกเองก็ได้ใช้ ทางคอมพิวเตอร์ก็ได้ใช้ อย่างเขียนโปรแกรมให้ดูไป

      หวังว่าบทความนี้จะทำให้ผู้อ่านเข้าใจมากขึ้นหรือได้ทบทวนมากขึ้น และท้ายสุดก็หวังว่าผู้อ่านจะเห็นว่าคณิตศาสตร์นั้นมันสำคัญ ไม่ใช่ว่าเราเรียนไปแล้วไม่ได้ใช้ สู้ ๆ กับนักรบคณิตศาสตร์ทุกคนครับ ฮ่า ๆ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ว่าด้วยเรื่องหน่วยความจำ สิ่งที่หลายคนมองข้าม : รู้จักกับ Memory

คณิตศาสตร์กับโปรแกรมมิ่งมันเป็นยังไงนะ ตอนที่ 1 เกริ่นพีทาโกรัส