Tiêu đề nói tất cả, tôi đã tìm kiếm xung quanh và không thể tìm thấy bất cứ điều gì đó là thẳng và cho điểm. Làm thế nào tôi sẽ có một dòng với các điểm (x1, y1) & (x2, y2) và kiểm tra giao điểm của nó giữa một hình chữ nhật (xR, yR)? Tôi đã thấy trong gói Line2D có một số phương pháp giao nhau nhưng không chắc chắn cách thiết lập tất cả. Ai đó có thể chỉ cho tôi cách thiết lập chính xác để kiểm tra giao lộ (va chạm) không?Cách kiểm tra giao lộ giữa một đường thẳng và hình chữ nhật?
Trả lời
Sử dụng các lớp khả dụng từ API đồ họa 2D.
Rectangle r1 = new Rectangle(100, 100, 100, 100);
Line2D l1 = new Line2D.Float(0, 200, 200, 0);
System.out.println("l1.intsects(r1) = " + l1.intersects(r1));
Điều này không cho bạn biết, là nơi ...
Cảm ơn bạn, tôi không cần biết đâu, chỉ cần biết họ có làm hay không. –
Hình chữ nhật có 4 dòng. Bạn có thể tính toán giao điểm giữa đường của bạn và 4 dòng của hình chữ nhật.
cho các phương trình của hai dòng, chúng sẽ giao nhau khi x và y bằng nhau.
y = m1x + b1 y = m2x + b2
giải phương trình bạn sẽ nhận được:
x = b2 - b1/(m1 - m2);
Lưu ý rằng nếu m1 == m2, các đường thẳng song song và sẽ không bao giờ cắt nhau, hãy xem số chia cho 0 trong trường hợp này. Sau đó, vì bạn đang giao dịch với các phân khúc ratter hơn so với các dòng vô hạn, hãy kiểm tra xem giao lộ có nằm trong các phân khúc của bạn hay không (kiểm tra xem cả X và Y nằm trong ranh giới của mỗi đoạn) hay không.
+1 chỉ vì nó trông rất tốt – MadProgrammer
Cảm ơn bạn :) Hãy chơi xung quanh với câu trả lời của bạn :) Cảm ơn –
Đó là một chút khó khăn hơn thế này - đại diện y = mx + c không thể xử lý đường thẳng đứng. – aaronsnoswell
Returns null nếu dòng không giao nhau. Sửa đổi một số mã c từ một phản ứng khác cho câu hỏi tương tự để làm cho nó Java. Đã không bận tâm để xem xét như thế nào/tại sao nó hoạt động, nhưng công việc tôi cần nó để.
static Point get_line_intersection(Line2D.Double pLine1, Line2D.Double pLine2)
{
Point
result = null;
double
s1_x = pLine1.x2 - pLine1.x1,
s1_y = pLine1.y2 - pLine1.y1,
s2_x = pLine2.x2 - pLine2.x1,
s2_y = pLine2.y2 - pLine2.y1,
s = (-s1_y * (pLine1.x1 - pLine2.x1) + s1_x * (pLine1.y1 - pLine2.y1))/(-s2_x * s1_y + s1_x * s2_y),
t = (s2_x * (pLine1.y1 - pLine2.y1) - s2_y * (pLine1.x1 - pLine2.x1))/(-s2_x * s1_y + s1_x * s2_y);
if (s >= 0 && s <= 1 && t >= 0 && t <= 1)
{
// Collision detected
result = new Point(
(int) (pLine1.x1 + (t * s1_x)),
(int) (pLine1.y1 + (t * s1_y)));
} // end if
return result;
}
Chỉ cần kiểm tra. Công trinh. – Danon
- 1. cách kiểm tra bộ sưu tập hình chữ nhật cho lỗ và giao lộ?
- 2. chuyển một đường thẳng thành hình chữ nhật
- 3. Diện tích giao lộ giữa hình tròn và hình chữ nhật
- 4. Đường chéo Hình chữ nhật - cách tìm điểm giao nhau?
- 5. Cách kiểm tra giao điểm giữa 2 hình chữ nhật được xoay?
- 6. Giao lộ đường trong android
- 7. Cách tính góc giữa một đường thẳng và trục ngang?
- 8. Làm cách nào để kiểm tra xem có bất kỳ điểm nào (hoặc một phần) của một đường thẳng hay chạm vào hình chữ nhật
- 9. Vẽ đường thẳng giữa mô hình và Bộ điều khiển
- 10. Cách nhanh hơn để kiểm tra hình chữ nhật giao nhau?
- 11. Tìm CGPoint trên hình chữ nhật UIView giao nhau bằng một đường thẳng tại một góc nhất định từ điểm giữa
- 12. Giao lộ CGPathRef
- 13. Giao diện hình chữ nhật không trục liên kết
- 14. đường ray - Tìm giao lộ giữa nhiều mảng
- 15. Điểm giao nhau giữa một đường spline và một dòng
- 16. cho các đường nối hình chữ nhật
- 17. Làm cách nào để tính điểm giao nhau của đường thẳng và hình dạng tùy ý?
- 18. Tổng diện tích của các hình chữ nhật giao nhau
- 19. Kiểm tra xem một điểm có nằm trong một hình chữ nhật xoay (C#)
- 20. Kiểm tra căng thẳng WebSockets trong Jmeter
- 21. Đường viền vẽ hình chữ nhật WPF
- 22. OpenGL vẽ đường viền hình chữ nhật
- 23. Vẽ đường thẳng giữa hai ô con
- 24. Hình chữ nhật chỉ có một đường viền
- 25. Giao điểm của đường thẳng và cạnh tam giác
- 26. Thiết kế khung kiểm tra căng thẳng
- 27. Cách tính khoảng cách từ một điểm đến một đoạn đường thẳng, trên một hình cầu?
- 28. Giao diện đa giác với đường thẳng | Python Shapely
- 29. Liên minh và giao lộ trong PowerShell?
- 30. trong MVC, bạn vẽ đường thẳng giữa bộ điều khiển và mô hình ở đâu?
* "Cảm ơn Dan" * Không bao gồm sigs. trong câu hỏi. Việc va chạm giữa các đối tượng 'Area' có thể được thực hiện tương đối dễ dàng. Đây là [ví dụ] (http://stackoverflow.com/a/14575043/418556). –
Cảnh báo. Bởi vì bạn thường có thể sử dụng lớp Area của Java để phát hiện va chạm/giao cắt cho hầu như tất cả các đối tượng đồ họa Java 2D, nên nó có thể được sử dụng cho tất cả các đối tượng đồ họa. Nhưng nó không thể được - bởi vì nếu bạn xây dựng một khu vực cho một 'dòng' khu vực của dòng chính nó bắt đầu trống rỗng. Do đó, giao lộ với bất kỳ khu vực nào khác luôn trả về trống - ngay cả khi đường đi qua khu vực khác của bạn. Bạn đa được cảnh bao! –