绘制正弦曲线!请各位大哥帮忙!

xiaojun520 2003-12-20 06:46:00
要求绘制正弦曲线,并且能移动,还要能实现振幅的变化,

希望各位大哥帮忙啊!
...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaojun520 2003-12-30
  • 打赏
  • 举报
回复
谢谢你!邮件我已经收到了,新年快乐!
Haofei 2003-12-30
  • 打赏
  • 举报
回复
邮件已发出,请收!另你的其它几个问题都比较容易解决,你自己实现吧,我这段时间比较紧,年终了吗!!!
像选中图形:在OnClick事件中判断MouseX,MouseY是否满足方程式abs(MouseY-H*sin(MouseX/L*2*Pi-T))<=2,就可以判定了
关于矢量存储请参考《Delphi4编程技术内幕》,里面有怎样将图形保存为wmf或EMF矢量文件的方法。
xiaojun520 2003-12-25
  • 打赏
  • 举报
回复
各位大哥:我把原题发过来,::谢谢!
目的是做一个图形软件
功能::

**。点击菜单或者按钮开始绘制正弦函数和余弦函数(要求绘制多个周期
**。实现图形的移动功能
**。实现图形选择功能,当在函数图形附近单击鼠标左键,选中该函数图形。
**。实现图形的变形功能,在函数图形选中状态下,按住函数图形的特征点,图 动鼠标,函数图形的周期和振幅可以跟随鼠标的位置发生变化
**。实现函数图形线形和颜色的变换
**。实现函数图形的矢量存储
xiaojun520 2003-12-24
  • 打赏
  • 举报
回复
xiaojun141710@163.com
谢谢各位大哥的照顾,
zytangzhou 2003-12-24
  • 打赏
  • 举报
回复
Haofei(昊飞):你写的已经够清楚了
congvsyan 2003-12-22
  • 打赏
  • 举报
回复
也给我一个lzcx_cn@126.com,thx :)
Haofei 2003-12-20
  • 打赏
  • 举报
回复
留个Email,我将原代码发给你。
Haofei 2003-12-20
  • 打赏
  • 举报
回复
前两天做了一个横波与纵波的演示,应该是你要的。
unit unit_main;

interface

uses
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.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧