Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: [delphi] Chart

  1. #1

    [delphi] Chart

    Salve a tutti,
    sapreste dirmi come assegnare all'asse x e y di un grafico (Chart) dei valori presi da delle variabili?
    grazie ciao

  2. #2

    Re: [delphi] Chart

    Originariamente inviato da carmelo81
    Salve a tutti,
    sapreste dirmi come assegnare all'asse x e y di un grafico (Chart) dei valori presi da delle variabili?
    grazie ciao
    per prima cosa ti devi creare una serie(puoi farlo benissimo a designtime cliccando due volte sul compenente chart e aggiungendo una serie);dopodiche utilizza la proprietà series,che è la lista delle varie serie(se metti 0 punta alla prima serie che hai creato)e infine usa il metodo add.

    var
    i:integer;
    begin
    for i:=1 to 10 do
    chart1.Series[0].Add(i) ;
    end;

  3. #3
    Scusami Mrcocò85 ma nn riesco a far funzionare il mio grafico.
    Ho creato due serie: la prima si riferisce all'asse x, e la seconda all'asse y:
    L'asse x deve assumere dei valori compresi tra 0 e l
    (l= lunghezza della trave alla quale assegno io un valore) quindi,
    var i:integer;
    begin
    for i:=1 to 10 do
    chart1.Series[0].Add(i) ;
    end;

    L'asse y invece assumerà dei valori compresi tra m0 ed m10, ovvero:
    m0:=0;
    m1:=(t0 * (0.1*l)) - (q * (0.1*l) * (0.1*l)) / 2;
    m2:=(t0 * (0.2*l)) - (q * (0.2*l) * (0.2*l)) / 2;
    m3:=(t0 * (0.3*l)) - (q * (0.3*l) * (0.3*l)) / 2;
    m4:=(t0 * (0.4*l)) - (q * (0.4*l) * (0.4*l)) / 2;
    m5:=(t0 * (0.5*l)) - (q * (0.5*l) * (0.5*l)) / 2;
    m6:=(t0 * (0.6*l)) - (q * (0.6*l) * (0.6*l)) / 2;
    m7:=(t0 * (0.7*l)) - (q * (0.7*l) * (0.7*l)) / 2;
    m8:=(t0 * (0.8*l)) - (q * (0.8*l) * (0.8*l)) / 2;
    m9:=(t0 * (0.9*l)) - (q * (0.9*l) * (0.9*l)) / 2;
    m10:=0;
    quindi se ho ben capito:
    var ii:integer;
    begin
    for ii:=m0 to m10 do
    chart1.Series[1].Add(ii) ;
    end;

    Il grafico a questo punto dovrebbe avere un andamento parabolico.
    Saresti cosi gentile da aiutarmi poiche nn riesco a tracciare tale grafico?
    Inoltre, ogni qual volta che premo il button per avviare il grafico, mi lascia quello creato allinizio e ne crea uno nuovo sopra quello vecchio.
    ciao e grazie

  4. #4
    var i,t0,q,l:integer;
    vet:array[1..11]of real;
    begin
    q:=2;
    t0:=1;
    l:=3;
    chart1.Series[0].Clear;(*ti cancella la vecchia serie*)
    (*al posto delle variabili m ho utilizato un vettore*)
    vet[1]:=0;
    vet[2]:=(t0 * (0.1*l)) - (q * (0.1*l) * (0.1*l)) / 2;
    vet[3]:=(t0 * (0.2*l)) - (q * (0.2*l) * (0.2*l)) / 2;
    vet[4]:=(t0 * (0.3*l)) - (q * (0.3*l) * (0.3*l)) / 2;
    vet[5]:=(t0 * (0.4*l)) - (q * (0.4*l) * (0.4*l)) / 2;
    vet[6]:=(t0 * (0.5*l)) - (q * (0.5*l) * (0.5*l)) / 2;
    vet[7]:=(t0 * (0.6*l)) - (q * (0.6*l) * (0.6*l)) / 2;
    vet[8]:=(t0 * (0.7*l)) - (q * (0.7*l) * (0.7*l)) / 2;
    vet[9]:=(t0 * (0.8*l)) - (q * (0.8*l) * (0.8*l)) / 2;
    vet[10]:=(t0 * (0.9*l)) - (q * (0.9*l) * (0.9*l)) / 2;
    vet[11]:=0;
    (comunque questo pezzo potevi benissimo farlo con un ciclo for*)
    for i:=1 to 11 do
    chart1.Series[0].addxy(i,vet[i]);
    end;

    ecco qui..
    spero sia quello che volevi...
    se qualcosa non l'hai capita,basta che me lo chiedi...



  5. #5
    Scusami MrCocò85 ma cè qualcosa che nn va, ecco il codice:

    procedure TForm1.Edit1Change(Sender: TObject);
    begin
    q:=strtofloat(edit1.Text);
    end;

    procedure TForm1.Edit2Change(Sender: TObject);
    begin
    l:=StrTofloat(edit2.Text);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var m :array[0..10] of real;
    t :array[0..10] of real;
    i,ii:integer;
    begin

    t[0]:= q * ((l/2)-(0*l));
    t[1]:= q * ((l/2)-(0.1*l));
    t[2]:= q * ((l/2)-(0.2*l));
    t[3]:= q * ((l/2)-(0.3*l));
    t[4]:= q * ((l/2)-(0.4*l));
    t[5]:= q * ((l/2)-(0.5*l));
    t[6]:= q * ((l/2)-(0.6*l));
    t[7]:= q * ((l/2)-(0.7*l));
    t[8]:= q * ((l/2)-(0.8*l));
    t[9]:= q * ((l/2)-(0.9*l));
    t[10]:= q * ((l/2)-(1*l));

    m[0]:=0;
    m[1]:=(t[0] * (0.1*l)) - (q * (0.1*l) * (0.1*l)) / 2;
    m[2]:=(t[0] * (0.2*l)) - (q * (0.2*l) * (0.2*l)) / 2;
    m[3]:=(t[0] * (0.3*l)) - (q * (0.3*l) * (0.3*l)) / 2;
    m[4]:=(t[0] * (0.4*l)) - (q * (0.4*l) * (0.4*l)) / 2;
    m[5]:=(t[0] * (0.5*l)) - (q * (0.5*l) * (0.5*l)) / 2;
    m[6]:=(t[0] * (0.6*l)) - (q * (0.6*l) * (0.6*l)) / 2;
    m[7]:=(t[0] * (0.7*l)) - (q * (0.7*l) * (0.7*l)) / 2;
    m[8]:=(t[0] * (0.8*l)) - (q * (0.8*l) * (0.8*l)) / 2;
    m[9]:=(t[0] * (0.9*l)) - (q * (0.9*l) * (0.9*l)) / 2;
    m[10]:=0

    for i:=round(m[0]) to round(m[10]) do
    chart1.Series[0].add(i);
    for ii:=0 to round(l) do
    chart1.Series[1].add(ii);

    chart1.Series[0].Clear;
    chart1.Series[1].Clear;

    il problema sta nel fatto che il grafico nn viene completamente tracciato!!
    Dove sbaglio?
    Perdonami, ma mi chiariresti le idee?
    grazie

  6. #6
    qui la cosa è un pò più complicata...
    In poche parole usi un garfico a punti e quindi sul chart vengono visualizzati solo i punti.
    Hai due soluzioni:
    1)utilizzi la serie a linee(che dati due punti,li collega tra di loro,però il grafico verrebbe una mezza schifezza..
    2)utilizzi un'intervallo piccolissimo,in maniera tale da avere un effetto linea(che in realtà sono i punti vivino tra di loro..),anche se questo diminuirà di parecchio le prestazioni del tuo pc(infatti per intervalli molto piccoli rallenterà parecchio...

    una via di mezzo sarebbe utilizzare una serie a linee utilizzando però intervalli piccoli,in meniera tale da avere l'effetto desiderato..

    Spero di essere stato abbastanza chiaro..
    Sempre qui sono..



  7. #7
    Si ma resta il fatto che, anche se utilizzo un grafico a punti, nn me li fa vedere cmq i punti

  8. #8
    prova ad utilizzare il metodo addxy invece di add..
    tieni conto che il metodo addxy ha bispgno come paramtrei di due valori(ovvero la coordinata x e la coordinata y).

  9. #9
    Ciao...
    fatemi capire meglio i passi da seguire per tracciare il grafico:
    1)Inserisco il grafico
    2)Creo una serie
    3)Aggiungo nell'asse y i valori che voglio tracciare:
    for i:=round(m[0]) to round(m[10]) do chart1.Series[0].Addy(i);
    4)fine??
    grazie ciao

  10. #10
    Originariamente inviato da carmelo81
    Ciao...


    3)Aggiungo nell'asse y i valori che voglio tracciare:
    for i:=round(m[0]) to round(m[10]) do chart1.Series[0].Addy(i);

    grazie ciao
    se non sbaglio,se usi il metodo addy,inserisci solo la coordinata y;
    Quindi credo che dovresti usare il metodo addxy(X,Y) che inserisce un pixels nel punto di coordinata A(X,Y).
    Se tu vuoi fare un grafico che fà lo studio di uan funzione,ricorda che il tuo obbiettivo è vedere come al variare di x varia anche la y.
    Feci un programma del genere che data un funzione ne disegnava il grafico e se non ricordo male feci così:

    x:=-10;
    repeat
    y:=x+3;
    chart1.Series[0].Addxy(x,y);
    x:=x+0.1;
    until (x=10);

    questa semplice procedura disegna il grafico della funzione y=x+3 nell'intervallo di dominio -10,10..
    utilizzando un grafico a punti.
    per aumentare la risoluzione di tale grafico bastava variarea l'istruzione 'x:=x+0.1' mettendo al posto di 0.1 un valore più piccolo...

    Poi non ho capito ancora che tipo di funzione vuoi rappresentare tu...



Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.