kako da uradim grafik funkcije oblika aX^2+bX+c u delphiju 5???
grafik u delphiju
Zaključano
Zakačeno
Isto kao sto bi uradio na papiru. Imas odredjene vrednosti za nepoznate (recimo 0.1, 0.15, 0.2, 0.25...), izracunas izraz, dobijes koordinatu na grafiku, spajas dobijene tacke i eto ti grafika.
Imas funkcije Canvas-a LineTo i MoveTo koje su ti potrebne za iscrtavanje grafika. U principu prvu tacku koju dobijes postavis sa MoveTo, a svaku sledecu prosledis funkciji LineTo. Jedino na cega treba da obratis paznju je razmera... ne bi hteo da ti grafik bude previse mali ili preterano velik da se ne vidi na formi.
Imas funkcije Canvas-a LineTo i MoveTo koje su ti potrebne za iscrtavanje grafika. U principu prvu tacku koju dobijes postavis sa MoveTo, a svaku sledecu prosledis funkciji LineTo. Jedino na cega treba da obratis paznju je razmera... ne bi hteo da ti grafik bude previse mali ili preterano velik da se ne vidi na formi.
Potpis
Evo ti nesto za pocetak. Dalje ces, valjda, moci sam 

Code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure Translate(var x, y: Integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const
A = 1;
B = 1;
C = 0;
START_X = -10;
END_X = 10;
var
i, x, y: Integer;
function Funct(x: Integer): Integer;
begin
Result := A * x * x + B * x + c
end;
begin
x := START_X; y := Funct(x);
Translate(x, y);
Canvas.MoveTo(x, y);
for i := START_X + 1 to END_X do begin
x := i;
y := Funct(x);
Translate(x, y);
Canvas.LineTo(x, y)
end
end;
procedure TForm1.Translate(var x, y: Integer);
begin
Inc(x, ClientWidth div 2);
y := ClientHeight div 2 - y
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure Translate(var x, y: Integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const
A = 1;
B = 1;
C = 0;
START_X = -10;
END_X = 10;
var
i, x, y: Integer;
function Funct(x: Integer): Integer;
begin
Result := A * x * x + B * x + c
end;
begin
x := START_X; y := Funct(x);
Translate(x, y);
Canvas.MoveTo(x, y);
for i := START_X + 1 to END_X do begin
x := i;
y := Funct(x);
Translate(x, y);
Canvas.LineTo(x, y)
end
end;
procedure TForm1.Translate(var x, y: Integer);
begin
Inc(x, ClientWidth div 2);
y := ClientHeight div 2 - y
end;
end.
@dejan
hvala
jel mozes samo malo da mi pojasnis proceduru Translate?
sve ovo ostalo razumem
hvala
jel mozes samo malo da mi pojasnis proceduru Translate?
sve ovo ostalo razumem
Evo ja cu ti razjasnim ako smem... ;-)
Translate ocigledno postavlja koordinatni pocetak na sredinu canvasa, tako da imas sva 4 kvadranta grafika...
Translate ocigledno postavlja koordinatni pocetak na sredinu canvasa, tako da imas sva 4 kvadranta grafika...
Citat:
_v!rus_: Evo ja cu ti razjasnim ako smem... ;-)
Translate ocigledno postavlja koordinatni pocetak na sredinu canvasa, tako da imas sva 4 kvadranta grafika...
Translate ocigledno postavlja koordinatni pocetak na sredinu canvasa, tako da imas sva 4 kvadranta grafika...
Otprilike... Mi posmatramo koordinantni pocetak na sredini canvasa, dok je on u stvarnosti u levom gornjem uglu. Zato svaku tacku (x, y) treba translirati tako da se od nasih zamisljenih dobiju stvarne koordinate. Takodje, nase y raste gore, dok u stvarnosti raste dole. Otuda y := -(y - ClientHeight div 2).
Pojednostavljeno: postupak kojim si translirao koordinantni pocetak iz gornjeg levog ugla na sredinu primenjujes na svaku tacku
ahaaaa kapiram.... nice
thnx
thnx
Ako ti treba neki lep grafik, moyes da koristis interpolaciju, koja na osnovu tacaka crta grafik. Ja sam to radio kao projekat, pa ako te zanima, posalji mi mail, pa cu da ti posaljem.
PS
U pitanju je delphi 7. :O)
PS
U pitanju je delphi 7. :O)
to je najlakse uraditi kako rade AA na grafickoj kartici. Ili nacrtas sve to par puta vece pa interpolacijom smanjis na zeljenu ili nacrtas normalno, pa povecas, pa smanjis
to je prilicno lagano, ima biblioteke za poznate algoritme za interpolaciju na svakom cosku
Potpis
ma hocu da uradim maturski - osobine i grafik funkcije u delphiju. ne treba meni nesto doterano nego samo onako da imam grafik
e opet mi treba pomoc!
1) osobine funkcije treba da se ispisu u memo-u. kako mogu da ubacim neke simbole? npr. simbol za beskonacno, za pripadanje skupu (kao e), svako (obrnuto A), strelice na gore i na dole....
2) mogu li da grafik uradim uz pomoc chart komponente?
ajd pomozite opet...
1) osobine funkcije treba da se ispisu u memo-u. kako mogu da ubacim neke simbole? npr. simbol za beskonacno, za pripadanje skupu (kao e), svako (obrnuto A), strelice na gore i na dole....
2) mogu li da grafik uradim uz pomoc chart komponente?
ajd pomozite opet...
1. Sto se tice znakova u memo-u, mozes da probas sa CharacterMap-om (divan jedan programcic :), ide uz svaki win jos od 3.0.
Edit: evo za beskonacno [∞] (U + 221E) u obicnom tahoma fontu (unicode).
2. Nisam radio sa chartom ali jesam sa dbchartom, pretpostavljam da je isto. Sistem bi bio da za svako X koje se inkrementira, rucno racunas Y i te Y-e prosledjujes kao podatke chartu, exprimentisi malo, skoro sam siguran da moze. Samo je malo fizikalija naterati chart da izgleda onako kako ti hoces, mozda je bolje rucno crtanje.
Edit: evo za beskonacno [∞] (U + 221E) u obicnom tahoma fontu (unicode).
2. Nisam radio sa chartom ali jesam sa dbchartom, pretpostavljam da je isto. Sistem bi bio da za svako X koje se inkrementira, rucno racunas Y i te Y-e prosledjujes kao podatke chartu, exprimentisi malo, skoro sam siguran da moze. Samo je malo fizikalija naterati chart da izgleda onako kako ti hoces, mozda je bolje rucno crtanje.
nasao sam za ± (alt+0177) i ² (alt+0178) ali ovo ostalo nema sanse... sve ove simbole sam nasao u wordu i tamo ima za skoro svaki ovaj shortcut, ali nema shanse da delphi prihvati one koji imaju shortcut sa alt+x (npr 221e, alt+x = ∞ )
postoji li nacin da se ubace ovi simboli u delphi??????
postoji li nacin da se ubace ovi simboli u delphi??????
da, odi u pomenuti Character Map i tamo (ili u bilo kom programu u kome moze) otkucaj taj znak i onda copy-paste-uj ga u delphi...ja tako radim :)
Potpis
kopiram ja ali pojavljuje se samo kocka za vecinu simbola
znas sta bih ti onda preporucio. pretpostavljam da taj tvoj output treba da bude mesavina texta i matematickih simbola? uzmi TWebBrowser i dinamicki generisi HTML kod..to su jednostavne stvari...mozes direktno da ucitas HTML kod u TWebBrowser bez potrebe za pravljenjem privremenog html fajla iz kog ces da ucitas.
ako hoces tako da radis dacu ti konktretnije upute
ako hoces tako da radis dacu ti konktretnije upute
Potpis
e ajde da podjem u skolu da vidim moze li ovako (stavio sam e umesto znaka pripadanja skupu). ako ne moze javicu ti ili ovde ili na email.
joj sramota me da i ovo pitam... aaa nema veze
kako da zaokruzim broj na 2 decimale. u pascalu je writeln(a:2). jel moram da ga prebacim u string pa onda za ga smanjujem odnosno obrisem deo. isto treba da se ispise u memo
joj sramota me da i ovo pitam... aaa nema veze
kako da zaokruzim broj na 2 decimale. u pascalu je writeln(a:2). jel moram da ga prebacim u string pa onda za ga smanjujem odnosno obrisem deo. isto treba da se ispise u memo
FormatFloat('0.00', neki_broj) ce da napise u obliku 123456.25 npr
Potpis
zavrsio sam!!! juce! hvala svima na pomoci
...
Formatfloat funkcija vraca vrednost string tipa...
//textstr:=formatfloat('0.00', value);
da li postoji funkcija za zaokruzivanje real broja na odredjeni broj decimala, ali bez konverzije u str?
Poz
Formatfloat funkcija vraca vrednost string tipa...
//textstr:=formatfloat('0.00', value);
da li postoji funkcija za zaokruzivanje real broja na odredjeni broj decimala, ali bez konverzije u str?
Poz