삽질하는 플머 | 오랑캐꽃
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...
-
XE(제로보드) 내 게시판의 첨부용량 변경 ㅁ 개요 ↑ XE 구축시 초기 첨부파일 용량은 2M로 제한되어 있음에 데이터 자료실을 만들기 위해 용량을 명령어를 이용하여 추가 혹은 감소 시키도록 하고자 한다. ㅁ 구현 ↑ 처음 ...
-
일단 ssh 프로그램으로 apm 셋팅을 하려고 했으나 apt-get이 계속 파일 위치를 잡지 못했다. (404 not found....) 그래서 구글링 결과 apt의 리스트 변수 목록을 제거하고 새로 업데이트 하는 명령어를 찾음 :)...
-
□ native modifier 는 자바가 아닌 다른 언어로 작성된 코드를 자바에서 사용하기 위한 것 □ transient modifier 는 객체가 직렬 화되는 과정에서 해당 필드가 저장되지 않아야 한다는 것을 알리기 위해 사용 ...
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.