Salve a tutti,
sapreste dirmi come assegnare all'asse x e y di un grafico (Chart) dei valori presi da delle variabili?
grazie ciao
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.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
var
i:integer;
begin
for i:=1 to 10 do
chart1.Series[0].Add(i) ;
end;
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
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...
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
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..
Si ma resta il fatto che, anche se utilizzo un grafico a punti, nn me li fa vedere cmq i punti
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).
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
se non sbaglio,se usi il metodo addy,inserisci solo la coordinata y;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
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...