Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
화살표를 그려야 하는데......
저는 유체를 전공하는 대학원생입니다.
벡터를 표시해야 하는데 잘되지 않군요.
4사분면과 삼각함수를 이용해서 화살표를 그려보라구 하는데.....
머리가 나쁜지 잘 안되는군요.
김영대님 부탁해요.....
그럼 수고 하세요.
1
COMMENTS
김영대
•
1999.10.13 01:26
moon wrote:
> 저는 유체를 전공하는 대학원생입니다.
> 벡터를 표시해야 하는데 잘되지 않군요.
> 4사분면과 삼각함수를 이용해서 화살표를 그려보라구 하는데.....
> 머리가 나쁜지 잘 안되는군요.
> 김영대님 부탁해요.....
> 그럼 수고 하세요.
제가 가지고 있던 자료인데 삼각함수를 이용한 화살표 그리는
예제 소스입니다
저도 어딘가에서 가져온 소스라 추가 설명을 드릴 수 없고요
중요한것은 화살표의 head 부분이니
아래 MyC.Polygon(Slice(ArrowHead,5)); 의 뒤에 있는 숫자 5 를
1 ~ 5 로 바꾸어 가면서 보시면 각 요소를 분석하기가 쉬워요
// Button 을 계속 클릭해 보세요
// 각도에 따라 회전한 화살표가 그려집니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Math;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure DrawArrowFill(X,Y: Integer; Bearing: Double; MyC: Tcanvas; Pcolor: TColor);
var
R,R1: Double;
X1,Y1: Integer;
ArrowHead: array[0..5] of Tpoint; // x,y values
ArrowTail: array[0..4] of Tpoint;
begin
MyC.Pen.Color := ClBlack; // Outline Polygon in Black
MyC.Pen.Style := psSolid;
MyC.Pen.Mode := PmCopy;
MyC.Brush.Color := PColor;
MyC.Brush.Style := BsSolid;
R := 10; // Size of arrow can be changed with R and R1
R1 := R + 5;
X1 := X + Round(Sin(DegToRad(Bearing))*R1);
Y1 := Y - Round(Cos(DegToRad(Bearing))*R1); // Point of Arrow
// Draw the head first
ArrowHead[0].X := X + Round(Sin(DegToRad(Bearing))*R);
ArrowHead[0].Y := Y - Round(Cos(DegToRad(Bearing))*R);
ArrowHead[1].X := X1 + Round(Sin(DegToRad(Bearing+200))*R1);
ArrowHead[1].Y := Y1 - Round(Cos(DegToRad(Bearing+200))*R1);
ArrowHead[2].X := X1;
ArrowHead[2].Y := Y1;
ArrowHead[3].X := X1 + Round(Sin(DegToRad(Bearing-200))*R1);
ArrowHead[3].Y := Y1 - Round(Cos(DegToRad(Bearing-200))*R1);
ArrowHead[4].X := ArrowHead[0].X;
ArrowHead[4].Y := ArrowHead[0].Y;
MyC.Polygon(Slice(ArrowHead,5));
// Draw the shaft
ArrowHead[5].X := ArrowHead[0].X + Round(Sin(DegToRad(Bearing+180))*R);
ArrowHead[5].Y := ArrowHead[0].Y - Round(Cos(DegToRad(Bearing+180))*R);
// Could dump out here if tail not desired.
MyC.MoveTo(ArrowHead[4].X,ArrowHead[4].Y);
MyC.LineTo(ArrowHead[5].x,ArrowHead[5].Y); // Draw shaft to Start of Feathers
// Draw the feathers
ArrowTail[0].X := ArrowHead[5].X + Round(Sin(DegToRad(Bearing-200))*r1);
ArrowTail[0].Y := ArrowHead[5].Y - Round(Cos(DegToRad(Bearing-200))*r1);
ArrowTail[1].X := ArrowHead[0].X + Round(Sin(DegToRad(Bearing+180))*R1);
ArrowTail[1].Y := ArrowHead[0].Y - Round(Cos(DegToRad(Bearing+180))*R1);
ArrowTail[2].X := ArrowHead[5].X + Round(Sin(DegToRad(Bearing+200))*R1);
ArrowTail[2].Y := ArrowHead[5].Y - Round(Cos(DegToRad(Bearing+200))*R1);
ArrowTail[3].X := ArrowHead[5].X;
ArrowTail[3].Y := ArrowHead[5].Y;
ArrowTail[4].X := ArrowTail[0].X; // Close the Polygon
ArrowTail[4].Y := ArrowTail[0].Y;
MyC.PolyGon(ArrowTail); // Draw the tail
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Rect(0, 0, Image1.Width, Image1.Height));
Image1.Tag := Image1.Tag + 10;
DrawArrowFill(Image1.Width div 2,
Image1.Height div 2,
image1.Tag,
Image1.Canvas,
ClRed);
end;
end.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
임태영
1999.10.13 00:25
0
COMMENTS
/
0
LIKES
Win32 API 책 추천 바랍니다.
정은재
•
1999.10.12 10:30
2
COMMENTS
/
0
LIKES
randomize 함수
안치봉
•
1999.10.12 10:56
안녕하세요. 좀 무식한 방법으로 한다면 아래 같이 생각해 볼수 있습니다. 1. 우선 1개의 랜덤숫자를...
고규인
•
1999.10.13 02:16
안치봉 wrote: > 안녕하세요. > > 좀 무식한 방법으로 한다면 아래 같이 생각해 볼수 있습니다. > >...
moon
•
1999.10.12 07:53
1
COMMENTS
/
0
LIKES
화살표를 그려야 하는데......
저는 유체를 전공하는 대학원생입니다. 벡터를 표시해야 하는데 잘되지 않군요. 4사분면과 삼각함수를 이용해서 화살표를 그려보라구 하는데..... 머리가 나쁜지 잘 안되는군요. 김영대님 부탁해요..... 그럼 수고 하세요.
김영대
•
1999.10.13 01:26
moon wrote: > 저는 유체를 전공하는 대학원생입니다. > 벡터를 표시해야 하는데 잘되지 않군요. > 4사...
미친병아리
•
1999.10.12 02:35
2
COMMENTS
/
0
LIKES
계속 Access Violation이 나며 델파이가 죽습니다..
임성룡
•
1999.10.12 07:29
미친병아리 wrote: > > 예전에 잘 사용하던 델파이4에서 > 이상한 현상이 발생합니다.. > > MS사이...
김 성중
•
1999.12.13 21:55
답변은 아니고요 저도 같은 문제 입니다. 방법을 못찾았는데 저는 windows 2000을 사용하거든요 잘되다가...
이재현
1999.10.12 02:12
0
COMMENTS
/
0
LIKES
분류먼저 해주시길 부탁드립니다.
하남수
1999.10.12 01:50
0
COMMENTS
/
0
LIKES
(시리얼 통신)BAUD RATE변경에 대하여 질문
이대우
1999.10.12 01:35
0
COMMENTS
/
0
LIKES
마우스를 클릭할 때????
정수환
1999.10.12 01:04
0
COMMENTS
/
0
LIKES
델파이에서 사용중인 데이터를 아래한글 파일로 만들수 있나요???
장영선
•
1999.10.12 23:53
2
COMMENTS
/
0
LIKES
dos명령을 델파이에서 실행시킬려고 하는데...netstat -n>a.txt
김영대
•
1999.10.12 23:56
장영선 wrote: > dos명령을 델파이에서 실행시킬려고 하는데..잘 않되네요.. > netstat -n까지는 실행이 ...
김의만
•
1999.12.02 19:54
> function WinExecAndWait32(Path: PChar; Visibility: Word): integer; > var > Msg: TMsg; > lpE...
고한석
•
1999.10.12 00:29
2
COMMENTS
/
0
LIKES
버튼을 동적으로 생성시....
안치봉
•
1999.10.12 11:04
아래는 제가 해본건데 잘됩니다... 소스를 다시한번 찬찬히 보십시오. 의외로 버그는 간단한 것일수도 있...
이대우
•
1999.10.13 02:13
그런데요 ... 그것이 버튼이나 에디트 박스는 되는데... PANEL과 SHAPE는 그게 안되더라고요.. 왜 그...
수기
•
1999.10.12 00:04
1
COMMENTS
/
0
LIKES
[질문 급급] QuickReport 에서 SubDetail쓰는 방법
이재식
•
1999.10.12 05:40
안녕하십니까? 제가 도와드리죠. 제가 질문과 같은 구조의 테이블를 만들어서 샘플로 간단히 프로그램...
김태균
1999.10.12 00:00
0
COMMENTS
/
0
LIKES
Tprinter사용에 대해서..
손진운
•
1999.10.11 23:14
1
COMMENTS
/
0
LIKES
DBGrid에 있는 내용을 엑셀로 자료변환에 대하여...
김영대
•
1999.10.12 00:17
손진운 wrote: > DBGrid에 있는 데이타 자료들을 엑셀 자료로 변환할려고 합니다. > 어떻게 하면 될 수 ...
유니
•
1999.10.11 23:04
1
COMMENTS
/
0
LIKES
TEditMask의 Font Color
한
•
1999.10.12 01:57
음냐... 질문에 대한 답변이 될련지 모르겠네요... 그 방법은 모르겠고, ReadOnly 프로퍼티를 True로...
여용구
•
1999.10.11 22:40
1
COMMENTS
/
0
LIKES
BLOB필드에 직접 이미지 파일을 넣는 방법??
김영대
•
1999.10.11 22:44
여용구 wrote: > BLOB 필드에 직접 이미지 파일을 넣을 때에 어떻게 해야할지 궁금합니다. > DBImage 컴...
송수현
•
1999.10.11 22:37
1
COMMENTS
/
0
LIKES
CMMOUSEENTER를 어떻게 사용하나요?
김영대
•
1999.10.11 22:41
송수현 wrote: > 안녕하세요 엄청 초보입니다. 꾸벅~! > 밑에 보니깐 저랑 비슷한 경우의 질답이 있더군...
fsw523
1999.10.11 22:20
0
COMMENTS
/
0
LIKES
아래 dll 과 db에 대하여...
이두진
1999.10.11 20:24
0
COMMENTS
/
0
LIKES
DLL호출과 DB쿼리에서 문제가 발생했어요.
김선미
•
1999.10.11 20:11
1
COMMENTS
/
0
LIKES
연속된 이미지를 담은 하나의 비트맵의 애니매이션효과
김영대
•
1999.10.11 21:02
김선미 wrote: > 연속된 이미지가 들어 있는 비트맵 파일이 하나 있습니다. > 이것을 읽어 애니매이션처...
최선미
1999.10.11 19:53
0
COMMENTS
/
0
LIKES
분류먼저 해주시길 부탁드립니다.
moon
1999/10/12 07:53
Views
455
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 저는 유체를 전공하는 대학원생입니다.
> 벡터를 표시해야 하는데 잘되지 않군요.
> 4사분면과 삼각함수를 이용해서 화살표를 그려보라구 하는데.....
> 머리가 나쁜지 잘 안되는군요.
> 김영대님 부탁해요.....
> 그럼 수고 하세요.
제가 가지고 있던 자료인데 삼각함수를 이용한 화살표 그리는
예제 소스입니다
저도 어딘가에서 가져온 소스라 추가 설명을 드릴 수 없고요
중요한것은 화살표의 head 부분이니
아래 MyC.Polygon(Slice(ArrowHead,5)); 의 뒤에 있는 숫자 5 를
1 ~ 5 로 바꾸어 가면서 보시면 각 요소를 분석하기가 쉬워요
// Button 을 계속 클릭해 보세요
// 각도에 따라 회전한 화살표가 그려집니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Math;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure DrawArrowFill(X,Y: Integer; Bearing: Double; MyC: Tcanvas; Pcolor: TColor);
var
R,R1: Double;
X1,Y1: Integer;
ArrowHead: array[0..5] of Tpoint; // x,y values
ArrowTail: array[0..4] of Tpoint;
begin
MyC.Pen.Color := ClBlack; // Outline Polygon in Black
MyC.Pen.Style := psSolid;
MyC.Pen.Mode := PmCopy;
MyC.Brush.Color := PColor;
MyC.Brush.Style := BsSolid;
R := 10; // Size of arrow can be changed with R and R1
R1 := R + 5;
X1 := X + Round(Sin(DegToRad(Bearing))*R1);
Y1 := Y - Round(Cos(DegToRad(Bearing))*R1); // Point of Arrow
// Draw the head first
ArrowHead[0].X := X + Round(Sin(DegToRad(Bearing))*R);
ArrowHead[0].Y := Y - Round(Cos(DegToRad(Bearing))*R);
ArrowHead[1].X := X1 + Round(Sin(DegToRad(Bearing+200))*R1);
ArrowHead[1].Y := Y1 - Round(Cos(DegToRad(Bearing+200))*R1);
ArrowHead[2].X := X1;
ArrowHead[2].Y := Y1;
ArrowHead[3].X := X1 + Round(Sin(DegToRad(Bearing-200))*R1);
ArrowHead[3].Y := Y1 - Round(Cos(DegToRad(Bearing-200))*R1);
ArrowHead[4].X := ArrowHead[0].X;
ArrowHead[4].Y := ArrowHead[0].Y;
MyC.Polygon(Slice(ArrowHead,5));
// Draw the shaft
ArrowHead[5].X := ArrowHead[0].X + Round(Sin(DegToRad(Bearing+180))*R);
ArrowHead[5].Y := ArrowHead[0].Y - Round(Cos(DegToRad(Bearing+180))*R);
// Could dump out here if tail not desired.
MyC.MoveTo(ArrowHead[4].X,ArrowHead[4].Y);
MyC.LineTo(ArrowHead[5].x,ArrowHead[5].Y); // Draw shaft to Start of Feathers
// Draw the feathers
ArrowTail[0].X := ArrowHead[5].X + Round(Sin(DegToRad(Bearing-200))*r1);
ArrowTail[0].Y := ArrowHead[5].Y - Round(Cos(DegToRad(Bearing-200))*r1);
ArrowTail[1].X := ArrowHead[0].X + Round(Sin(DegToRad(Bearing+180))*R1);
ArrowTail[1].Y := ArrowHead[0].Y - Round(Cos(DegToRad(Bearing+180))*R1);
ArrowTail[2].X := ArrowHead[5].X + Round(Sin(DegToRad(Bearing+200))*R1);
ArrowTail[2].Y := ArrowHead[5].Y - Round(Cos(DegToRad(Bearing+200))*R1);
ArrowTail[3].X := ArrowHead[5].X;
ArrowTail[3].Y := ArrowHead[5].Y;
ArrowTail[4].X := ArrowTail[0].X; // Close the Polygon
ArrowTail[4].Y := ArrowTail[0].Y;
MyC.PolyGon(ArrowTail); // Draw the tail
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Rect(0, 0, Image1.Width, Image1.Height));
Image1.Tag := Image1.Tag + 10;
DrawArrowFill(Image1.Width div 2,
Image1.Height div 2,
image1.Tag,
Image1.Canvas,
ClRed);
end;
end.