找直方圖峰值最大值 |
尚未結案
|
bee0606
一般會員 發表:22 回覆:30 積分:10 註冊:2003-08-12 發送簡訊給我 |
|
GaryKao99
中階會員 發表:46 回覆:102 積分:54 註冊:2002-08-23 發送簡訊給我 |
|
bee0606
一般會員 發表:22 回覆:30 積分:10 註冊:2003-08-12 發送簡訊給我 |
|
GaryKao99
中階會員 發表:46 回覆:102 積分:54 註冊:2002-08-23 發送簡訊給我 |
剛剛想到一個做法...
應該可以不用定義週期
若波形存於x陣列, x陣列大小為size bool goDown = false; int lastValue = 0; int nowValue = 0; int topValue = 0; for (int i=0; i < size; i ) { nowValue = x[i]; if (nowValue > lastValue && !goDown ) { lastValue = nowValue ; } else if (nowValue < lastValue) { topValue = lastValue; //峰直 lastValue = nowValue; goDown = true; //波形開始往下 } else if ( goDown && nowValue < lastValue) { lastValue = nowValue; } else if ( !goDown && nowValue > lastValue) { lastValue = nowValue; goDown = false; //波形開往上 } }試試看 ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會 |
bee0606
一般會員 發表:22 回覆:30 積分:10 註冊:2003-08-12 發送簡訊給我 |
|
GaryKao99
中階會員 發表:46 回覆:102 積分:54 註冊:2002-08-23 發送簡訊給我 |
1. !goDown 這是判斷FALSE還是TRUE
! --> Not 的意思, 所以當goDown=false時 !goDown = true 2.你可以用一個陣列紀錄每次得到峰值的位置
若波形存於x陣列, x陣列大小為size bool goDown = false; int lastValue = 0; int nowValue = 0; int topValue = 0; int topPosition[size]; //作為紀錄峰值的位置用 int topCount = 0; for (int i=0; i < size; i ) { nowValue = x[i]; if (nowValue > lastValue && !goDown ) { lastValue = nowValue ; } else if (nowValue < lastValue && !goDown ) { topValue = lastValue; //峰直 lastValue = nowValue; goDown = true; //波形開始往下 topPosition[topCount] = i; topCount ; } else if ( goDown && nowValue < lastValue) { lastValue = nowValue; } else if ( !goDown && nowValue > lastValue) { lastValue = nowValue; goDown = false; //波形開往上 } } //顯示峰值的位置 for (int j=0; jPS: 以上的程式我沒實測過:P ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會 |
bee0606
一般會員 發表:22 回覆:30 積分:10 註冊:2003-08-12 發送簡訊給我 |
|
GaryKao99
中階會員 發表:46 回覆:102 積分:54 註冊:2002-08-23 發送簡訊給我 |
|
braveheart
一般會員 發表:35 回覆:62 積分:24 註冊:2003-05-21 發送簡訊給我 |
|
GaryKao99
中階會員 發表:46 回覆:102 積分:54 註冊:2002-08-23 發送簡訊給我 |
我寫了隻程式...測試ok請笑納
< class="code">
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStrings *values = new TStringList(); bool goDown = false;
int lastValue = 0;
int nowValue = 0; values->CommaText = "0,1,2,5,3,1,4,6,7,5,2,1,4,6,7,9,1,2,1"; TStrings *topPosition = new TStringList(); //作為紀錄峰值的位置用
TStrings *topValues = new TStringList(); //作為紀錄峰值的至值 for (int i=0; i < values->Count; i )
{
nowValue = StrToIntDef(values->Strings[i], -1); if (!goDown && lastValue > nowValue)
{
topValues->Add(lastValue);
topPosition->Add(i-1);
} if (lastValue >= nowValue)
{
goDown = true;
}
else
{
goDown = false;
} lastValue = nowValue;
} //顯示峰值
ShowMessage( "來源值 :" values->CommaText "\r\n"
"峰值位置:" topPosition->CommaText "\r\n"
"峰值 :" topValues->CommaText
); delete values;
delete topPosition;
delete topValues;
}
~~~~~~~~~~~~~~~~~~~~~~
我什麼都會, 就兩樣不會
就是
這個也不會, 那個也不會
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |