2013-09-28 2 views
1

У меня есть все пункты, чтобы нарисовать линию и показать, что точки на холсте правильно. Но теперь я хочу нарисовать еще одну строку на этой существующей строке при касании пользователем. И мой вопрос заключается в том, как можно найти пользователя, касающегося внутренней линии или вне линии?Как установить регион, если точки есть и найти определенную область?

ответ

1

У меня есть предложение.

Это мысль, основанная на Google Maps и Polylines, но, возможно, ее легко адаптировать к ситуации с Canvas 2DLine.

Этот метод используется для вычисления расстояния между двумя LatLng точками:

/** distance in meters **/ 
private float distFrom(double lat1, double lng1, double lat2, double lng2) { 
    double earthRadius = 3958.75; 
    double dLat = Math.toRadians(lat2 - lat1); 
    double dLng = Math.toRadians(lng2 - lng1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) 
      + Math.cos(Math.toRadians(lat1)) 
      * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) 
      * Math.sin(dLng/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    double dist = earthRadius * c; 

    int meterConversion = 1609; 

    return (float) (dist * meterConversion); 
} 

Когда пользователь нажимает на холст (для простоты только представьте, она имеет только одну строку):

  • lineLength = Вычисление расстояний между точками (полная длина линии)
  • endToClickLength1 = Рассчитать расстояние от положения клика до конечной точки 1 линии
  • endToClickLength2 = Вычислить расстояние от положения мыши до конечной точки 2 линии

Теперь, если endToClickLength1 + endToClickLength2 = lineLength (+/- acceptedError), то пользователь нажал линию.

ПринимаемыйError необходим для расширения границы, когда несколько нажатий на линии.

Сделайте это для всех рисованных линий, чтобы указать, была ли нажата одна из линий.

Смежные вопросы