Rysowanie gwiazdy

Odpowiedz Nowy wątek
jarek_p
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 chociaŻ o podpowiedzi gdyz zaczynam dopiero programowanie w delphi ;)
pozdrawiam

Pozostało 580 znaków

2006-12-21 15:48

Rejestracja: 13 lat temu

Ostatnio: 12 lat temu

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

jarek_p
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

Rejestracja: 16 lat temu

Ostatnio: 10 lat temu

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

jarek_p
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

Rejestracja: 14 lat temu

Ostatnio: 11 lat temu

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

jarek_p
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 użytkownik 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

jarek_p
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

jarek_p
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

jarek_p
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

Rejestracja: 17 lat temu

Ostatnio: 7 lat temu

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

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