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



      ก่อนหน้านี้เราได้ทักทายกันไปบ้างแล้วกลับเรื่องของทฤษฎีบทพีทาโกรัส แน่นอนว่าอาจจะยังมองไม่เห็นภาพว่าเอาไปใช้คำนวณยังไงได้บ้าง ซึ่งส่วนท้ายของบทความตอนที่แล้วเจ้าของบล็อกได้พูดเปรย ๆ ถึงเรื่องที่ใช้คณิตศาสตร์กับเรื่อง Graphic Programming หรือการเขียนโปรแกรมกับภาพ

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

      ทั้งหมดจะมีด้วยกันอยู่ 3 โจทย์นะ ถ้าอ่านจากบทความ คณิตศาสตร์กับโปรแกรมมิ่งมันเป็นยังไงนะ ตอนที่ 1 เกริ่นพีทาโกรัส ตอนท้าย ๆ ก็จะบอกว่ามีโจทย์ไรบ้าง

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


      ไม่จำเป็นต้องมีสมการเดียว แต่ยังไงซะทุกสมการมันก็มีความสัมพันธ์กันอยู่ดี และเรื่องที่หนีไม่ได้เลยก็คือการใช้ ทฤษฎีบทพีทาโกรัสมาช่วยคำนวณ เดี๋ยวทวนโจทย์อีกทีแบบคร่าว ๆ ก็คือ ให้สร้างสมการที่ใส่ค่าตัวแปร ความยาวด้าน และตัวแปร X ตัวแปร Y ของจุด A แล้วให้สมการบอกพิกัดของจุด Bxy และพิกัดจุด Cxy ก็ลองคิดกันเล่น ๆ ก่อนที่จะไปย่อหน้าถัดไปนะ


 . . . 

      ก่อนที่เราจะหาสมาการ เราก็ต้องดูก่อนว่า มันมีตัวแปรอะไรให้เรามั่ง


ความยาวด้านของสามเหลี่ยม (เป็นสามเหลี่ยมด้านเท่า)
พิกัด X และ Y ของจุด A 

      ด้วยตัวแปรที่มีนี้ คิดว่าเราสามารถหาจุดพิกัดของจุด B กับจุด C ได้ยัง..? เจ้าของบล็อกบอกเลยว่าเท่านี้ก็เพียงพอแล้วจ้า

      แต่ถ้าผู้อ่านยังนึกไม่ออก วิธีง่าย ๆ ก็ลองวาดรูปออกมาก่อนแล้วก็ลองพิจารณาแต่ละจุดดูนะ



      ตัวอย่างในรูปลองสมมติว่าตำแหน่ง XY ของพิกัด A เป็น 10,0 และความยาวด้านแต่ละด้านเท่ากับ 12 เราก็จะได้สามเหลี่ยมด้านเท่ามาในลักษณะนี้


คำถาม แล้วพิกัดจุด B มีค่า XY เป็นเท่าไหร่..?

ในย่อต่อไปจะอธิบาย

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


เพราะงั้น Bx = Ax - (ความยาวด้าน / 2)

      แล้วจุด By ละ จริง ๆ แล้วง่ายมากเลย

      จากรูป By ที่เรากำลังพูดถึง มันก็คือความสูงของสามเหลี่ยมนั่นเอง ถ้าผู้อ่านลองมองดี ๆ แล้วละก็ จะอ๋อขึ้นมาเลย ตอนนี้เรารู้ว่าด้านตรงข้ามมุมฉากมีค่าเท่าไหร่ด้านประกอบมุมฉากด้านนึงมีค่าเท่าไหร่ ซึ่งเหลือด้านประกอบมุมฉากอีกด้านที่เรายังไม่รู้ ในตรงนี้เราสามารถใช้ ทฤษฎีบทพีทาโกรัส มาช่วยหาความยาว ด้านประกอบมุมฉากอีกด้านได้เลย

จากสมการ 

มาลองแทนค่ากัน..





      ตอนนี้เราก็ได้ทั้งจุด Bx และ By แล้ว และจะหาพิกัดจุด C ต่อก็ยิ่งง่ายเลย ถ้ามองดูดี ๆ คือใช้สมการเดียวกันเลย ต่างกันที่แกน x นิดหน่อย ของจุด B มันอยู่ฝั่งซ้ายของจุด A แต่ว่าจุด C อยู่ฝั่งขวา เพราะงั้นสมการที่ถูกต้องของจุด Cx ก็คือ


Cx = Ax + (ความยาวด้าน / 2)
ส่วน Cy ก็สมการเดียวกันเลย
Cy = Ay - b

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


      การคำนวณทุกอย่างจะเหมือนกับที่ได้อธิบายไปก่อนหน้านี้เลย อาจจะมีแตกต่างบ้างเล็กน้อย แต่ก็ใช้ concept เดียวกัน




      บทความนี้ก็ขอจบไปก่อนเนาะ โจทย์ถัดไปก็เป็นอีกบทความนึงละกัน
    

ความคิดเห็น

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

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

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

Pointer กับตัวแปร Array นะจ๊ะ.. [Back to basic แต่ไม่ basic]