2012-04-12 44 views
5

enter image description here Tôi muốn biết nếu có cách nào đó để phát hiện nếu đường dẫn được vẽ hiện tại chạm/vượt qua đường dẫn hiện có. Đường dẫn hiện có được vẽ hoặc một phần của hình nền. Sẽ hữu ích nếu tôi có thể tìm thấy số sau đường dẫn hiện tại này được vẽ hoàn toàn. Trong trường hợp xấu nhất, tôi có thể thực hiện kiểm tra từng pixel để xem liệu hai đường dẫn có đang chạm không?Phát hiện đường dẫn chồng lên nhau trong Android

+0

Thêm liên kết vào ảnh chụp màn hình và một số tham chiếu đến những gì được thấy có thể giúp làm rõ mọi thứ một chút. – erbsman

+0

Đã thêm ảnh chụp màn hình. – deeJ

Trả lời

0

Sử dụng đường dẫn để xác định đường kẻ, sau đó đặt android.graphics.Region cho đường dẫn đó. Sau đó, kiểm tra tất cả các khu vực với nhau theo thời gian mà chúng giao nhau hoặc không bằng cách

region1.op(region2, Op.INTERSECT); 
+0

Điều này chắc chắn sẽ không hoạt động vì một khu vực là một con đường khép kín, và anh ta không vẽ đường dẫn khép kín ở mọi thời điểm? Hay tôi đang thiếu thứ gì đó ở đây? – erbsman

+0

Nếu anh ta vẽ thứ gì đó, nó sẽ có chiều rộng ở cả kích thước x & y. Ông có thể xây dựng một con đường khép kín xung quanh nó, ít nhất là một trong những pixed chiều rộng. – Bondax

+0

Bất kỳ ý tưởng làm thế nào tôi có thể tạo đường dẫn từ một mảng PointF []? Tôi đã có tọa độ của tất cả các điểm trong mảng này. – deeJ

0

Bạn có thể lưu các dòng trong Danh sách, sau đó kiểm tra dòng bạn đang vẽ trên mỗi dòng trong danh sách để xem nó có giao nhau hay không. Bạn sẽ tìm thấy nhiều câu trả lời về cách phát hiện đường giao nhau ở đây trên stackoverflow.

ArrayList<Pair<Pair<Integer,Integer>,Pair<Integer,Integer>>> lineList = new ArrayList<Pair<Pair<Integer, Integer>, Pair<Integer, Integer>>>(); 

    // add all your lines to the list 
    // lineList.add(line); 

    // handle the last line 
    int startX = 10; 
    int startY = 20; 
    int endX = 40; 
    int endY = 50; 

    Pair<Integer,Integer> lineStart = new Pair<Integer, Integer>(startX, startY); 
    Pair<Integer,Integer> lineEnd = new Pair<Integer, Integer>(startX, startY); 
    Pair<Pair<Integer,Integer>,Pair<Integer,Integer>> lastLine = new Pair<Pair<Integer, Integer>, Pair<Integer, Integer>>(lineStart, lineEnd); 

    for(Pair<Pair<Integer,Integer>,Pair<Integer,Integer>> l: lineList){ 
     // if "lastLine" intersects "l" do you stuff 
    } 
+0

Tôi tự hỏi làm cách nào để lưu một dòng trong danh sách. Tôi lưu tọa độ của tất cả các điểm ảnh của dòng? – deeJ

+0

chỉ cần lưu một cặp. int startX = 10; int startY = 20; int endX = 40; int endY = 50; Pair lineStart = new Pair (startX, startY); Pair lineEnd = cặp mới (startX, startY); Pair , Pair > line = new Pair (lineStart, lineEnd); – erbsman

+0

Điều này sẽ không hoạt động đối với đường cong, phải không? Tôi xin lỗi nếu điều đó không được ngụ ý trong câu hỏi. – deeJ

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