เรื่อง plane geometry ใน Mathematica 12

Wolfram Mathematica 12 ที่เพิ่งจะเปิดตัวไปมีความสามารถเพิ่มขึ้นมาเยอะพอสมควรเลย และหนึ่งจากหลายความสามารถที่เพิ่มเข้ามานี้ที่ผมชอบมากก็คือความสามารถในเรื่องเรขาคณิตที่เรียกว่า Synthetic Geometry

เจ้า Synthetic Geometry ก็เป็นสาขาที่ศึกษาเรขาคณิตที่หาข้อสรุปจากการใช้เรื่องสัจพจน์หรือข้อความคาดการณ์ต่างๆเป็นเครื่องมือหลักในการแก้ปัญหา ลองดูความหมายเพิ่มเติมที่ https://en.wikipedia.org/wiki/Synthetic_geometry  นะครับ

ใน Mathematica 12 นี้เราสามารถที่จะสร้างไดอะแกรมของปัญหาได้จากคำสั่ง GeometricScene เช่น

ถ้ามีสามเหลี่ยมที่มีมุมทั้งสามมุมอยู่ที่ จุด (0,0),(1,0),(0,1) หรือสามเหลี่ยมมุมฉากที่มีฐานและความสูงคือ 1 หน่วย เราก็สามารถสร้างได้แบบนี้ครับ

จากคำสั่งด้านบน GeometricScene เราเพียงแต่บอกว่าเรามีจุดอะไรบ้าง ซึ่งในที่นี้ก็คือจุด a,b,c ที่อยู่ที่ {0,0},{1,0},{0,1} ตามลำดับ และก็บอกว่าให้สร้าง สามเหลี่ยมโดยใช้จุดที่กำหนดไว้

จากนั้นผมทดลองหาพื้นที่ของสามเหลี่ยมนี้ ซึ่งก็ผลลัพธ์ที่ได้ก็คือ 1/2

มาลองทำอะไรที่มันดูซับซ้อนขึ้นมาอีกหน่อยครับ  สมมุติว่าผมต้องการหาพื้นที่ของสามเหลี่ยมที่มีเหลี่ยมทั้งสามที่จุด k,l,n

และมีวงกลมที่ผ่านจุดทั้งสามนี้

โดยผมกำหนดให้ว่าระยะระหว่างจุด k และ n  คือ 3 หน่วย และมีจุด m อีก หนึ่งจุดที่อยู่ด้านนอกวงกลม โดยกำหนดให้ มุมที่ทำระหว่าง จุด l,m,n เท่ากับ 120 องศา และแขนของมุมทั้งสอง (เส้นตรงจากจุด m ไป n กับ เส้นตรงจาก จุด m ไป l) นี้ต้องเป็นเส้นสัมผัสวงกลม และก็ให้ เส้นตรง จากจุด m ไป l กับเส้นตรง จุด k n นี้ขนานกัน  555 ดูจะสับสนซับซ้อนอย่างค่อยเป็นค่อยไปนะครับ แต่ถ้าเห็น code และจะเข้าใจดีขึ้นครับ

สังเกตุนะครับว่าเราไม่ได้ระบุพิกัดของจุดใดๆเลย หลังจากที่อธิบายไดอะแกรมของเราเรียบร้อยแล้วผ่านคำสั่ง GeometricScene แล้วเราก็ให้ Mathematica สร้างภาพออกมาโดยใช้คำสั่ง RandomInstance ซึ่งมันก็จะสุ่มจุดขึ้นมาและวาดตามเงื่อนไขที่เรากำหนดไป ซึ่งถ้าเรารัน คำสั่ง RandomInstance และไม่กำหนด RandomSeeding ภาพวาดที่ออกมามันจะไม่ซ้ำกันเลยครับ ดังนั้นเราสามารถกำหนดหรือ fix ภาพ ได้จากการกำหนดค่า RandomSeeding ครับ

จากภาพที่วาดออกมาเราสามารถหาพื้นที่ของสามเหลี่ยน kln ได้ตามนี้ครับ

จากตัวอย่างข้างบนจะเห็นว่าผมใช้คำสั่ง GeometricAssertion เป็นตัวบอกว่า object ที่วาดขึ้นนั้น เช่น เส้นตรง วงกลม หรือจุดต่าง มันมีปฏิสัมพันธ์กันอย่างไร อย่างเช่น ผมต้องการ เส้นตรง kn กับเส้นตรง lm ขนานกัน ผมก็เพียงพิมพ์

GeometricAssertion[{Line[{k,n}],Line[{l,m}]},”Parallel”]

แต่ความเจ๋งของ Mathematica 12 ในเรื่อง Synthetic Geometry มันอยู่ตรง คำสั่ง FindGeometricConjecture นี้ครับ เจ้าคำสั่ง FindGemetricConjecture เป็นคำสั่งที่จะช่วยหาข้อสรุปต่างๆ จากตัวภาพที่วาดจากคำสั่ง GemetricScene ครับ เพื่อให้เห็นความสามารถของคำสั่งนี้ ผมจะลองให้มันหาดูว่ามุมภายในครึ่งวงกลมจะเป็นมุมฉากหรือเปล่าตามทฤษฎีของเธลิส เริ่มจากกำหนดจุด {a,b,c} อยู่บนวงกลมที่มีจุดศูนย์กลางที่จุด o และจุด o เป็นจุดกึ่งกลางระหว่างจุด a กับ c พอวาดเสร็จก็ให้หาข้อสรุปดู ตาม code ด้านล่างนี้

จะเห็นได้ว่าจาก คำสั่ง FindGeometricConjectures มันบอกว่าเส้นตรง ab กับ เส้นตรง cb มันตั้งฉากกัน ซึ่งมันก็โชว์อีกว่ามุม b ที่เกิดจากจุด abc มันทำมุม 90 องศา

ลองดูอีกสักตัวอย่าง เพื่อดูว่า จุด X,Y,Z ที่เกิดจากการตัดกันตามภาพล่างนี้อยู่บนระนาบเดียวกันหรือเปล่า

 ซึ่งจากผลที่ได้ X,Y,Z อยู่บนเส้นตรงเดียวกันครับ

ใครที่สนใจอยากดูตัวอย่างเพิ่มเติมลองไปดูได้ที่ https://www.wolfram.com/language/12/plane-geometry/