Jump to content
GSForum - Segélyvonal

Chart-ok


wizard

Recommended Posts

wizard

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!

Link to comment
Share on other sites

arpsoft

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. :)

Link to comment
Share on other sites

wizard

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?

Link to comment
Share on other sites

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...