ห้องสมุดเรขาคณิตที่ดีใน python? [ปิด]


97

ฉันกำลังมองหาไลบรารีที่ดีและได้รับการพัฒนาอย่างดีสำหรับการปรับแต่งและการประเมินทางเรขาคณิตใน python เช่น:

  • ประเมินจุดตัดระหว่างสองเส้นใน 2 มิติและ 3 มิติ (ถ้ามี)
  • ประเมินจุดตัดระหว่างระนาบกับเส้นหรือเส้นตัดระหว่างระนาบสองข้าง
  • ประเมินระยะห่างขั้นต่ำระหว่างเส้นและจุด
  • ค้นหา orthonormal ไปยังเครื่องบินที่ผ่านจุดหนึ่ง
  • หมุนแปลสะท้อนชุดของจุด
  • หามุมไดฮีดรัลที่กำหนดโดยสี่จุด

ฉันมีหนังสือสรุปสำหรับการดำเนินการทั้งหมดนี้และฉันสามารถนำไปใช้ได้ แต่น่าเสียดายที่ฉันไม่มีเวลาดังนั้นฉันจะสนุกกับห้องสมุดที่ทำมันได้ การดำเนินการส่วนใหญ่มีประโยชน์สำหรับวัตถุประสงค์ในการเล่นเกมดังนั้นฉันมั่นใจว่าฟังก์ชันเหล่านี้บางอย่างสามารถพบได้ในไลบรารีเกม แต่ฉันไม่ต้องการรวมฟังก์ชันการทำงาน (เช่นกราฟิก) ที่ฉันไม่ต้องการ

ข้อเสนอแนะใด ๆ ? ขอบคุณ


หากคุณสบายดีกับ 2D เท่านั้นคุณสามารถตรวจสอบสิ่งนี้ได้
Pithikos

คำตอบ:


36

บางทีอาจจะดูที่SymPy


2
มันไม่ตรงตามความต้องการของฉัน แต่มันเป็นโครงการที่ยอดเยี่ยมจริงๆดังนั้นฉันจึงยอมรับคำตอบของคุณว่าเป็นข้อเสนอแนะที่น่าสนใจสำหรับอนาคต (เนื่องจาก SymPy มีโมดูลเรขาคณิตและนักพัฒนาจำนวนมาก)
Stefano Borini

1
2d เศร้าเท่านั้น ไม่ใช่เครื่องมือเรขาคณิตเชิงสร้างสรรค์
meawoppl

3
โมดูลเรขาคณิตของ SymPy อาจช้ามาก เนื่องจากได้รับการออกแบบมาสำหรับการคำนวณเชิงสัญลักษณ์จึงชอบใช้นิพจน์ที่แม่นยำมากกว่าค่าทศนิยมโดยประมาณ เมื่อพิจารณาจากจำนวนรากที่สองที่มักจะเกี่ยวข้องกับการคำนวณทางเรขาคณิตคุณสามารถจินตนาการได้ว่านิพจน์เหล่านั้นมีขนาดใหญ่และช้ามากอย่างไร
eveningtreader

3
ตอนนี้การอัปเดตSymPyมีไลบรารี 3 มิติด้วย
control_fd

ขอบคุณสำหรับคำตอบนี้ ฉันกำลังทดลองใช้ SymPy อยู่ในขณะนี้ การทดลองครั้งแรกดูเหมือนจะดำเนินการได้ค่อนข้างช้า - แม้แต่สำหรับวัตถุ 2 มิติธรรมดา ๆ มีความคิดว่าการประมวลผลรูปทรงเรขาคณิตแบบเรียลไทม์จะดีหรือไม่? ขอบคุณ.
บิล

27

Shapelyเป็นเสื้อคลุมงูเหลือมที่ดีในไลบรารีGEOSยอดนิยม


6
ดูเหมือนจะให้ความสำคัญกับการจัดการข้อมูล GIS มากกว่า "เรขาคณิตทางคณิตศาสตร์" ที่บริสุทธิ์ (เพื่อให้พูดได้)
Stefano Borini

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

15
สิ่งที่กล่าวเกี่ยวกับรูปเรขาคณิต 3 มิติ: "ค่าพิกัด z ที่สามอาจถูกใช้เมื่อสร้างอินสแตนซ์ แต่ไม่มีผลต่อการวิเคราะห์ทางเรขาคณิตการดำเนินการทั้งหมดจะดำเนินการในระนาบ xy"
sebpiq

4
ความคิดเห็นด้านบนใช้เวลาประมาณครึ่งชั่วโมงในการเขียนโค้ดเพื่อหาคำตอบ ปั่นป่วนพอสมควรจริงๆ
meawoppl

2
ทำไมต้องโหวตเพียงคนเดียวเมื่อคำถามถามหา 3D โดยเฉพาะ
Jamie Bull

14

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


10

CGALมีการผูก Pythonด้วย


3
รุ่นล่าสุดคือปี 2009 และดูเหมือนจะไม่สมบูรณ์ มีใครบอกได้ไหมว่าเพิ่งใช้งานเมื่อเร็ว ๆ นี้และสามารถทำสิ่งที่ถามในคำถามโดยใช้การผูกได้
BenjaminGolder

ใช่การผูกทั้งหมดที่ฉันพบไม่สมบูรณ์รวมถึงสินค้าจริงบางอย่างเช่นเรขาคณิตแข็งที่สร้างสรรค์ นอกจากนี้ลักษณะของ CGAL ที่ได้รับการเทมแบบสูงทำให้ห่อได้ยาก ในโครงการของฉันเอง ( Demakein ) ฉันใช้โมดูล cffi และแฮ็กที่น่ากลัวบางอย่างเพื่อใช้ CGAL โดยตรงจาก python โดยใช้ตัวอย่าง C ++ แบบอินไลน์
Paul Harrison


6

ฉันต้องการคำตอบที่ดีสำหรับคำถามนี้และคำถามข้างต้นทำให้ฉันไม่พอใจ อย่างไรก็ตามฉันเพิ่งเจอpythonoccซึ่งดูดีมากนอกเหนือจากการขาดเอกสารที่ดีและยังมีปัญหาในการติดตั้ง (ยังไม่รองรับ pypi) การอัปเดตครั้งล่าสุดคือ 4 วันที่แล้ว (19 มิถุนายน 2554) มันรวมOpenCascadeซึ่งมีรูปทรงเรขาคณิตและฟังก์ชันการสร้างแบบจำลองมากมาย จากเว็บไซต์ pythonocc:

pythonOCC เป็นกรอบการพัฒนา 3D CAD / CAE / PLM สำหรับภาษาโปรแกรม Python มันมีคุณสมบัติเช่นการดำเนินการโทโพโลยีและเรขาคณิตขั้นสูงการแลกเปลี่ยนข้อมูล (STEP, IGES, การนำเข้า / ส่งออก STL), การเชื่อมต่อแบบ 2D และ 3D, การจำลองร่างกายแบบแข็ง, การสร้างแบบจำลองพารามิเตอร์

[แก้ไข: ตอนนี้ฉันดาวน์โหลด pythonocc แล้วและเริ่มทำงานตามตัวอย่างบางส่วน]

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


ในความคิดของฉันมันทำให้มากเกินไป .... เราควรเริ่มต้นใหม่หรือไม่? ฉันจะต้องใช้การดำเนินการทางเรขาคณิตจำนวนมากใน raytracer ของฉันในไม่ช้าและมันก็สมเหตุสมผลที่จะสร้าง github แยกต่างหาก ฉันมีรหัสอยู่แล้วเราไม่ได้เริ่มตั้งแต่ต้น แต่มันจะง่ายต่อการออกแบบใหม่หากเราพบว่ามันไม่ดีพอ
Stefano Borini

@Stefano Borini: แน่นอน! ฉันยินดีที่จะช่วยเหลืออย่างไรก็ตามฉันสามารถทำได้ แต่ไม่มีที่ไหนใกล้ระดับคุณสมบัติของคุณ
BenjaminGolder

ฉันผิดหวังเหมือนกันกับสิ่งที่มีอยู่ สำหรับเรื่องง่ายๆฉันได้ทำรหัสของตัวเองแล้ว (เช่นในAdolphus ) แต่คืนนี้เช่นฉันต้องการจุดตัดของรูปทรงหลายเหลี่ยม - รูปทรงหลายเหลี่ยมและมันเป็นเพียงขั้นตอนที่มากเกินไปจากสิ่งที่ฉันต้องมีสติ ไม่ว่าในกรณีใดถ้าเป็นไปข้างหน้าก็นับฉันด้วย
ezod

โครงการนี้เกิดขึ้นหรือไม่?
Mermoz

1
@Mermoz ใช่ แต่ช้ามาก Stefano ได้เริ่มต้นห้องสมุดแล้วและฉันได้เขียนส่วนเพิ่มเติมของตัวเอง แต่เราไม่ได้ไปไกลมากนัก ดูgithub.com/stefanoborini/python-geometryและgithub.com/bengolder/python-geometry
BenjaminGolder

2

คุณอาจสนใจโมดูล Python SpaceFuncs จากโครงการ OpenOpt ที่http://openopt.org

SpaceFuncs เป็นเครื่องมือสำหรับการสร้างแบบจำลองทางเรขาคณิต 2 มิติ 3 มิติ N มิติที่มีความเป็นไปได้ในการคำนวณแบบพารามีทริกการเพิ่มประสิทธิภาพเชิงตัวเลขและระบบการแก้สมการทางเรขาคณิต


2

Python Wild Magicเป็นรหัสที่ห่อหุ้มด้วย SWIG อย่างไรก็ตามมันเป็นไลบรารีเกม แต่คุณสามารถปรับแต่งไฟล์ไลบรารี SWIG เพื่อแยกสิ่งที่ไม่ต้องการกราฟิกออกจาก Python API

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.