Thư viện hình học tốt trong python? [đóng cửa]


97

Tôi đang tìm kiếm một thư viện tốt và được phát triển tốt cho các thao tác và đánh giá hình học trong python, như:

  • đánh giá sự giao nhau giữa hai đường trong 2D và 3D (nếu có)
  • đánh giá giao điểm giữa một mặt phẳng và một đường thẳng, hoặc đường giao nhau giữa hai mặt phẳng
  • đánh giá khoảng cách tối thiểu giữa một đường thẳng và một điểm
  • tìm công thức của một mặt phẳng đi qua một điểm
  • xoay, dịch, phản chiếu một tập hợp các điểm
  • tìm góc nhị diện được xác định bởi bốn điểm

Tôi có một cuốn sách tóm tắt cho tất cả các thao tác này và tôi có thể thực hiện nó nhưng tiếc là tôi không có thời gian, vì vậy tôi sẽ thích một thư viện thực hiện nó. Hầu hết các hoạt động đều hữu ích cho mục đích chơi game, vì vậy tôi chắc chắn rằng một số chức năng này có thể được tìm thấy trong thư viện trò chơi, nhưng tôi không muốn bao gồm các chức năng (chẳng hạn như đồ họa) mà tôi không cần.

Bất kỳ đề xuất ? Cảm ơn


Nếu bạn chỉ ổn với 2D thì bạn có thể kiểm tra điều này .
Pithikos

Câu trả lời:


35

Có lẽ hãy nhìn vào SymPy .


2
Nó không thực sự đáp ứng yêu cầu của tôi, nhưng nó thực sự là một dự án tuyệt vời, vì vậy tôi chấp nhận câu trả lời của bạn như là một gợi ý thú vị còn cho tương lai (như SymPy có một mô-đun hình học, và một số lượng lớn các nhà phát triển)
Stefano Borini

1
2d chỉ đáng buồn. Không hẳn là một công cụ hình học xây dựng.
urwoppl

3
Mô-đun hình học của SymPy cũng có thể rất, rất chậm. Vì nó được thiết kế để làm toán biểu tượng, nó thích sử dụng các biểu thức chính xác hơn các giá trị dấu phẩy động gần đúng. Với số lượng căn bậc hai thường liên quan đến các phép tính hình học, bạn có thể tưởng tượng những biểu thức đó thực sự lớn và rất chậm như thế nào.
dusktreader

3
Update để SymPy bây giờ chứa 3D thư viện cũng
control_fd

Cảm ơn vì câu trả lời này. Tôi đang dùng thử SymPy ngay bây giờ. Thử nghiệm đầu tiên dường như thực hiện khá chậm - ngay cả đối với một đối tượng 2D đơn giản. Bất kỳ ý tưởng nếu nó là tốt cho việc xử lý hình học trong thời gian thực? Cảm ơn.
Bill

27

Shapely là một trình bao bọc python đẹp xung quanh thư viện GEOS phổ biến .


6
Có vẻ là rất tập trung vào dữ liệu GIS xử lý, chứ không phải là thuần túy "hình học toán học" (như vậy để nói)
Stefano Borini

2
Nó chắc chắn đã được tạo ra để sử dụng bởi cộng đồng GIS, tuy nhiên nó cố tình không biết về các phép chiếu địa lý, điều này khiến nó được sử dụng như một thư viện hình học euclid có mục đích chung. Tôi sử dụng nó nhiều như vậy trong một dự án trò chơi máy tính mới ra đời và nó hoạt động tốt.
Jonathan Hartley

15
nó nói gì về hình học 3D: "Giá trị tọa độ z thứ ba có thể được sử dụng khi xây dựng các cá thể, nhưng không ảnh hưởng đến phân tích hình học. Tất cả các phép toán được thực hiện trong mặt phẳng xy."
sebpiq 17/02/12

3
Nhận xét trên đã khiến tôi mất khoảng nửa giờ viết mã để tìm hiểu. Khá kích động thực sự.
urwoppl

2
Tại sao chỉ có một phiếu phản đối khi câu hỏi đặc biệt yêu cầu 3D?
Jamie Bull

14

Tôi thấy pyeuclid là một gói toán euclid có mục đích chung đơn giản tuyệt vời. Mặc dù thư viện có thể không chứa chính xác những vấn đề mà bạn đã đề cập, nhưng cơ sở hạ tầng của nó đủ tốt để giúp bạn dễ dàng viết những vấn đề này.


10

3
Lần phát hành cuối cùng là năm 2009, và chúng dường như chưa hoàn thiện. Có ai có thể nói rằng họ đã sử dụng chúng gần đây và rằng họ có thể làm những điều được yêu cầu trong câu hỏi bằng cách sử dụng các ràng buộc không?
BenjaminGolder

Vâng, tất cả các ràng buộc mà tôi tìm thấy đều chưa hoàn thiện, bao gồm một số tính năng thực sự như hình học rắn xây dựng. Ngoài ra, bản chất phức tạp của CGAL khiến nó khó có thể bọc tốt. Trong một dự án của riêng tôi ( Demakein ), tôi đang sử dụng mô-đun cffi và một số thủ thuật khủng khiếp để sử dụng CGAL trực tiếp từ python, sử dụng các đoạn mã C ++ nội tuyến.
Paul Harrison


6

Tôi thực sự muốn có một câu trả lời tốt cho câu hỏi này, và những câu ở trên khiến tôi không hài lòng. Tuy nhiên, tôi vừa xem qua pythonocc trông rất tuyệt, ngoài việc thiếu tài liệu tốt và vẫn gặp một số rắc rối với việc cài đặt (chưa tương thích với pypi). Lần cập nhật cuối cùng là 4 ngày trước (ngày 19 tháng 6 năm 2011). Nó kết hợp OpenCascade có rất nhiều hình học và chức năng mô hình hóa. Từ trang web pythonocc:

pythonOCC là một khung phát triển CAD / CAE / PLM 3D cho ngôn ngữ lập trình Python. Nó cung cấp các tính năng như hoạt động tôpô và hình học nâng cao, trao đổi dữ liệu (STEP, IGES, nhập / xuất STL), chia lưới 2D và 3D, mô phỏng cơ thể cứng, mô hình tham số.

[CHỈNH SỬA: Bây giờ tôi đã tải xuống pythonocc và bắt đầu làm việc với một số ví dụ]

Tôi tin rằng nó có thể thực hiện tất cả các tác vụ đã đề cập, nhưng tôi thấy nó không được trực quan khi sử dụng. Nó được tạo ra gần như hoàn toàn từ các trình bao bọc SWIG, và do đó, việc xem xét các lệnh trở nên khó khăn.


Theo tôi, nó làm quá nhiều .... chúng ta có nên bắt đầu một? Tôi sẽ sớm cần nhiều phép toán hình học trong raytracer của mình và có lẽ rất hợp lý khi tạo một github riêng cho nó. Tôi đã có một số mã, chúng tôi sẽ không bắt đầu lại từ đầu, nhưng sẽ dễ dàng thiết kế lại nếu chúng tôi phát hiện ra nó không đủ tốt.
Stefano Borini

@Stefano Borini: chắc chắn! Tôi rất sẵn lòng trợ giúp dù có thể, nhưng tôi không ở gần trình độ chuyên môn của bạn.
BenjaminGolder

Tôi cũng thất vọng tương tự với những gì có sẵn. Đối với những thứ đơn giản, tôi đã thực hiện mã của riêng mình (ví dụ: trong Adolphus ), nhưng tối nay, chẳng hạn, tôi cần giao điểm đa diện-đa diện và chỉ còn quá nhiều bước so với những gì tôi phải lành mạnh. Trong mọi trường hợp, nếu điều này tiếp diễn, hãy tính tôi vào.
ezod

dự án này đã ra đời?
Mermoz

1
@Mermoz có, nhưng rất chậm. Stefano đã bắt đầu sử dụng thư viện, và tôi đang viết các phần bổ sung của riêng mình, nhưng chúng tôi vẫn chưa đi được xa. xem github.com/stefanoborini/python-geometrygithub.com/bengolder/python-geometry
BenjaminGolder

2

Bạn có thể quan tâm đến mô-đun Python SpaceFuncs từ dự án OpenOpt, http://openopt.org

SpaceFuncs là công cụ để lập mô hình hình học 2D, 3D, N-chiều với khả năng tính toán tham số, tối ưu hóa số và giải hệ phương trình hình học


2

Python Wild Magic là một mã được bọc SWIG khác. Tuy nhiên, nó là một thư viện trò chơi, nhưng bạn có thể thao tác tệp thư viện SWIG để loại trừ bất kỳ nội dung đồ họa không mong muốn nào khỏi API Python.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.