Thread View: pl.comp.lang.delphi
4 messages
4 total messages
Started by mmm
Thu, 01 Dec 2016 10:45
TChart i interpolacja wartości
Author: mmm
Date: Thu, 01 Dec 2016 10:45
Date: Thu, 01 Dec 2016 10:45
16 lines
1217 bytes
1217 bytes
Czy jest jakaś już wbudowana w TChart opcja interpolacji wartości na narysowanym wykresie (obliczenie wartości pomiedzy punktami wykresu liniowego) ? Mam serie która jets linią (seria1: TFastLineSeries) seria1.adxy(1,1) seria1.adxy(10,10) Użytkownik klika gdzieś w wykres i oblicza mu sie wartość w danym punkcie na wykresie ? M
Re: TChart i interpolacja wartości
Author: stchebel
Date: Fri, 09 Dec 2016 23:02
Date: Fri, 09 Dec 2016 23:02
24 lines
2610 bytes
2610 bytes
W dniu czwartek, 1 grudnia 2016 11:45:26 UTC+1 użytkownik mmm napisał: > Czy jest jakaś już wbudowana w TChart opcja interpolacji wartości na > narysowanym wykresie (obliczenie wartości pomiedzy punktami wykresu > liniowego) ? > Nie. > > Mam serie która jets linią (seria1: TFastLineSeries) > > seria1.adxy(1,1) > seria1.adxy(10,10) > > Użytkownik klika gdzieś w wykres i oblicza mu sie wartość w danym > punkcie na wykresie ? > > 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.
Re: TChart i interpolacja wartości
Author: stchebel
Date: Fri, 09 Dec 2016 23:15
Date: Fri, 09 Dec 2016 23:15
29 lines
3122 bytes
3122 bytes
W dniu sobota, 10 grudnia 2016 00:02:57 UTC+1 użytkownik stch...@gmail.com napisał: > W dniu czwartek, 1 grudnia 2016 11:45:26 UTC+1 użytkownik mmm napisał: > > Czy jest jakaś już wbudowana w TChart opcja interpolacji wartości na > > narysowanym wykresie (obliczenie wartości pomiedzy punktami wykresu > > liniowego) ? > > > > Nie. > > > > > Mam serie która jets linią (seria1: TFastLineSeries) > > > > seria1.adxy(1,1) > > seria1.adxy(10,10) > > > > Użytkownik klika gdzieś w wykres i oblicza mu sie wartość w danym > > punkcie na wykresie ? > > > > > > 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. =============== Aha!! Procedura interpolacji wielomianami Beziera jest w examplach o ile mnie pamięć nie myli na Turbo-Pascal'u 7.0. Jak Ci cholernie zależy, to pogrzebię na swoich starych HDD z piwnicy i podam źródło. Ale next week!!
Re: TChart i interpolacja wartości
Author: 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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads