delphi 用chart控制元件,統計資料生成折線圖,如圖

現在有2個問題
第一個:橫坐標,我想用時間代替,這改如何辦到
第二個: 圖中2個拐點是我計算需要用到的拐點,這2個拐點用程式該如何確定,用冒泡法可行嗎?
uj5u.com熱心網友回復:
計算兩點間斜率,依次比較相鄰斜率之差,大于一定值就是拐點。uj5u.com熱心網友回復:
procedure TForm2.Button1Click(Sender: TObject);
var
i: Integer;
begin
//處理lz第二個問題
//獲取拐點(相鄰X點y值差達大于3時, 為拐點)
memo1.Clear;
if Chart1.Series[0].YValues.Count < 2 then
exit;
for i := 1 to Chart1.Series[0].YValues.Count - 1 do
begin
if abs(Chart1.Series[0].YValue[i - 1] - Chart1.Series[0].YValue[i]) > 3 then
memo1.Lines.Add(Chart1.Series[0].XLabel[i]);
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
//處理lz第一個問題
//默認已添加Series[0], 裝載資料
Chart1.Series[0].Clear;
Chart1.Series[0].Add(5, '20140101');
Chart1.Series[0].Add(6, '20140201');
Chart1.Series[0].Add(10, '20140301');
Chart1.Series[0].Add(6, '20140401');
Chart1.Series[0].Add(7, '20140501');
Chart1.Series[0].Add(6, '20140601');
Chart1.Series[0].Add(5, '20140701');
Chart1.Series[0].Add(6, '20140801');
end;
uj5u.com熱心網友回復:
第二個問題看錯了.稍做修改
procedure TForm2.Button1Click(Sender: TObject);
var
i: Integer;
k : double; //斜率
begin
//處理lz第二個問題
//獲取拐點(相鄰X點y值差達大于3時, 為拐點)
memo1.Clear;
if Chart1.Series[0].YValues.Count < 2 then
exit;
for i := 1 to Chart1.Series[0].YValues.Count - 1 do
begin
k := (Chart1.Series[0].YValue[i - 1]-Chart1.Series[0].YValue[i])/
(Chart1.Series[0].XValue[i - 1] - Chart1.Series[0].XValue[i]);
if abs(k) > 3 then
memo1.Lines.Add(Chart1.Series[0].XLabel[i - 1]);
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
//處理lz第一個問題
//默認已添加Series[0], 裝載資料
Chart1.Series[0].Clear;
Chart1.Series[0].Add(5, '20140101');
Chart1.Series[0].Add(6, '20140201');
Chart1.Series[0].Add(10, '20140301');
Chart1.Series[0].Add(11, '20140401');
Chart1.Series[0].Add(10, '20140501');
Chart1.Series[0].Add(6, '20140601');
Chart1.Series[0].Add(5, '20140701');
Chart1.Series[0].Add(6, '20140801');
end;
uj5u.com熱心網友回復:
區域極值!
uj5u.com熱心網友回復:
也可用樣條函式擬合,那里有計算二導值,當二導值為零時就是你要的結果。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/113189.html
標籤:語言基礎/算法/系統設計
