Jump to content
GSForum - Segélyvonal

Chart-ok


wizard

Recommended Posts

Posted

Sziasztok!

 

Gombnyomásra szeretném ábrázolni egy Chart-tal az A_ertek/x függvényt. (p: 1/x)

 

Mivel 0-ban értelmetlen, ezért 2 ciklussal oldottam meg. Az egyik az elsõ, míg a másik a III. síknegyedben rajzol. A legnagyobb gond az vele, hogy a -1 es az 1 pontban lévõ értékeket összekoti egy egyenes vonallal. Hogyan lehet ezt kiküszöbölni?

 

A button click ezt tartalmazza:

 

For i := -5 to -1 do

begin

Series1.AddXY(i,(A_ertek/i),FloatToStr(i),clBlue);

Chart1.SeriesList[0]:=Series1;

end;

 

For i := 1 to 5 do

begin

Series1.AddXY(i,(A_ertek/i),FloatToStr(i),clBlue);

Chart1.SeriesList[0]:=Series1;

end;

 

 

A koordináta-rendszer beállításai meg itt vannak:

 

procedure TForm1.Chart1BeforeDrawAxes(Sender: TObject);

begin

with Chart1 do

begin

if LeftAxis.Maximum - LeftAxis.Minimum = 0 then

BottomAxis.PositionPercent := 50

else

BottomAxis.PositionPercent := 100 - ((LeftAxis.Maximum /(LeftAxis.Maximum - LeftAxis.Minimum))

* 100);

if BottomAxis.Maximum - BottomAxis.Minimum = 0 then

LeftAxis.PositionPercent := 50

else

LeftAxis.PositionPercent := 100 - ((BottomAxis.Maximum /(BottomAxis.Maximum -

BottomAxis.Minimum)) * 100);

Repaint;

end;

end;

 

 

A másik gondom pedig az, hogy a függvény maximuma a III síknegyedben a -1. Pedig az lenne az igazán szép megoldás, ha minél jobban meg tudnám közelíteni a 0-t. Ezt elõször úgy gondoltam, hogy a ciklust -5-tõl futtatnám pl. 0.00001-ig, de ez itt nem megengedett. (Mint pl a Basicnél.) Az i-t nem engedi valósként deklarálni.

 

Tudtok erre valami jó megoldást?

 

Elõre is köszönöm!

Posted

Csúnya megoldás, de mi lenne, ha külön series-ként ábrázolnád a két síknegyedet, és 0-hoz beraknál valami akkora értéket, hogy kiessen az ábrázolt tartományból?

 

Valami ilyesmire gondolok:

For i := -5 to -1 do
begin
Series1.AddXY(i,(A_ertek/i),FloatToStr(i),clBlue);
end;
Series1.AddXY(0,-1000,"0",clBlue);
Chart1.SeriesList[0]:=Series1;

Series2.AddXY(0,1000,"0",clBlue);
For i := 1 to 5 do
begin
Series2.AddXY(i,(A_ertek/i),FloatToStr(i),clBlue);
end;
Chart1.SeriesList[1]:=Series2;

 

Nem vagyok benne biztos, hogy ezt lehet, de nincs mivel kipróbálni. :)

Posted

arpsoft!

 

Köszi a tippet! Szerintem a 2 series alkalmazása nem csúnya megoldás. Most már legalább nem köti össze a 2 síknegyedet. :)

 

 

Viszont ezt a sorodat nem vágom:

Series1.AddXY(0,-1000,'0',clBlue);

Mondjuk a fordító sem vágta az elején, de csak annyi volt a hiba, hogy "0"-t írtál '0' helyett.

 

De most jön a probléma: Olyan a függvény képe, mintha a -1-et és a -1000-et összekötné egy egyenes

vonallal. Beállítottam a grafikont, hogy -10 - 10-ig legyenek az értékek.

 

A Series1.AddXY(0,-1000,'0',clBlue);-be -1000 helyett -11-et írtam. Így még durvábban elõjön a hiba. Nem görbe a -1 és a -11 összekötése, hanem egyenes. Ennél jobban kéne simulnia az Y tengelyhez.

 

+ a 2 series alkalmazásánál eltüntek oldalról az adatok. (Helyettük csak ennyi van: series1, series2.)

Ezek mutatták, hogy adott x értékhez milyen y értékek tartoznak. Excelnél ezt adatsornak hívjuk. Itt nem tudom.

 

 

Szerintem a ciklussal van a gáz. Ha meg tudom oldani, hogy mondjuk 0.0001-tol induljon, akkor elvileg mûködnie kéne.

 

Esetleg, ha számlálós ciklus helyett dinamikussal próbálkoznék?

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...