삽질하는 플머 | 오랑캐꽃
http://blog.naver.com/oranke/40002094977
[질문]화살표 그리는 방법
일반적인 선이 아닌 화살표 그리는 방법을 아시는 분 계시면
도와주시기 바랍니다.
선그리기나 이런것 처럼 아무리 찾아봐도 함수나 컴포넌트가 없네요.
감사합니다
[답변]화살표 그리는 방법
Pt1을 시작점, Pt2를 끝점, 화살의 길이를 A, 화살의 폭을 B라고 합시다.
Pt1이 원점에 놓여있고 Pt1과 Pt2를 잇는 직선이 그리는 각도가 0도라고 할 때
화살표를 구성하는 Pt3과 Pt4의 좌표는 다음과 같습니다
Pt3 = (D-A, B/2),
Pt4 = (D-A, -B/2). (D : Pt1과 Pt2를 잇는 직선의 거리)
Pt1->Pt2를 잇는 직선의 각도 th는 ArcTan 한방으로 구할 수 있구요..
var
Pt1, Pt2 : TPoint;
...
th := ArcTan2(Pt2.y-Pt1.y, Pt2.x-Pt1.x);
두 점의 거리는 피타고라스 할배의 정리에 따라 다음과 같이 계산됩니다.
D := Sqrt(sqr(Pt2.x-Pt1.x) + sqr(Pt2.y-Pt1.y));
2차원 좌표상의 점을 주어진 각도 th만큼 회전시키는 행렬식은 다음과 같습니다.
| Nx Ny | =| X Y | * | cos(th) sin(th) |
| -sin(th) cos(th) |
위의 행렬식을 풀고 원점으로 간주했던 시작점을 실제 Pt1의 좌표만큼 옵셋시키면
Pt3과 Pt4를 Pt1을 중심으로 th만큼 회전한 새로운 Pt3과 Pt4를 계산할 수 있습죠.
Pt3 :=
Point(
Trunc((D-A) * cos(th) - (b/2) * sin(th)) + Pt1.x,
Trunc((D-A) * sin(th) + (b/2) * cos(th)) + Pt1.y
);
Pt4 :=
Point(
Trunc((D-A) * cos(th) + (b/2) * sin(th)) + Pt1.x,
Trunc((D-A) * sin(th) - (b/2) * cos(th)) + Pt1.y
);
Pt1과 Pt2가 주어졌을 때 Pt3와 Pt4를 계산하기 위한 식들을 모두 알아봤습니다.
이제 구해진 점들을 연결하기만 하면 예쁜 화살표가 그려지겠죠???
2011년 2월 20일 일요일
피드 구독하기:
댓글 (Atom)
UPBIT is a South Korean company, and people died of suicide cause of coin investment.
UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...
-
연휴 마지막날 아침... 산책을 하다 한장 찍어보았다. 인생도 마찬가지로 길의 끝을 모른체 선택을 해야하는 경우가 발생한다. 나중에 그 기준이 바뀔수도 있지만. 지금 기준은 많은 사람이 함께 갈 수 있는 길을 선택하고 싶다.
-
울 하솔이 태어난지 16일째.. 몸무게 1640g.. 먹는 맘마양 30g.. 여전이 feeding tube유지중~ 울 하솔이의 활발했던 모습이 계속 아른거리네. 거기 울 하솔이 봐주시던 간호사쌤이 하는말 들었지?! 코는 엄마 닮은지 알았지만...
-
□ native modifier 는 자바가 아닌 다른 언어로 작성된 코드를 자바에서 사용하기 위한 것 □ transient modifier 는 객체가 직렬 화되는 과정에서 해당 필드가 저장되지 않아야 한다는 것을 알리기 위해 사용 ...
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.