« »

โอ้ละหนอ คณิตคิดมันส์…

by nuch

ช่วงที่ผ่านมาหนักไปทางเขียนสคริปอย่างมาก  อีกทั้งต้องเรียนรู้ Python ด้วย..   ไม่รู้ว่าเพราะหนังสือดีหรือไง ไพธอนเลยเป็นอะไรที่ไม่ได้ยากกว่าที่คิดแฮะ  (แต่ C เนี่ย.. ยังไม่สามารถเขียนมันได้เลย ขณะที่เริ่มเขียนไพธอนได้แล้ว)  แต่ก็ยังไม่ถึงกับใช้ไพธอนได้คล่องหรอกนะ  .. ตอนนี้เริ่มมั่นใจกับ melscript มากขึ้น อืม มันพลิกแพลงได้เรื่อย สนุกดี  แต่ก็มีข้อจำกัดเยอะจริงๆ   เข้าใจแล้วล่ะว่าทำไม maya2008 ถึงจะเปลี่ยนไป python แล้ว…

จริงๆ แล้ว การเขียนสคริป การเขียนโปรแกรมมิง มันก็คือการเล่นกับคณิตศาสตร์ดีๆ นี่เอง   สนุกนะ เวลาที่จะต้องคิดว่า จะทำยังไงให้คอมคิด คอมรู้ ในสิ่งที่เราเห็น เราต้องการ  เราต้องอธิบายมันด้วยภาษาคณิตศาสตร์ทั้งหมดเลย…  ดีนะที่ยังพอจะจำวิชาเลขที่เรียนสมัยมัธยมได้  เสียดายที่ตอนนั้นเราตั้งแง่รังเกียจ Matrix ทำให้ไม่ใส่ใจหัวข้อนี้เท่าที่ควร ทำให้เราลำบากกับการเขียนโปรแกรมที่ต้องอธิบายด้วยค่าเมทริกซ์ และยังพาลไปถึง Calculus อีก.. เอ้อ  คงต้องฟื้นวิชาสักพักใหญ่เลย

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

เรื่องติงต๊องเรื่องแรกที่เกิดขึ้นในช่วงเทอมที่ผ่านมา….
คือ…  เราต้องการหาระยะห่างระหว่างจุดปลาย curve 2 อันว่าห่างกันมากแค่ไหน…  ถ้าห่างกันน้อยกว่าค่า tolerance ที่เรากำหนดให้ เราก็จะสั่งให้มันเชื่อมเส้นให้เป็นเส้นเดียวกันไปเลย …   การที่จะหาตำแหน่งของจุดปลาย curve เราก็ต้องรู้ตำแหน่งของ control vertex ของ curve นั้นก่อน  ซึ่งเราก็หาได้แล้ว  แล้วก็หาพิกัดในลักษณะ world corodinate ได้ โดยได้ค่ามาเป็น vector …  แต่ทว่า mel command ในมายาที่จะหาระยะห่างระหว่างจุดสองจุดน่ะ จะต้องใช้ต่าพิกัดของแต่จุดเป็นค่า float 3 ตัว  (float = ตัวเลขทศนิยม) เราก็เลยคิดจะแปลงค่า vector เป็น float ก็เขียนสคริปลำดับการทำงานไปจนเกือบจบ.. นึกได้ว่า vector A – vector B ก็ได้ระยะห่างแล้วนี่หว่า..  ไม่จำเป็นต้องใช้ mel command ก็ได้นี่….
…  -__-‘…..
ตอนที่พยายามเขียนแปลงค่า ก็วุ่นวายหัวเสียอยู่หน่อยๆ เพราะไม่คุ้นกับการเขียนสคริปแบบนี้ แต่พอนึกเรื่อง vector ได้  หัวเราะกลิ้งเลย…. นี่ถ้าอาจารย์รู้.. คงหัวเราะเยาะตายเลย…

อีกเรื่อง… เพิ่งเกิดเมื่อวานเลย…
คือเราต้องการจะหาค่ายกกำลังของ 2 ที่ให้ค่าเท่ากับจำนวนวัตถุที่เราจะเรียกใช้นะ…  คือ สมมติว่าเราเรียกใช้วัตถุ 32 อัน  เราต้องการค่าของเลข 5 ซึ่งเกิดจาก 25 …  ก็จำได้นะว่าในวิชาเลขมันมีเรื่อง Log ที่ใช้หาค่าของเลขยกกำลังบนฐานที่กำหนด 
จากสูตรที่ว่า  x = 2y  ….  y= log 2 x…
….
ใน mel command เองก็มีคำสั่งหาค่า Log โดยใช้ log(ตัวเลขที่จะใช้หาค่า)  แต่ว่า.. มันหาจากค่า log ฐาน10 น่ะสิ…  เราต้องการหาค่าจาก log ฐาน 2 ..น่ะ  ก็งงสิ ไม่รู้จะใส่ค่าฐานยังไงล่ะ   คำสั่งอื่นเช่น pow ก็ใช้ผลของเลขยกกำลัง exp ก็เป็นค่า en   เอาไงดีละเนี่ย…  นั่งคุ้ยนั่งค้นใน mel command reference ก็ไม่เจอสักที  สุดท้ายยอมแพ้  คิดว่าเราอาจจะต้องศิโรราบให้กับ python อีกครั้ง..   ก็เลยเก็บคำถามนี้ไปถามอาจารย์…    ตอนแรกอาจารย์ก็งงว่าทำไมเราถึงต้องใช้ค่า log ฐาน 2 ด้วย… แต่พออธิบายไป เขาก็เข้าใจ  เขาก็หาคำสั่งใน mel command reference ไม่เจอเช่นกัน…   แต่เขาก็ไปเปิด google หาเกี่ยวกับรวมสูตรของ Log ได้สูตรการแปลงฐาน log มา…  เราก็เกทโตะเลย….  เวง..  ทำไมเราโง่อย่างนี้วะ…  มันมีวิธีพลิกแพลงมากมายเลยนี่นา…..
สรุปก็คือ ถ้าเราต้องการหาค่า log 2 x  ด้วยคำสั่ง log() ที่หาค่าจากฐาน 10 เท่านั้น เราก็ทำได้โดย

log 2 x = log(x) / log(2)

……-___-“…….

คงต้องเคาะสนิมวิชาคณิตศาสตร์ยกใหญ่เลยเรา…..

2 Responses to “โอ้ละหนอ คณิตคิดมันส์…”

  1. Noopook Says:

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

    นั่งอ่านไป นัยต์ตาดำเราก็มีรูปก้นหอยหมุนๆอยู่ข้างใน ส่วนบนหัวก็มีแต่เครื่องหมายเควสชั่นมาร์ค เอิ๊กๆ

  2. Jack Says:

    C มันยากกว่า Python อยู่แล้วครับ
    มันคือภาษาเทพ
    ผมก็ยังยอมเลยครับ
    C ไม่ไหวจริงๆ
    Python มัน flexible กว่าเยอะครับ
    แล้วมันก็เป็นภาษา script (เช่นพวก MEL, CGI, perl เป็นต้น)ที่มีความสามารถใกล้เคียงกับพวก ภาษา programming (เช่นพวก VB, C, Java, C# เป็นต้น) มากที่สุด
    หลังๆเริ่มใช้แพร่หลายเพราะมันฟรี ^^

    เอ่อ ถ้าทราบเรื่อง transformation matrix นี่อย่าลืมมาเล่าสู่กันฟังหน่อยนะครับ

    สู้ๆครับ

Leave a Reply

:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: