2012-06-25 39 views
5

Tôi có 2 đối tượng đường dẫn trong mã Android của tôi. Tôi đã thử tất cả cách để kiểm tra thời tiết những đường dẫn này có giao nhau hay không, Nhưng không thể thực hiện. Làm thế nào tôi có thể kiểm tra thời tiết những con đường được cắt nhau hay không. Đánh giá cao bất kỳ phản ứng tốt ..... Cảm ơn,Giao lộ đường trong android

Trả lời

4

có một cái nhìn tại Region.op

Tôi đã không thử nó nhưng tôi sẽ đề nghị sử dụng:

Region.setPath(Path path, Region clip); 

để có được một khu vực từ cả hai đường dẫn của bạn và sau đó bạn có thể sử dụng:

if (region1.op(region2,Region.Op.INTERSECT)) { 
    // intersection 
} 

để kiểm tra các ngã tư ...

+1

Khu vực sẽ tạo hình chữ nhật chứa đường dẫn phải không ?. Con đường của tôi là có curves.So tôi wont nghĩ rằng việc tạo ra một khu vực sẽ có hiệu lực –

+4

không có nó không chỉ tạo ra một hình chữ nhật có chứa đường dẫn. Hãy xem tài liệu: "Điều này tạo ra một vùng giống với các điểm ảnh được vẽ theo đường dẫn (không có antialiasing)." " – Dirk

+0

sẽ trả về op() nếu region1 chứa toàn bộ vùng2 và ranh giới của chúng Tôi có nghĩa là, làm thế nào để kiểm tra hai trường hợp riêng biệt, 1.Region ngã tư và 2. Đường giao nhau – usman

6

Câu trả lời được đưa ra bởi Dheeraj có câu trả lời cho câu hỏi của bạn:

https://stackoverflow.com/a/9918830/1268168

Dưới đây là một sao chép và dán các câu trả lời của mình:

Một phương pháp tôi có thể nghĩ sẽ làm việc với các đối tượng đơn giản có thể được xây dựng bằng Đường dẫn.

Khi bạn có hai đối tượng có ranh giới được đại diện bởi các đường dẫn, bạn có thể thử này:

Path path1 = new Path(); 
path1.addCircle(10, 10, 4, Path.Direction.CW); 
Path path2 = new Path(); 
path2.addCircle(15, 15, 8, Path.Direction.CW); 

Region region1 = new Region(); 
region1.setPath(path1, clip); 
Region region2 = new Region(); 
region2.setPath(path2, clip); 

if (!region1.quickReject(region2) && region1.op(region2, Region.Op.INTERSECT)) { 
    // Collision! 
} 

Một khi bạn có đối tượng của bạn như Paths, bạn có thể vẽ chúng trực tiếp sử dụng drawPath(). Bạn cũng có thể thực hiện chuyển động bằng cách chuyển đổi() vào đường dẫn.

Từ hiểu biết của tôi, biến "clip" trong mã ở trên phải là hộp giới hạn của đường dẫn. Vì mục đích chung tôi sử dụng

Region clip = new Region(0, 0, layoutWidth, layoutHeight); 

Trường hợp chiều rộng và chiều cao bố cục có thể là kích thước của canvas hoặc hoạt động của bạn hoặc bất kỳ thứ gì.

6

Từ API 19 trở đi, Path hiện có phương thức op().

boolean intersects = path.op(p1,p2,Path.Op.INTERSECT) 
+1

Giá trị trả về cho thấy sự thành công của hoạt động, không cho dù họ giao nhau hay không. Nó kiểm tra các vùng khép kín, không phải là đường dẫn của chúng. Kiểm tra nhanh: xây dựng một polyline góc như một đường đi, sau đó một đường thẳng đơn nằm bên trong góc, không đi qua nó. –

Các vấn đề liên quan