|
제가 계속해서 자료도 찾아보고 저 나름대로 계산공식을 이용해서 해봤는데여
잘 안되서 이렇게 다시 질문을 드립니다.
제가 멀티미디어 타이머를 사용하여 데이터를 받아들이고 있는데여
Interval : 2msec 이구요
근데 문제가 실시간으로 그려야 한다는 점인데...장성호님 께서 예제를 올려주신거 가지구 해봤는데
제가 잘못한건지 안되더라구요..뭐가 잘못된건지 확인 좀 부탁드립니다..죄송합니다...
void __fastcall TFrmMain::MonitorTimerTimer(TObject *Sender)
{
double tmpx;
double X,Y;
Cnt++;
//TCP.ST.Pressure = random (10000);
for (int i = 0; i < caView->SeriesCount(); i++)
{
double XV = caView->Series[i]->XValues->Value[1] ;
double X1V = caView->Series[i]->XValues->Value[0];
if(SKNum == i)
{
MaxVal = caView->Series[i]->XValues->Value[40];
}
caView->Series[i]->Delete(0);
caView->BottomAxis->Maximum = 40 + Cnt;
caView->BottomAxis->Minimum = Cnt;
tmpx = XV - X1V;
X = caView->Series[i]->XValues->Last() + tmpx;
Y = Lagrange(XV,X1V,TCP.ST.Pressure,1,XV) ;
//caView->Series[i]->AddXY(
//caView->Series[i]->XValues->Last() + tmpx,TCP.ST.Pressure, "",clTeeColor);
caView->Series[i]->AddXY(X,Y,"",clTeeColor);
}
}
//---------------------------------------------------------------------------
double __fastcall TFrmMain:: Lagrange(double x,double x1,double y,int n,double t)
{
int i,j;
double s,p;
s = 0.0;
for(i=0; i<n; i++)
{
p=y;
for(j=0;j<n;j++)
{
if(i != j)
{
p=p*(t-x1)/(x-x1);
}
}
s=s+p;
}
return s;
}
장성호 님이 쓰신 글 :
: TChart문제는 아니구요
:
: 원인은 샘플링한 데이타가 값의 변화에 비해 적기때문입니다.
:
: 해결은?
:
: 1. 샘플링 주기를 짧게 하여 데이타를 많이 확보하는것이 가장 확실합니다.
:
:
: 2. 시스템적인 한계가 있어서 데이타를 더 많이 확보하기는 힘든경우에는?
:
: 대개.. 제한적인 데이타를 이용하여 Real Curve에 가까운 함수를 구하는
: 보간법을 이용합니다.
:
: 보간법에는 선형 , 라그랑제 , 스플라인 , 뉴턴 등이 있습니다.
:
: 그럼..
:
:
: 코코정 님이 쓰신 글 :
: : 새해 복 많이 받으시구요 하시는 일들 잘 되었으면 합니다.
: : 제가 질문 할 내용은...
: : 통신으로 받은 데이터를 그리고 있는데여
: : 그래프 모양자체가 너무 각이 있어서 그 각을 없애는 방법이 있나해서여..
: : 데이터를 확인 해 보니 정상적으로 받아서 그리는데 그래프는 너구 각이 져여...그림파일 보시면
: : 실제로는 저렇게 사다리꼴 모양이 아닌데...저렇게 나오는 이유를 모르겠는데여
: : 어떤식으로 해결을 해야 하나요...?
|