Article View: pl.comp.lang.delphi
Article #345405Re: TChart i interpolacja wartości
From: mmm
Date: Mon, 19 Dec 2016 13:23
Date: Mon, 19 Dec 2016 13:23
95 lines
4168 bytes
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-mailReferences:
<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