삽질하는 플머 | 오랑캐꽃
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...
-
프루나는 이제 믿을만한 공유가 안되고 있다. 젠장. 영화 다운 받아보면 전부 야동이나 포르노류 밖에는 없다. 신고되어 있는 자료부터 보지만 신고가 안되어 있는 것은 제대로 다운도 되지 않는다. 이젠 유료 사이트를 믿을 수 밖엔... ...
-
Intel의 새로운 MMX - "KNI" KNI 는 Katmai New Instruction 의 약자이다 . 아는 분들은 잘 알고있겠지만 KATMAI( 이하 카트마이로 부름 ) 는 인텔의 다음번 펜티엄...
-
C:\program files\ 베이비론 폴더가 있다. 브라우저 창 다닫고 지우고 다시 실행하면 없어진다.
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.