Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Ablauffehler, Hilfe (https://www.delphipraxis.net/84973-ablauffehler-hilfe.html)

sweety 24. Jan 2007 00:09


Ablauffehler, Hilfe
 
Hallöchen :P
Habe es geschafft einen Quelltext zu erstellen, wo ich dachte der funktioniert, tut er aber noch nicht so wirklich.
Mein Schmuckstück: :gruebel:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var w,wh,ws,xdel,ydel,lange,wlast,wd,xs1,ys1: real;
    xvorz,yvorz: boolean; //vorzeichen delta xy bestimmen
    i:integer;
    xs,ys:array[1..40] of integer;
    dist:string;
    radtodeg:Extended;
begin
 for i:=1 to n do
   w:=StrToFloat(edit1.Text); //umrechnen in pi und volle winkel

 if w <=180 then wh:=((w/180)*pi)
     else wh:=-(((w-180)/180)*pi);
     ws:=sin(wh);

 for i:=1 to n do
  begin //x-werte differenz zu ersten n-punkt, ersten punkt holen und mit x-werte subtraieren
   xdel:=xp[n-i]-xp[n];//delta x-wert n-i
   ydel:=yp[n-i]-yp[n];//delta y-wert

   //bestimmen der vorzeichen
   if xdel>0 then xvorz:= true else xvorz:= false;
   if ydel>0 then yvorz:= true else yvorz:= false;

   //berechnung neuwert sin bzw. cos
   lange:=sqrt((xdel*xdel)+(ydel*ydel));
   wlast:=(radtodeg(arctan*(ydel/xdel)));//winkel von n x-achse zu punkt

   //4.Quatrant
   if (xvorz and yvorz)=true then wd:= wlast-w;

   //3.Quatrant
   if xvorz=false then
    begin
    if yvorz=true then wd:=180+wlast-w;
    end;

   //2.Quatrant
   if xvorz=false then
    begin
    if yvorz=false then wd:=180+wlast-w;
    end;

   //1.Quatrant
   if xvorz=true then
    begin
    if yvorz=false then wd:=(wlast-w);
    end;
   wd:=degtorad(wd);//drehwinkel x-achse in rad

   //richtungssinn der winkel
   xs[1]:=xp[n];
   ys[1]:=yp[n];
   xs1:=(xp[n]+lange*(cos(wd))));
   xs[i+1]:=round(xs1);
   ys1:=(yp[n]+(lange*(-sin(wd))));
   ys[i+1]:=round(ys1);
   dist:=FloatToStr(n+i)+''+'x'+FloatToStr(xs[i+1])+'y'+FloatToStr(ys[i+1]);

   image1.Canvas.Pen.Color:=clred;
   image1.Canvas.Rectangle(xs[i+1]-1,ys[i+1]-1,xs[i+1]+1,ys[i+1]+1);
   end;

   //zeichnen der gedrehten Figur
   for i:=1 to n do
    begin
     image1.Canvas.MoveTo(xs[i],ys[i]);
     image1.Canvas.LineTo(xs[i+1],ys[i+1]);
    end;
   image1.Canvas.MoveTo(xs[n],ys[n]);
   image1.Canvas.LineTo(xs[1],ys[1];


end;

end.

Bin für jede Hilfe dankbar. :love:


sweety

[edit=MrSpock] Code Tags eingefügt. Mfg, MrSpock[/edit]

zecke 24. Jan 2007 00:24

Re: Ablauffehler, Hilfe
 
:hi:

Bitte setze das Ganze in Delphi-Code-Tags. Beim Beitrag erstellen/editieren, der Button 'Delphi-Code' dann code rein und nochmal den Button.

Ich Blick einfach nicht durch ohne diese Formatierung :shock:

marabu 24. Jan 2007 07:16

Re: Ablauffehler, Hilfe
 
Hallo Sweety,

da liegt ja einiges im Argen...

Dein Code hat nichts im OnClick-Handler eines Button verloren. Du willst eine durch ein Polygon beschriebene Umriss-Figur zuerst drehen und dann zeichnen. Das kann man auch so schreiben, dass es jeder erkennen kann:

Delphi-Quellcode:
type
  TPoints = array of TPoint;

  TMainForm = class(TForm)
    // ...
    procedure ButtonClick(Sender: TObject);
  private
    Points: TPoints;
    function Rotate(const p: TPoints; angle: Integer): TPoints;
  end;

function TMainForm.Rotate(const p: TPoints; angle: Integer): TPoints;
begin
  // ...
end;

procedure TMainForm.ButtonClick(Sender: TObject);
var
  pts: TPoints;
  angle: Integer;
begin
  if TryStrToInt(AngleEdit.Text, angle) then
  begin
    pts := Rotate(Points, angle);
    Image.Canvas.Polygon(pts);
  end;
end;
Denke mal drüber nach.

Freundliche Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz