wykresy

0

co potrzebuje do narysowania wykresow, jaki komponent, jak sie je tworzy dynamicznie?
tzn. zeby sie zmienialy w trakcie dzialania progaramu po wpisaniu wartosci. np. jak narysowac wykres funkcji kwadratowej?

0

for x := 0 to 100 do canvas.pixels[x,ax*x+bx+c] := clWhite;

// oczywiście... chodziło o przykład.. Jeżeli koledze barankowi nie będzie odpowiadało (a nie będzie [cygaro] )odświeżanie co kilka sekund to sam poszuka szybszego rozwiązania, i wten sposób nauczy się rożnic pomiędzy scanline a pixels, a może coś lepszego wymyśli i podzieli się z nami nowo nabytą wiedzą ?.

// Detox dobrze zauważył.. zmienna Y rośnie w dół. Jest to po prostu inny typ "kartki". Jeżeli chcemy aby wykres był poprawnie<font color="blue">*</span> narysowany musimy odwrócić Y. Czyli :

 for x:=  lewaStronaObszaruOkreślonosci to prawaStronaObszaruOkreślonosci do
   zapalPunkt(x, -x*x*a + b*x + c, kolorPiksela); //oczywiście tutaj lepiej byłoby użyć procedury rysującej linię (prostą, lub krzywą beziera - zależy jak dokładny ma być wykres)

<font color="blue">*</span> Zależy od punktu widzenia

0

O mamma mia!! AndRew!! Poniosło Cię - zawodowo.

Nie używajcie Pixels, ale ScanLine. No chyba, że wykres ma się odświeżać raz na sekund kilka [diabel].

0

A czy współrzedna "y" nie jest czasem odwrotnie na canvasie ?

0
 for x:=  lewaStronaObszaruOkreślonosci to prawaStronaObszaruOkreślonosci do
   zapalPunkt(x, -x*x*a + b*x + c, kolorPiksela); //oczywiście tutaj lepiej byłoby użyć procedury rysującej linię (prostą, lub krzywą beziera - zależy jak dokładny ma być wykres)

<font color="blue">*</span> Zależy od punktu widzenia

ale żeby odwrócić po Y wykres trzeba chyba

zapalPunkt(x, -(x*x*a + b*x + c), kolorPiksela); 
0

Kawałek z TP (var A, B, C: Real; <- globalne, pobrane przed od użytkownika tą procedurą)

procedure RysujWykres;
var
  grDriver, grMode, ErrCode: Integer;
  X, Y: Real;
  oX,oY: Integer;
const
  Skala: Integer = 20;
  Krok: Real = 0.05;
begin
  grDriver := Detect;
  InitGraph(grDriver, grMode,'');
  ErrCode := GraphResult;
  if ErrCode = grOk then
    begin
      oX := GetMaxX div 2;
      oY := GetMaxY div 2;
      repeat
        ClearDevice;
        SetColor(15);
        Line(oX, 0, oX, GetMaxY);
        Line(0, oY, GetMaxX, oY);
        X := -10;
        Y := A * X * X + B * X + C;
        SetColor(4);
        repeat
          MoveTo(oX + Trunc(X*Skala),oY + Trunc(Y*Skala));
          X := X + Krok;
          Y := A * X * X + B * X + C;
          LineTo(oX + Trunc(X*Skala),oY + Trunc(Y*Skala));
        until X > 10;
        SetColor(14);
        OutTextXY(10,10,'Skala: x' + IntToStr(Skala));
        OutTextXY(10,465,'+/- zmiana skali');
        OutTextXY(480,465,'Spacja - zakonczenie');
        Ch:=ReadKey;
        case Ch of
          '+' : if Skala < 255 then Inc(Skala);
          '-' : if Skala > 1 then Dec(Skala);
        end;
      until Ch = ' ';
      CloseGraph;
    end
  else
   WriteLn('Blad grafiki:', GraphErrorMsg(ErrCode));
end;

Na co komu Pixels i ScanLine jak lepiej wykresy sie maluje uzywajac Line?
// Hmm wizualinie w TP ten kod zajmuje mniej ekraniu niż tu na forum :P

0

D7 Enterprise
zakladka Additional, komponent TChart dosyc ladny helpik ma,
ma mozliwosc tworzenia dynamicznego
w zwiazku z czym jak wrzucisz pusty sformatowany wykres na forme i napiszesz procedure rysujaca wykres (dodawanie serii czy jakos tak) to potem kazdorazowe jej uzycie odswiezy wykres.

0

Jest taki ciekaty komponent o nazwie Wykres :) Nawet chyba do Polskiemu i ma dobry opis

1 użytkowników online, w tym zalogowanych: 0, gości: 1