Grafikon készítése?
Sziasztok
Erősen kezdőnek számítok a programozás világában, így biztos sokan a hajukat fogják tépni, hogy ilyen "egyértelmű" dolgot kérdezek. :) De hiába keresgéltem, sehogy sem bírtam megtalálni a választ.
Szóval egy grafikont szeretnék készíteni, ami csupán annyit tud, hogy piros (szaggatott) vonalat rajzol, ha az érték 0 alá csökken (ami ez esetben nagyobb, mint 250) és zöld el, ha 0 fölé (ami ugye kisebb, mint 250). A probléma az, hogy én azt szeretném, hogy a vonal onnantól váljon pirossá vagy zöldé, ahol metszi az x tengelyt.
Azt eddig megoldottam, hogy ha nagyobb vagy kisebb, más színt kap, viszont ha +100-ban vagyok, és lecsökken az érték -25re, akkor a +100tól egészen a -25-ig piros lesz a vonal.
Íme a program:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,x,y,p,k:integer;
begin
with image1.canvas do
begin
c:= strtoint(edit3.text);
d:= strtoint(edit4.text);
a:= strtoint(edit1.text);
b:= strtoint(edit2.text);
x:= strtoint (edit5.text);
y:=strtoint (edit6.text);
p:= x*50+c;
k:= d+y*(-1);
begin
pen.color:=clred;
if k<250 then
pen.color:=clgreen;
begin
pen.width:=2;
pen.style:=psDash;
line(c,d,p,k);
ellipse(a-4,b-4,a+4,b+4);
ellipse(c-4,d-4,c+4,d+4);
edit3.text:= inttostr(p);
edit4.text:= inttostr(k);
end;
end;
end;
end;
(Azért némi magyarázatot fűznék ahhoz, hogy hogyan is működik.
Szóval, az első edit oszlopban csak a kezdő adatok vannak, azt nem kell bolygatni [edit1;edit2]
a második oszlop első cellájába az eltelt napok számát kell írni, tehát, ha 2nap telt el, s eközben az érték +48-al nőtt, akkor felső:2 alsó:48 [edit5,edit6]
a harmadik oszlopot szintén nem kell bolygatni :) [edit3,edit4]
A Button1 arra szolgál, hogy a bevitt értéket megjelenítsük, a Button2 pedig a koordinátarendszert jeleníti meg.)
link a képhez:
Én így csinálnám szakaszonként:
Megvizsgálnám az aktuális szakasz két végpontját (A és B)
a) Mindkettő az X-tengely fölött van -> egy zöld vonal A-ból B-be
b) Mindkettő az X-tengely alatt van -> egy piros vonal A-ból B-be
c) Először meg kell határozni, hogy hol metszi az X-tengelyt (M pont). Utána két eset:
c) 1. Az A alatta, a B felette -> egy piros vonal A-ból M-be, és egy zöld vonal M-ből B-be
c) 2. Az A fölötte van, a B alatta -> egy zöld vonal A-ból M-be, és egy piros vonal M-ből B-be
M meghatározásához nézz utána a koordináta geometriában az egyenes egyenletének szerintem. M egyik koordinátáját tudjuk, y=0 (az X-tengelyen van!). A másikat pedig az egyenes egyenletével (A és B egyetlen egyenest határoznak meg) kiszámolhatjuk könnyen.
Bocsi, de csak ilyen elméleti segítséget tudok most nyújtani, mert fáradt vagyok most ahhoz, hogy egy számomra ismeretlen programozási nyelven írott kódot értelmezzek.
Remélem azért, segít megoldani.
Nagyon köszönöm, nagyon sokat segítettél. :)
Annyira bele voltam gabalyodva a bonyolult megoldásokba, hogy ez eszembe se jutott, pedig teljesen egyértelmű.
Még egyszer kösz!
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!