Mam pytanie na temat wykresów a konkretnie jak w ogóle w delphim robi sie jakiś wykres np x do kwadratu czy x do 3, i jak dodaje sie osie bo widziałem kiedyś taki program co rysował wykresy napisany w delphi ale w ogóle nie było osi...
0
0
Jaki widzisz problem ? - rysuj na Canvas`ie : Canvas.LineTo, a strzałki: canvas.Polygon().
0
A może napisał byś jakiś prosty przykład bo nie bardzo wiem jak to ma być... np x do 3. Z góry dzięki
0
A może napisał byś jakiś prosty przykład bo nie bardzo wiem jak to ma być... np x do 3. Z góry dzięki
0
A może to ty powinieneś zadać sobie troche trudu i poszukać ?...
http://4programmers.net/Forum/viewtopic.php?id=71747
http://4programmers.net/Forum/viewtopic.php?id=71862
0
Po raz kolejny odpowiadam na tego samego typu pytanie - ale cóż:)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Spin, ComCtrls, Menus;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Label2: TLabel;
PopupMenu1: TPopupMenu;
sinx1: TMenuItem;
cosx1: TMenuItem;
tgx1: TMenuItem;
ctgx1: TMenuItem;
Button2: TButton;
Button3: TButton;
SpinEdit1: TSpinEdit;
Image1: TImage;
funkcjaliniowa1: TMenuItem;
funkcjakwadratowa1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure sinx1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure cosx1Click(Sender: TObject);
procedure tgx1Click(Sender: TObject);
procedure ctgx1Click(Sender: TObject);
procedure funkcjaliniowa1Click(Sender: TObject);
procedure funkcjakwadratowa1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
funkcja=function(x:real):real; //deklaracja typu funkcyjnego
var
Form1: TForm1;
dx:integer; //wielkość jednostki
ox,oy:integer;
uklad:boolean;
a,b,c:double;
implementation
{$R *.DFM}
procedure czysc;
begin
uklad:=False;
Form1.Image1.Picture:=nil;
end;
procedure rysuj_uklad;
begin
with Form1.Image1.Canvas do
begin
//oś ox
Moveto(0,oy);
Lineto(Form1.Width,oy);
//strzałka
Lineto(Form1.Width-15,oy-5);
Moveto(Form1.Width,oy);
Lineto(Form1.Width-15,oy+5);
//oś oy
Moveto(ox,0);
Lineto(ox,Form1.Height);
//strzałka
Moveto(ox,0);
Lineto(ox-5,10);
Moveto(ox,0);
Lineto(ox+5,10);
end;
end;
procedure jednostki;
var i:integer;
x,y:integer;
begin
x:=ox;
y:=oy+10;
Form1.Image1.Canvas.TextOut(x,y,'0');
//oś ox
for i:= 1 to round(ox/dx)do
begin
x:=x+dx;
Form1.Image1.Canvas.TextOut(x-2,y,inttostr(i));
Form1.Image1.Canvas.Moveto(x,y-13);
Form1.Image1.Canvas.Lineto(x,y-3);
end;
x:=ox;
for i:= -1 downto -round(ox/dx)do
begin
x:=x-dx;
Form1.Image1.Canvas.TextOut(x-6,y,inttostr(i));
Form1.Image1.Canvas.Moveto(x,y-13);
Form1.Image1.Canvas.Lineto(x,y-3);
end;
//oś y
y:=oy;
x:=ox ;
for i:= 1 to Round(oy/dx)do
begin
y:=y-dx;
Form1.Image1.Canvas.TextOut(x+8,y-10,IntToStr(i));
Form1.Image1.Canvas.MoveTo(x-3,y);
Form1.Image1.Canvas.LineTo(x+3,y);
end;
y:=oy;
for i:= -1 downto -round(oy/dx)do
begin
y:=y+dx;
Form1.Image1.Canvas.Textout(x+8,y-10,IntToStr(i));
Form1.Image1.Canvas.Moveto(x-3,y);
Form1.Image1.Canvas.Lineto(x+3,y);
end;
end;
function sinx(x:real):real;
begin
sinx:=sin(x)
end;
function cosx(x:real):real;
begin
cosx:=cos(x)
end;
function tgx(x:real):real;
begin
if cos(x)<>0 then
tgx:=(sin(x)/cos(x));
end;
function ctgx(x:real):real;
begin
if sin(x)<>0 then
ctgx:=(cos(x)/sin(x))
end;
function liniowa(x:real):real;
begin
liniowa:=a*x+b;
end;
function kwadratowa(x:real):real;
begin
kwadratowa:=a*x*x+b*x+c;
end;
procedure wykres(f:funkcja; kolor:TColor);
var
x,y:real; //współrzędne matematyczne
xf,yf,h:integer;//współrzędne ekranowe,
begin
h:=1;
xf:=ox;
x:=0;
y:=f(x);
yf:=oy-round(y/dx);
Form1.Image1.Canvas.Pixels[xf,yf]:=kolor;
//rysowanie wykresu na dodatniej półosi ox
while xf<2*ox do
begin
xf:=xf+h;
x:=(xf-ox)/dx;
y:=f(x);
yf:=round(oy-y*dx);
Form1.Image1.Canvas.Pixels[xf,yf]:=kolor;
end;
xf:=ox;
x:=0;
y:=f(x);
yf:=oy-round(y/dx);
Form1.Image1.Canvas.Pixels[xf,yf]:=kolor;
//rysowanie wykresu na ujemnej półosi ox
while xf>0 do
begin
xf:=xf-h;
x:=(xf-ox)/dx;
y:=f(x);
yf:=round(oy- y*dx);
Form1.Image1.Canvas.Pixels[xf,yf]:=kolor;
end;
end;
//funkcje obsługi zdarzeń
procedure TForm1.FormActivate(Sender: TObject);
begin
uklad:=False;
Form1.Color:=clWhite;
ox:=Form1.Width div 2; //współrzędna x osi y
oy:=(Form1.Height - Panel1.Height) div 2;//współrzędna y osi x
dx:=ox;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
if SpinEdit1.Value> 0 then
dx:=round(ox/SpinEdit1.Value);
end;
procedure TForm1.sinx1Click(Sender: TObject);
begin
wykres(sinx, clBlue)
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
czysc;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if not uklad then
begin
czysc;
rysuj_uklad;
jednostki;
end;
end;
procedure TForm1.cosx1Click(Sender: TObject);
begin
wykres(cosx, clRed)
end;
procedure TForm1.tgx1Click(Sender: TObject);
begin
wykres(tgx, clNavy)
end;
procedure TForm1.ctgx1Click(Sender: TObject);
begin
wykres(ctgx, clGreen)
end;
procedure TForm1.funkcjaliniowa1Click(Sender: TObject);
var
blad:boolean; //czy jest błąd podczas wprowadzania współczynników równania
begin
repeat
blad:=false;
try
a:=StrToFloat(InputBox('Współczynniki równania','Podaj współczynnik a','0'));
except
blad:=true;
end;
until blad=false;
repeat
blad:=false;
try
b:=StrToFloat(InputBox('Współczynniki równania','Podaj współczynnik b','0'));
except
blad:=true;
end;
until blad=false;
wykres(liniowa, clPurple);
end;
procedure TForm1.funkcjakwadratowa1Click(Sender: TObject);
var
blad:boolean; //czy jest błąd podczas wprowadzania współczynników równania
begin
repeat
blad:=false;
try
a:=StrToFloat(InputBox('Współczynniki równania','Podaj współczynnik a','0'));
except
blad:=true;
end;
until blad=false;
repeat
blad:=false;
try
b:=StrToFloat(InputBox('Współczynniki równania','Podaj współczynnik b','0'));
except
blad:=true;
end;
until blad=false;
repeat
blad:=false;
try
c:=StrToFloat(InputBox('Współczynniki równania','Podaj współczynnik c','0'));
except
blad:=true;
end;
until blad=false;
wykres(kwadratowa, clMaroon);
end;
procedure TForm1.FormResize(Sender: TObject);
begin
uklad:=False;
Form1.Color:=clWhite;
ox:=Form1.Width div 2; //współrzędna x osi y
oy:=(Form1.Height - Panel1.Height) div 2;//współrzędna y osi x
dx:=ox;
end;
end.
0
a moglbys na maila to wyslac ten program bo mi (nie wiem czemu) nie działa
[email protected]