2010-01-22 44 views
29

Có thư viện hình học nào có sẵn cho Java không? Tôi đang tìm giải pháp để có được một điểm giao nhau giữa hai đối tượng hình học.Thư viện hình học cho Java

+2

Kích thước của không gian bạn đang làm việc là gì? 2D, 3D? –

+0

2D ............. – nanda

+5

Tắt chủ đề? Bạn sẽ đùa tôi. Cho phép đóng tất cả các câu hỏi Java sau đó. – Stepan

Trả lời

31

JTS là tùy chọn mã nguồn mở miễn phí tốt nhất của bạn. Phương pháp bạn đang tìm kiếm trong JTS là here

Theo như tùy chọn thương mại, bạn có ESRI's Java JNI version thư viện ArcObjects có Thư viện hình học rất mạnh mẽ. Giao diện trên thư viện của ESRI được gọi là ITopologicalOperator

Nếu tất cả những gì bạn đang cố gắng làm là Hoạt động hình học, JTS là lựa chọn tốt nhất của bạn - nó là một thư viện tuyệt vời có nhiều cổng khác nhau. Mặt khác, nếu bạn đang tìm kiếm toàn bộ hệ thống GIS có biểu tượng phức tạp, hỗ trợ luồng công việc GIS và chỉnh sửa nhiều người, in ấn, v.v., thì tôi sẽ bắt đầu xem các thư viện ESRI.

+3

Liên kết Kendrics bị bỏ lỡ: URL mới: http://tsusiatsoftware.net/jts/main.html – KarlP

+3

Một tùy chọn miễn phí từ Esri: https://github.com/Esri/geometry-api-java – 0kcats

+0

đã đồng ý. Trong phòng thủ của tôi, nó không tồn tại trong năm 2010 :) – rburhum

6

Gói bạn nên xem nó java.awt.geom, là một phần của JDK.

Cụ thể, hãy xem lớp java.awt.geom.Area, cho phép bạn thực hiện các hoạt động giao cắt giữa hai Shape s.

EDIT

Tìm các điểm giao nhau là không tầm thường như xa như tôi biết, vì bạn cần phải áp dụng một thuật toán khác nhau tùy thuộc vào hình dạng bạn đang phân tích. Ví dụ, thuật toán cho giao điểm giữa hai vòng tròn được đưa ra here, trong khi thuật toán để tính toán đường truyền giữa hai đường cong Bezier hoàn toàn khác nhau (here).

EDIT 2

Một gợi ý: Bạn có thể nhìn vào lớp PathIterator, mà trả về một mô tả về con đường của một hình dạng như một chuỗi các phân đoạn. Cụ thể kiểm tra FlatteningPathIterator, sẽ sụp đổ bất kỳ đường cong thành nhiều đường thẳng. Khi đường dẫn của bạn đã được giảm xuống các đường thẳng, việc tính toán các điểm giao nhau sẽ đơn giản ... mặc dù rõ ràng đây là một xấp xỉ trong trường hợp hình dạng của bạn chứa các đường cong.

+0

nhưng kết quả chỉ đúng/sai. Tôi cần các điểm giao nhau exacts – nanda

+0

bình luận để EDIT: cho đến nay tôi biết, một khi chúng ta biết phương trình của con đường nó là khá đơn giản để có được điểm giao nhau. Có lẽ tôi sẽ tự mình tạo ra thư viện nếu không có giải pháp phức tạp ngoài kia. – nanda

+0

Xem chỉnh sửa thứ 2 của tôi. – Adamski

6

Đối với mục đích phi GIS tôi có thể đề nghị javaGeom thư viện. Nó sử dụng sự trừu tượng hóa hình học Euclide mà hầu hết mọi người đều biết từ trường học. Không có hoạt động nào gần đây về dự án này, nhưng tôi thấy nó có cấu trúc và dễ sử dụng.Họ nói nó hỗ trợ các hoạt động boolean, nhưng chưa bao giờ thử nghiệm chúng hoạt động tốt như thế nào. Có một ứng dụng thử nghiệm khá giàu tính năng tên là Euclid, được phát triển từ cùng một tác giả. Bạn có thể thử sử dụng nó, nhưng chỉ khi bạn chắc chắn nó sẽ làm việc cho bạn.

http://sourceforge.net/projects/geom-java/

+0

Có vẻ như họ đã có 3 bản phát hành vào cuối năm 2011, sau một thời gian dài không hoạt động. Ngoài ra, các thư viện trông nhỏ gọn hơn nhiều so với JTS - tốt đẹp không để sưng lên những điều quá nhiều! – rescdsk

+0

kiểm tra [câu trả lời này] (http://gamedev.stackexchange.com/a/114761/36681) cũng vậy, tôi đã tìm thấy nhiều lựa chọn thay thế –