2015-01-31 2 views
2

Я пытался придумать алгоритм для рисования стрелки в пользовательском представлении с использованием Path, но я не понял, как получить координаты наконечников стрелок. Координаты начальной и конечной точек линии произвольны, угол стрелки относительно линии и длина наконечника стрелки фиксированы.Алгоритм для рисования стрелки в конце произвольной строки в пользовательском представлении Android

Я думаю, что мне нужно как-то использовать тригонометрию, но я не знаю, как это сделать.

+0

Возможно, покажите, что вы пробовали до сих пор, чтобы мы могли улучшить ваши усилия. – tung

+0

Проблема с добавлением изображения - это линия может быть под любым углом. –

+0

По крайней мере, вы можете показать фрагмент своего кода. :) – Bob

ответ

0

Мой друг пришел с уравнением математики, которую я перевел на Java код здесь:

public static void calculateArrowHead(Point start, Point end, double angleInDeg, double tipLength){ 
    double x1 = end.getX(); 
    double x2 = start.getX(); 
    double y1 = end.getY(); 
    double y2 = start.getY(); 
    double alpha = Math.toRadians(angleInDeg); 
    double l1 = Math.sqrt(Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2)); // length of the arrow line 
    double l2 = tipLength; 

    double a = Math.pow(y2-y1, 2) + Math.pow(x2-x1, 2); 
    double b = -2 * l1 * l2 * Math.cos(alpha) * (y2 - y1); 
    double c = Math.pow(l1, 2) * Math.pow(l2, 2) * Math.pow(Math.cos(alpha), 2) - Math.pow(l2, 2) * Math.pow(x2-x1, 2); 

    double s2a = (-b + Math.sqrt(Math.pow(b, 2) - 4 * a * c))/(2 * a); 
    double s2b = (-b - Math.sqrt(Math.pow(b, 2) - 4 * a * c))/(2 * a); 
    double s1a = (l1 * l2 * Math.cos(alpha) - s2a * (y2 - y1))/(x2-x1); 
    double s1b = (l1 * l2 * Math.cos(alpha) - s2b * (y2 - y1))/(x2-x1); 

    double x3a = s1a + x1; 
    double y3a = s2a + y1; 
    double x3b = s1b + x1; 
    double y3b = s2b + y1; 
    System.out.println("(A) x:" + (int)x3a + "; y:" + (int)y3a); 
    System.out.println("(B) x:" + (int)x3b + "; y:" + (int)y3b); 
} 

Я не проверял его тщательно, но в течение первых нескольких тестов, оказывается правильным.

+0

Теперь сравните это: http://pastebin.com/DxqQxxMX – pskink

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

  • Нет связанных вопросов^_^