[Delphi] Obliczanie drugiej współrzędnej w TChart

0

Witam

Chciałbym się dowiedzieć czy mając wykres/serie w TChart, która ma np. dwa punkty P1(1, 1) oraz P2(5, 5), (gdzie P(x,y)), można uzyskać informacje o wartości y podając watość x i odwrotnie ? Przykład : Chce uzyskać informację jaką wartość y ma dana seria gdy jej wartość x = 3.

Pozdrawiam

0

ale zauważ, że jest "dużo" wzorów funkcji, które przechodzą przez dwa punkty więc strzelanie jaki jest trzeci należący do tego wykresu to loteria

0

to jest prosta więc jeśli przechodzi przez P(1,1) i P(5,5) to na pewno też przez P(2,2),P(3,3); itd. Żadna loteria.

0

to jak wiesz, że to prosta to co za problem obliczć x mając y?

0

Nie dokończyłem edycji poprzedniego postu bo mnie rozłączyło.
"To jest prosta więc jeśli przechodzi przez P(1,1) i P(5,5) to na pewno też przez P(2,2),P(3,3); itd.
A swoją drogą to chodzi mi o to że jeżeli wykres istnieje (jakikolwiek, nie koniecznie prosta) czy delfi ma taką funkcje jeśli podamy X pokaże nam jaka wartość jest pod Y ? Jak w bazach danych
select y when x = 3; albo coś w tym guście :
'Get Series[i].YValue when XValue = 3;' "
Pozdrawiam

0

żeby można to obliczyć trzeba znać wzór funkcji, która ten wykres rysuje - przecież to matematyka na poziomie gimnazjum.
mając kilka punktów można taki wzór napisać i jest on tym dokładniejszy im więcej jest punktów. Działanie to to interpolacja

0

Wiem jak to obliczyć matematycznie po prostu interesuje mnie to czy można otrzymać y podając x. Każdy element w serii (dwuwymiarowej) ma przecież dwie wspórzędne (x,y). I one są już umieszczone na wykresie, więc jakakolwiek będzie ta krzywa zawsze punkt przez który przechodzi to x i y. Każdy x będzie miał tylko jedną wartość y taką jak jest określona przez oś y. Czy delphi z wykresu może mi ją zwrócić ??

0

Poczytaj też o regresji liniowej. Kiedyś w TP napisałem coś takiego:

PROCEDURE RegLin(DBx, DBy :ARRAY OF Double; VAR A, B :Double);
VAR SigX, SigY       :Double; { sumy liczb              }
    SigXY            :Double;
    SigSqrX          :Double;
    n, i             :Word;   { liczba elementow tablic }
BEGIN
 n := High(DBx)+1; { okreslam liczbe elementow }
 SigX := 0; SigY := 0;
 SigXY := 0;
 SigSqrX := 0;
 FOR i := 0 TO n-1 DO
  BEGIN
   SigX := SigX + DBx[i];
   SigY := SigY + DBy[i];
   SigXY := SigXY + (DBx[i]*DBy[i]);
   SigSqrX := SigSqrX + Sqr(DBx[i]);
  END;
 A := (n*SigXY - SigX*SigY) / (n*SigSqrX - Sqr(Sigx));
 B := 1/n * (SigY - A*SigX);
END;

FUNCTION Interpolacja(X1,Y1, X2,Y2, X :Double) :Double;
{ interpolacja liniowa }
VAR a, b :Double;
BEGIN
 { wspolczynnik kierunkowy prostej }
 a:=(Y2 - Y1) / (X2 - X1);
 { parametr b }
 b:=((-X1) * (Y2 - Y1) - (X2 - X1) * (-Y1)) / (X2 - X1);
 Interpolacja := A * X + b;
END;
0

Niezupełnie o to mi chodziło. Ale rozumiem że nie ma prostszego sposobu na odczytanie danej z wykresu.

Jeszcze jedno pytanie czy w zdarzeniu OnClickSeries można uzyskać index serii na którą się 'kliknie' ?

Pozdrawiam.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.