🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #345405

Re: TChart i interpolacja wartości

#345405
From: mmm
Date: Mon, 19 Dec 2016 13:23
95 lines
4168 bytes
> Czegoś nie łapię. Raz chcesz interpolować jakąś funkcję do punktów dajmy na to pomiarowych, następnie explicite zakładasz funkcję liniową i chcesz "interpolować" współrzędne mlaśnięcia myszy do f. liniowej? Ten model matematyczny wydaje mi się, hmm.. nie wydaje mi się..
>
> Opisz zagadnienie bardziej szczegółowo. Dlaczego f.liniowa?! Jeżeli nie masz "porządnego" modelu matematycznego, a chcesz w pewnym zakresie zmienności argumentu być jak najbliżej "prawdy", sugeruję wielomiany Beziera. O ile funkcja w jakimś tam przedziale przypomina "liniówkę", bądź nawet trochę jest "kopnięta" w dół, bądź w górę. Przy bardziej "pijanych" funkcjach powyższa porada jest bez sensu.
>
> OK., jeżeli w zakresie zmienności argumentu f. "przypomina" liniówkę, śmiało interpoluj Bezierem.
>
Mam analizator obwodów RLC podłączony do komputera za pomoca GPIB  i 
chce zrobić wykres dla zakresu częstotliwość tylko chciałbym aby wykres 
pokazywał wartości nie tylko w punktach pomiarowych ale też interpolował 
wartość miedzy punktami gdzie znam wartość

Użytkownik ustawia trzy wartości
-MHz_low
-MHz_high
-ilosc_krokow

np.
2.000.000
3.000.000
10

Miernik zwraca 10 liczb dla kolejnych częstotliwości z krokiem 100kHz np.

częstotliwość      impedancja
2000000             1234
2100000             1334
2200000             1434
2300000             1534
2400000             1634
2500000             1734
2600000             1834
2700000             1934
2800000             2034
2900000             2134
3000000             2234

Chciałbym na wykresie pokazywać interpolowaną wartość tam gdzie jest 
myszka, np. wartość dla 2012300Hz

myślałem ze może taka opcja jest już w komponencie, ale nie znalazłem 
wiec sam napisałem.

Coś takiego wyszło :

procedure TForm3.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
   Y: Integer);
...
begin
...
   for valueIndex := Series1.FirstValueIndex to 
Series1.LastDisplayedIndex-1 do
   begin
     P0.X:=Series1.CalcXPos(valueIndex);
       //P0.Y:=Series1.CalcYPos(valueIndex);
     P1.X:=Series1.CalcXPos(valueIndex+1);
       //P1.Y:=Series1.CalcYPos(valueIndex+1);

     //Series1.CalcXPos(valueIndex);

     if (x>=P0.X) and (x<P1.X)  then
     begin
       caption :='INDEX = ' +IntToStr(valueIndex);


       prosta := ProstaDwaPunty(TPunktSingle.Create(
                                  Series1.XValue[valueIndex] 
,Series1.YValue[valueIndex])
                               ,TPunktSingle.Create(
                                  Series1.XValue[valueIndex+1] 
,Series1.YValue[valueIndex+1]));

       x_ulamek :=  (X-P0.X) / (P1.X - P0.X);

       v_y := prosta.a * (Series1.XValue[valueIndex] + 
((Series1.XValue[valueIndex+1]- Series1.XValue[valueIndex])*x_ulamek) 
) + prosta.b ;

       Caption := FloatToStr(v_y);// tutaj wynik !!!

       Break; //znalazłem wiec koncze !!!!
     end;

   end;


function ProstaDwaPunty(p1,p2: TPunktSingle): TProsta;
begin
   result.a := (p2.y - p1.y)/(p2.x-p1.x);
   result.b :=  p1.y - result.a * p1.x;
end;



M
Technical Details
Message-ID: <o38n0t$8uj$1@portraits.wsisiz.edu.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED.185.103.153.15!not-for-mail
References: <o1ov06$rh5$1@portraits.wsisiz.edu.pl> <1a2a5f66-358b-441d-92df-2faf7957abc5@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!.POSTED.185.103.153.15!not-for-mail
From: mmm <mmm@mm.pl>
Newsgroups: pl.comp.lang.delphi
Subject: Re: TChart i interpolacja wartości
Date: Mon, 19 Dec 2016 14:23:40 +0100
Organization: http://www.wit.edu.pl
Sender: bulkowsk@nospam.wsisiz.edu.pl
Message-ID: <o38n0t$8uj$1@portraits.wsisiz.edu.pl>
References: <o1ov06$rh5$1@portraits.wsisiz.edu.pl> <1a2a5f66-358b-441d-92df-2faf7957abc5@googlegroups.com>
Mime-Version: 1.0
Injection-Date: Mon, 19 Dec 2016 13:23:41 +0000 (UTC)
Injection-Info: portraits.wsisiz.edu.pl; posting-host="185.103.153.15"; logging-data="9171"; mail-complaints-to="abuse@wsisiz.edu.pl"
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1
X-Mozilla-News-Host: news://news.wit.edu.pl
In-Reply-To: <1a2a5f66-358b-441d-92df-2faf7957abc5@googlegroups.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit