2011-11-01 30 views
12

Khi đó tôi hỏi một câu hỏi để xem liệu tôi có thể tìm thấy một cặp điểm cụ thể trong một con đường hay không; tuy nhiên, lần này tôi muốn biết nếu có một cách để biết tất cả các điểm trong một con đường? (Tôi không thể tìm thấy một phương pháp đã làm như vậy, đó là không may vì Java cung cấp một cách để làm điều này, chỉ cần không Android?)Làm cách nào để tìm tất cả các điểm trong đường dẫn trong Android?

Lý do tôi hỏi điều này là bởi vì tôi có nhiều đồ thị hình học và tôi muốn so sánh các điểm để xem nơi họ giao nhau.

Tôi đánh giá cao bất kỳ phản ứng hữu ích

Trả lời

2

Nếu bạn đã tạo một Path đó có nghĩa là trong một thời điểm nào của mã của bạn, bạn biết (Geo) điểm chính xác. Tại sao bạn không đặt (các) điểm này trên ArrayList hoặc một cái gì đó tương tự?

Vì vậy, ví dụ như trước khi thực hiện:

path.lineTo(point.x, point.y); 

bạn có thể làm:

yourList.add(point); 
path.lineTo(point.x, point.y); 

Và sau đó bạn có thể nhận được tất cả các điểm của bạn từ ArrayList. Lưu ý rằng bạn có thể tận dụng lợi thế của Enhanced For Loop Syntax của ArrayList thực hiện nhanh hơn đến ba lần.

+0

Đó là những gì tôi sẽ làm gì nếu không có bất kỳ thay thế. Tôi sẽ để câu hỏi mở thêm vài ngày nữa và nếu không có cách nào khác được đề xuất, tôi sẽ chấp nhận câu trả lời này. – StartingGroovy

+0

@StartingGroovy Ok, hãy xem bài đăng cập nhật của tôi, để tận dụng lợi thế của tốc độ hiệu suất, nếu cuối cùng bạn chọn giải pháp này. – Manos

+0

Thú vị, tôi đã không nhận thức được rằng việc tăng cường vòng lặp nhanh hơn gấp 3 lần :) nhờ có miếng ngon đó! – StartingGroovy

24

Bạn có thể sử dụng PathMeasure để có được tọa độ của điểm tùy ý trên gương path.For đoạn đơn giản này (mà tôi thấy here) trả về tọa độ của điểm ở nửa của con đường:

PathMeasure pm = new PathMeasure(myPath, false); 
//coordinates will be here 
float aCoordinates[] = {0f, 0f}; 

//get point from the middle 
pm.getPosTan(pm.getLength() * 0.5f, aCoordinates, null); 

Hoặc này đoạn trả về một mảng của mảng FlaotPoint s.That liên quan đến tọa độ của 20 điểm trên đường dẫn:

private FlaotPoint[] getPoints() { 
     FlaotPoint[] pointArray = new FlaotPoint[20]; 
     PathMeasure pm = new PathMeasure(path0, false); 
     float length = pm.getLength(); 
     float distance = 0f; 
     float speed = length/20; 
     int counter = 0; 
     float[] aCoordinates = new float[2]; 

     while ((distance < length) && (counter < 20)) { 
      // get point from the path 
      pm.getPosTan(distance, aCoordinates, null); 
      pointArray[counter] = new FlaotPoint(aCoordinates[0], 
        aCoordinates[1]); 
      counter++; 
      distance = distance + speed; 
     } 

     return pointArray; 
    } 

trong đoạn trên, FlaotPoint là một lớp đóng gói tọa độ của một điểm:

class FlaotPoint { 
     float x, y; 

     public FlaotPoint(float x, float y) { 
      this.x = x; 
      this.y = y; 
     } 

     public float getX() { 
      return x; 
     } 

     public float getY() { 
      return y; 
     } 
    } 

Tài liệu tham khảo:
stackoverflow
Animating an image using Path and PathMeasure – Android

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