用数组画光滑曲线的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 zql1982000
  • 开始时间 开始时间
Z

zql1982000

Unregistered / Unconfirmed
GUEST, unregistred user!
老大们救命啊,我不是很会用DELPHI可我们变态的老师非要我做一个实验数据处理的软件
我想用Tchart画光滑的曲线,意识是:我有两个数组X,Y,分别放着X坐标,Y坐标的直,现在我想从数组中读取这些值来画一条差不多光滑的曲线,我看了一个网页 它是这样的 (见下面)
我发现他确实可以画出曲线来,可是我怎么边它的数据换成我自己的数据啊 而不是用它的
Series1.FillSampleValues(30);这句演示的数据 我是这样做的
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
xx[1]:=1;
xx[2]:=2;
xx[3]:=3;
xx[4]:=4;
xx[5]:=5;
xx[6]:=7;
yy[1]:=1;
yy[2]:=3;
yy[3]:=6;
yy[4]:=8;
yy[5]:=9;
yy[6]:=9;
for i:=1 to 6do
begin
chart1.Series[1].AddXY(xx,yy);
end;
//Series1.FillSampleValues(4);
Series2.DataSource:=Series1;
Series1.Visible:=False;
Series1.Title:='标准曲线';

end;

可是老画出来的是折线 ,老大们救救我
///--------------------------------
TeeChart控件绘制出光滑的B样条线插值曲线

今天研究TeeChart,搞清楚了Smoothing B-Spline!

这下可以根据LineSeries和SmoothingFunction,绘制出光滑的曲线了!

需要注意的要点是:
(1) 先加入一个一般的TLineSeries类型的线系列Series1。

(2) 加入显示B样条线插值的线系列Series2时,是选择一般的线系列TLineSeries,同时选定其Functions页的Extended子页的Smoothing项。

(3) 然后设定Smoothing B-Spline系列的Data Source页。
选定 Function -->Smoothing
Source Series子页中的Series为Series1,YValues为Y
Options子页中的Interpolate不要选择,Factor 设定为6

点击Apply后,关闭对话框。



-----------------------------

有关设定如下:

object Series2: TLineSeries
Marks.Callout.Brush.Color = clBlack
Marks.Visible = False
DataSource = Series1
SeriesColor = clBlack
Pointer.InflateMargins = True
Pointer.Style = psRectangle
Pointer.Visible = False
XValues.Name = 'X'
XValues.Order = loAscending
YValues.Name = 'Y'
YValues.Order = loNone
YValues.ValueSource = 'Y'
object TeeFunction1: TSmoothingFunction
Period = 1.000000000000000000
Interpolate = False
Factor = 6
end
end

程序代码如下:

unit CBSpline;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, TeeSpline;

type
TForm1 = class(TForm)
Chart1: TChart;
Series2: TLineSeries;
TeeFunction1: TSmoothingFunction;
Series1: TLineSeries;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Series1.FillSampleValues(30);
Series1.Visible:=False;
end;

end.
 
老大们救命啊,我不是很会用DELPHI可我们变态的老师非要我做一个实验数据处理的软件
我想用Tchart画光滑的曲线,意识是:我有两个数组X,Y,分别放着X坐标,Y坐标的直,现在我想从数组中读取这些值来画一条差不多光滑的曲线,我看了一个网页 它是这样的 (见下面)
我发现他确实可以画出曲线来,可是我怎么边它的数据换成我自己的数据啊 而不是用它的
Series1.FillSampleValues(30);这句演示的数据 我是这样做的
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
xx[1]:=1;
xx[2]:=2;
xx[3]:=3;
xx[4]:=4;
xx[5]:=5;
xx[6]:=7;
yy[1]:=1;
yy[2]:=3;
yy[3]:=6;
yy[4]:=8;
yy[5]:=9;
yy[6]:=9;
for i:=1 to 6do
begin
chart1.Series[1].AddXY(xx,yy);
end;
//Series1.FillSampleValues(4);
Series2.DataSource:=Series1;
Series1.Visible:=False;
Series1.Title:='标准曲线';

end;

可是老画出来的是折线 ,老大们救救我
///--------------------------------
TeeChart控件绘制出光滑的B样条线插值曲线

今天研究TeeChart,搞清楚了Smoothing B-Spline!

这下可以根据LineSeries和SmoothingFunction,绘制出光滑的曲线了!

需要注意的要点是:
(1) 先加入一个一般的TLineSeries类型的线系列Series1。

(2) 加入显示B样条线插值的线系列Series2时,是选择一般的线系列TLineSeries,同时选定其Functions页的Extended子页的Smoothing项。

(3) 然后设定Smoothing B-Spline系列的Data Source页。
选定 Function -->Smoothing
Source Series子页中的Series为Series1,YValues为Y
Options子页中的Interpolate不要选择,Factor 设定为6

点击Apply后,关闭对话框。



-----------------------------

有关设定如下:

object Series2: TLineSeries
Marks.Callout.Brush.Color = clBlack
Marks.Visible = False
DataSource = Series1
SeriesColor = clBlack
Pointer.InflateMargins = True
Pointer.Style = psRectangle
Pointer.Visible = False
XValues.Name = 'X'
XValues.Order = loAscending
YValues.Name = 'Y'
YValues.Order = loNone
YValues.ValueSource = 'Y'
object TeeFunction1: TSmoothingFunction
Period = 1.000000000000000000
Interpolate = False
Factor = 6
end
end

程序代码如下:

unit CBSpline;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, TeeSpline;

type
TForm1 = class(TForm)
Chart1: TChart;
Series2: TLineSeries;
TeeFunction1: TSmoothingFunction;
Series1: TLineSeries;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Series1.FillSampleValues(30);
Series1.Visible:=False;
end;

end.
 
Series1.Stairs := False ;
Series1.InvertedStairs := False;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
853
import
I
S
回复
0
查看
939
SUNSTONE的Delphi笔记
S
后退
顶部