要求绘制正弦曲线,并且能移动,还要能实现振幅的变化, 希望各位大哥帮忙啊!
解决方案 »
- 使用SPCOMM出现的接收数据的问题,在线等答案,着急
- 请教:本菜鸟用INDY做了个通讯小程序,但不知怎么发布,用WISE弄出的程序运行有界面,但登录没有反应。请高手指教!!
- 开发数据是遇到的问题?如何用dxDBGrid跟其它外部控件的事件联系在一起?
- 大家都下班了吗?紧急请教一个字符串处理问题!
- 散分散分~~!!! 偶做舅舅了哈哈
- 对sql数据库的更新,急!!!
- Delphi7下做的form如何才能用delphi5打开(分不够再加,急,在线等)
- csdn的结帖率极低,从我作起,我的几篇帖子,没人回答,结不了贴,现在做散分贴处理
- 关于内存表的问题????高分有送!!!!!急、急、急、急
- 怎样更新EXE文件中的资源的DELPHI源码
- Combobox控件的内容被删除的问题
- 对远程sql server2000表进行操作时requestlive属性怎样设置
unit unit_main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, Buttons;type
TForm1 = class(TForm)
Panel1: TPanel;
lTitle: TLabel;
Timer1: TTimer;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Panel2: TPanel;
Panel3: TPanel;
Image1: TImage;
btnStart: TBitBtn;
btnPause: TBitBtn;
trbWaveLength: TTrackBar;
cbKeyNode: TCheckBox;
Label2: TLabel;
lWaveLength: TLabel;
Label3: TLabel;
lWaveHeight: TLabel;
trbWaveHeight: TTrackBar;
Label4: TLabel;
lSpeed: TLabel;
trbSpeed: TTrackBar;
Label5: TLabel;
lFrameRate: TLabel;
trbFrameRate: TTrackBar;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnStartClick(Sender: TObject);
procedure btnPauseClick(Sender: TObject);
procedure trbSpeedChange(Sender: TObject);
procedure trbWaveLengthChange(Sender: TObject);
procedure trbWaveHeightChange(Sender: TObject);
procedure trbFrameRateChange(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
T,H,L,Speed : Real;
Dot : Array [1..16] of TPoint ;
Mode : (Horizontal,Vertical); public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var
x,y,i : integer ;
begin
//清除原有图形
Image1.Canvas.Brush.Color := clWhite ;
Image1.Canvas.FillRect(Image1.ClientRect);
T := T + Speed ; case Mode of //横波
Horizontal: begin //设置画笔的颜色
Image1.Canvas.Pen.Color := clRed ; //画纵坐标轴
Image1.Canvas.PenPos := Point(10,240);
Image1.Canvas.LineTo(10,10);
Image1.Canvas.PenPos := Point(10,10);
Image1.Canvas.LineTo(8,15);
Image1.Canvas.PenPos := Point(10,10);
Image1.Canvas.LineTo(12,15); //画横坐标轴
Image1.Canvas.PenPos := Point(10,125);
Image1.Canvas.LineTo(360,125);
Image1.Canvas.PenPos := Point(360,125);
Image1.Canvas.LineTo(355,123);
Image1.Canvas.PenPos := Point(360,125);
Image1.Canvas.LineTo(355,127); //画T时刻的波形
Image1.Canvas.Pen.Color := clBlack ;
Image1.Canvas.Brush.Color := clBlue ;
for x := 0 to 350 do begin
y := Round(H* sin(x/L*2*Pi-T));
if x= 0 then begin
Image1.Canvas.PenPos := Point(10+x,125+y);
if cbKeyNode.Checked then
Image1.Canvas.Ellipse(10+x-3,125+Y-3,10+x+3,125+Y+3);
end else Image1.Canvas.LineTo(10+x,125+y) ;
end;
end; //画横波波形 //纵波
Vertical : begin
//画T时刻的波形
Image1.Canvas.Pen.Color := clBlack ;
Image1.Canvas.Brush.Color := clRed ;
for i := 1 to 16 do begin
X := Dot[i].X + Round(H*Sin( Dot[i].X/L*2*Pi-T )/5);
if cbKeyNode.Checked and (i=8) then
Image1.Canvas.Ellipse(X-6,Dot[i].Y-6,X+6,Dot[i].Y+6);
if i = 1 then
Image1.Canvas.PenPos := Point(X,Dot[i].Y)
else
Image1.Canvas.LineTo(X,Dot[i].Y);
end;
end;
end;end;procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
T := 0;
trbFrameRate.Position := 25;
trbWaveHeight.Position := 60;
trbWaveLength.Position := 100;
trbSpeed.Position := 5; for i:= 1 to 16 do begin
Dot[i].X := 10+i*20;
if ODD(i) then Dot[i].Y := 50
else Dot[i].Y := 200;
end; Mode := Horizontal;
end;procedure TForm1.btnStartClick(Sender: TObject);
begin
Timer1.Enabled := True ;
end;procedure TForm1.btnPauseClick(Sender: TObject);
begin
Timer1.Enabled := False;
end;procedure TForm1.trbSpeedChange(Sender: TObject);
begin
Speed := trbSpeed.Position/100;
lSpeed.Caption := Format('%f',[Speed]);
end;procedure TForm1.trbWaveLengthChange(Sender: TObject);
begin
L := trbWaveLength.Position ;
lWaveLength.Caption := IntToStr(trbWaveLength.Position);
end;procedure TForm1.trbWaveHeightChange(Sender: TObject);
begin
H := trbWaveHeight.Position;
lWaveHeight.Caption := IntToStr(trbWaveHeight.Position);
end;procedure TForm1.trbFrameRateChange(Sender: TObject);
begin
Timer1.Interval := 1000 div trbFrameRate.Position ;
lFrameRate.Caption := IntToStr(trbFrameRate.Position);
end;procedure TForm1.BitBtn2Click(Sender: TObject);
begin
lTitle.Caption := '纵波的演示';
Mode := Vertical ;
end;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
lTitle.Caption := '横波的演示';
Mode := Horizontal ;
end;end.
谢谢各位大哥的照顾,
像选中图形:在OnClick事件中判断MouseX,MouseY是否满足方程式abs(MouseY-H*sin(MouseX/L*2*Pi-T))<=2,就可以判定了
关于矢量存储请参考《Delphi4编程技术内幕》,里面有怎样将图形保存为wmf或EMF矢量文件的方法。