2015-01-31 2 views
2

경로를 사용하여 사용자 정의보기에 화살표를 그리는 알고리즘을 생각해 냈습니다. 그러나 방법을 찾지 못했습니다. 화살촉의 좌표를 얻는다. 선의 시작점과 종점 좌표는 임의이며, 선에 대한 화살촉의 각도와 화살촉의 길이는 고정되어 있습니다.안드로이드 사용자 정의에서 임의의 줄 끝에서 화살촉을 그리는 알고리즘보기

나는 어떻게 든 삼각법을 사용해야한다고 생각하지만, 나는 잘 모릅니다.

+0

아마도 지금까지 시도한 것을 보여줌으로써 우리의 노력을 향상시킬 수 있습니다. – tung

+0

이미지를 추가하는 데 문제가되는 것은 어떤 각도에서도 선이 될 수 있습니다. –

+0

적어도 코드 스 니펫을 표시 할 수 있습니다. :) – Bob

답변

0

내 친구가 내가 여기에 자바 코드로 번역 한 수학 방정식, 함께했다 : 나는 그것을 철저하게 테스트하지 않았습니다

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