Rysowanie gwiazdy

Odpowiedz Nowy wątek
2006-12-21 14:17
jarek_p
0

witam
mam taki problem potrzebuje narysowac w delphi gwiazde n- ramienna
Dane wejsciowe:
n= 3..10
R=30..240
r=5..150
r<R

Prosil bym chociarz o podpowiedzi gdyz zaczynam dopiero programowanie w delphi ;)
pozdrawiam

Pozostało 580 znaków

2006-12-21 15:48
0

To jest kod do pascala ..wystarczy żebyś to trochę przerobił żeby działało w Delphi;

procedure gwiazda(n,x,y,r1,r2:integer);
var
x1,y1,x2,y2,i:integer;
a:real;
begin
for i:=0 to n do
begin
a:=(i)*360/n -90 ;
x1:=trunc(cos(a*pi/180)*r1)+x;
y1:=trunc(sin(a*pi/180)*r1)+y;
a:=(i+0.5)*360/n-90 ;
x2:=trunc(cos(a*pi/180)*r2)+x;
y2:=trunc(sin(a*pi/180)*r2)+y;
line(x1,y1,x2,y2);
a:=(i+1)*360/n-90 ;
x1:=trunc(cos(a*pi/180)*r1)+x;
y1:=trunc(sin(a*pi/180)*r1)+y;
line(x1,y1,x2,y2);
end;
end;

i np. :

gwiazda(5,100,100,40,15);

"Nie po to piszę programy żeby korzystać z cudzych"

Pozostało 580 znaków

2006-12-21 16:27
jarek_p
0

ooo to juz cos :) wielkie dzieki powinienem sobie z tym poradzic ;) pozdro ;)

Pozostało 580 znaków

2006-12-21 21:11
0
procedure Gwiazda(Canvas:TCanvas; X:integer; Y:integer; N:byte; Rmax:word; Rmin:word);
var i:integer;
    ang:double;
begin
if (N<2) or (Rmin>Rmax) then exit;
Canvas.MoveTo(X, Y-Rmax);
ang:=PI/N;
i:=0;
while (i<=N*2) do
  begin
  Canvas.LineTo(Round(sin(i*ang)*Rmax)+X, -Round(cos(i*ang)*Rmax)+Y );
  inc(i);
  Canvas.LineTo(Round(sin(i*ang)*Rmin)+X, -Round(cos(i*ang)*Rmin)+Y );
  inc(i);
  end
end;

Dodałem jeszcze parametry: Canvas - powierzchnia, po której rysujesz, X oraz Y środka.


<font color="red">Konto porzucone</span>

Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir 'Szczawik' Włodkowski

Pozostało 580 znaków

2007-01-01 14:38
jarek_p
0

jednak nie moge sobie z tym poradzic na przetlumaczenie tego na jezyk delphi moze dlatego ze nigdy tego jezyka nieuzywalem :/ mogl by ktos choc mnie naprowadzic na dobra droge ? ;) pozdrawiam

Pozostało 580 znaków

2007-01-01 18:21
0

Może funkcja z opisami Ci bardziej pomoże:
(Na podstawie funkcji Szczawika)

procedure Gwiazda(const Canvas: TCanvas; const X, Y:integer; const N:byte; const Rmax, Rmin:word);
{
-- opis przekazywanych zmiennych --
   Canvas - Canvas obiektu, na który chcemy nanieść gwiazdę
   x - odległość środka gwiazdy od lewej krawędzi Canvasa
   y - odległość środka gwiazdy od górnej krawędzi Canvasa
   n - ilość ramion
   Rmax - odległość od środka gwiazdy dalszej części ramiona ( Rmin < Rmax )
   Rmin - odległość od środka gwiazdy bliższej części ramiona ( Rmin < Rmax )

-- zastosowanie --
   Gwiazda(Form1.Canvas,150,150,5,120,50);
}
var
   i:integer;
   ang:double;
begin
   if (N<2) or (Rmin>Rmax) then
      exit;

   Canvas.MoveTo(X, Y-Rmax);
   ang:=PI/N;
   i:=0;
   while (i<=N*2) do
   begin
      Canvas.LineTo(Round(sin(i*ang)*Rmax)+X, -Round(cos(i*ang)*Rmax)+Y );
      inc(i);
      Canvas.LineTo(Round(sin(i*ang)*Rmin)+X, -Round(cos(i*ang)*Rmin)+Y );
      inc(i);
   end;
end;

Pozostało 580 znaków

2007-01-03 12:37
jarek_p
0

Na dzien dzisiejszy wyglada u mnie to tak zrozumialem procedure tylko nie wiem czego do niej brakuje. oto caly kod jak by mogl ktos podpowiedziec co gdzie dopisac lub czego zaduzo czy jaki obiekt dostawic. domyslam sie ze musze gdzies wstawic pola gdzie bedzie urzytkownik wpisywal potrzebne dane ale nie wiem jak to zrobic po raz pierwszy mam doczynienia z delphi ... :(

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
procedure Gwiazda(const Canvas: TCanvas; const X, Y:integer; const N:byte; const Rmax, Rmin:word);
var
i:integer;
ang:double;
begin
if (N<2) or (Rmin>Rmax) then
exit;

Canvas.MoveTo(X, Y-Rmax);
ang:=PI/N;
i:=0;
while (i<=N2) do
begin
Canvas.LineTo(Round(sin(i
ang)Rmax)+X, -Round(cos(iang)Rmax)+Y );
inc(i);
Canvas.LineTo(Round(sin(i
ang)Rmin)+X, -Round(cos(iang)*Rmin)+Y );
inc(i);
end;
end;
Gwiazda(Form1.Canvas,150,150,5,120,50);

end.

Pozostało 580 znaków

2007-01-03 12:52
jarek_p
0

zapomnialem dodac ze nic sie nie rysuje po wcisnieciu guzika rysuj ;p moze zle wywoluje procedure ?

Pozostało 580 znaków

2007-01-04 12:39
jarek_p
0

to moze na poczatek uproszcze zadanie. Jak bedzie wygladal program ktory bedzie rysowal gwiazde np. 6 ramienna ... to zadanie przerasta moje sily :/

Pozostało 580 znaków

2007-01-04 12:39
jarek_p
0

to moze na poczatek uproszcze zadanie. Jak bedzie wygladal program ktory bedzie rysowal gwiazde np. 6 ramienna ... to zadanie przerasta moje sily :/

Pozostało 580 znaków

2007-01-04 13:56
0

Od kiedy przestali wydawać tą serię książek "... dla opornych" to na forum zaczęły się pojawiać bardzo zabawne pytania... :(

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0