🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#345402
Author: mmm
Date: Thu, 01 Dec 2016 10:45
16 lines
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
#345403
Author: stchebel
Date: Fri, 09 Dec 2016 23:02
24 lines
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
#345404
Author: stchebel
Date: Fri, 09 Dec 2016 23:15
29 lines
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
#345405
Author: 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
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