画一曲线(300分)(300分)

  • 主题发起人 主题发起人 火鸟不死
  • 开始时间 开始时间

火鸟不死

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要作一曲线,横坐标为X轴,纵坐标为Y轴。X为0-23,Y的范围是50-100,共有24个点。
不能用Chart控件,希望在Image上直接画。谁能给我份原代码看看将不胜感激,如果有详细
的解释我可以再加300分。
顺便问问,我为什么最多只能给300分啊?!
 
给你个思路
利用TImage的Canvas
建两个长度为24的数组,数组类型自己定义
计算X轴上各点在Canvas上的位置
计算Y轴上各点在Canvas上的值(注意Y方向在屏幕上数值是向下增长,要转换)
画曲线用Canvas的MoveTo函数,然后LineTo后面的每一点
在OnPaint事件里画
 
不知道你的曲线是固顶的还是随机的?
如果是随机的,其实就是画折线,不过要很短罢了!
 
能不能在canvas上直接画?这样我好像有源代码,是bcb的,不只对你有没有帮助
(画坐标和正弦曲线)
Canvas->MoveTo(ox,oylen+oy);
Canvas->LineTo(ox,oy-oylen);
Canvas->MoveTo(ox,oy);
Canvas->LineTo(ox+oxlen,oy);
Canvas->MoveTo(ox,oy-oylen);
Canvas->LineTo(ox+3,oy-oylen+5);
Canvas->MoveTo(ox,oy-oylen);
Canvas->LineTo(ox-3,oy-oylen+5);
Canvas->MoveTo(ox+oxlen,oy);
Canvas->LineTo(ox+oxlen-5,oy+3);
Canvas->MoveTo(ox+oxlen,oy);
Canvas->LineTo(ox+oxlen-5,oy-3);
static int i,j,i0,j0;
for(i=ox;i<ox+oxlen;i++)
{
if(i%lensize==0)
{
if(i%(2*lensize)==0)
{
Canvas->MoveTo(i,oy);
Canvas->LineTo(i,oy+3);
}
else
{
Canvas->MoveTo(i,oy);
Canvas->LineTo(i,oy+5);
}
}
}
for(i=oylen+oy;i>oy-oylen;i--)
{
if(i%lensize==0)
{
if(i%(2*lensize)==0)
{
Canvas->MoveTo(ox,i);
Canvas->LineTo(ox-5,i);
}
else
{
Canvas->MoveTo(ox,i);
Canvas->LineTo(ox-3,i);
}
}
}
static float x,y,dx,dy;
dx=2.0*3.1416/(8*lensize);
dy=1.0/(8*lensize);
i0=ox;
j0=oy;
for(i=ox;i<ox+oxlen;i++)
{
x=(i-ox)*dx;
y=sin(x);
j=int(y/dy+0.5);
Canvas->MoveTo(i0,j0);
Canvas->LineTo(i,oy-j);
i0=i;
j0=oy-j;
}
 
我那24个点的Y轴坐标是随机的,范围在50-100之间。应该怎么画点啊??
 
数据变了就重画,边了坐标上下标跟着变就得了呗
 
X轴是0-23,不变的。变的只是Y轴的数据,范围是50-100。一共有24个点
 
是平滑曲线,还是折线。
如果需要平滑的经过坐标点,建议用GDI+的DrawCurve,
如果是折线,那么用MoveTo,LineTo就可以了。
 
但是你的y值和x有什么关系没有?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
797
SUNSTONE的Delphi笔记
S
D
回复
0
查看
844
DelphiTeacher的专栏
D
D
回复
0
查看
689
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部