Einzelnen Beitrag anzeigen

TiPi

Registriert seit: 13. Mär 2006
1 Beiträge
 
#1

Problem mit Polygon auf Canvas Drehen

  Alt 13. Mär 2006, 23:25
Hallo erstmal ,

Ich möchte ein selbsterstelltes Polygon in einem Canvas Drehen.

Hier erstmal der Grundquelltext für das Drehen:

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
begin
  winkel:=strtofloat(edit3.Text); //umrechnen in pi und volle drehung der winkel

   if winkel <= 180 then hwink:=((winkel/180)*pi)
        else hwink:=-(((winkel-180)/180)*pi) ;
        swink:=sin(hwink);
         for k:=1 to (n-1) do
          begin
            //x-werte differenz zu letztem n punkt last!!
                  //letzten punkt holen
                 //mit x-werte subtrahieren
          xdel:=xp[n-k]-xp[last]; //delta x wert n-k
          ydel:=yp[n-k]-yp[last]; //delta y wert
           //vorzeichen bestimmen
           if xdel>0 then xvorz:=true else xvorz:=false;
           if ydel>0 then yvorz:=true else yvorz:=false;

                                     //berechnung neuerwert sin bzw,cos
           lange:=sqrt((xdel*xdel)+(ydel*ydel));
          // lange:=round(lange);
           winklast:=(radtodeg(arctan(ydel/xdel)));//winkel von last x-achse zu punkt
           //4.quadrant
           if (xvorz and yvorz)=true then drehw:=winklast - winkel; //4.quadrant

           //3.quadrant
           if xvorz=false then //3.quadrant
           begin
           if yvorz=true then drehw:=180+winklast - winkel;
           end;

           //2.quadant
           if xvorz=false then //2.quadrant
           begin
           if yvorz=false then drehw:=180+winklast-winkel;
           end;

           //1.quadrant
           if xvorz=true then
           begin
           if yvorz=false then drehw:=(winklast-winkel);
           end;

           //drehw:=winklast - winkel; //winkel nach drehung um winkel zur x durch last
           drehw:=degtorad(drehw); //drehwinkel x achse in rad
                                         //richtungssinn der winkel
           xs[1]:=xp[last];
           ys[1]:=yp[last];
           xs1:=(xp[last]+(lange*(cos(drehw))));
           xs[k+1]:=round(xs1); //K
           ys1:=(yp[last]-(lange*(-sin(drehw))));
           ys[k+1]:=round(ys1);
           //end;

          // for a:=1 to h do
           // begin
           // xs[k]:=xs[n-k];
           // ys[k]:=ys[n-k];
           // end;

          //dist:='x '+floattostr(xs[k])+' y '+floattostr(ys[k]);
          //listbox2.items.Add(dist);

            dist:=floattostr(n-k)+' '+'x '+floattostr(xs[k+1])+' y '+floattostr(ys[k+1]);
          listbox2.items.Add(dist);


             // if siny2 >0 then xs[k]:=xp[n-k]+sinx2 ;
              //s[k]:=yp[n-k]y-siny2 ;

          //if ydel>0 then ys[k]:=yp[n-k]+siny2
            // else ys[k]:=yp[n-k]-siny2; //neue y koordinate
           image1.canvas.pen.color:=clred;
          image1.canvas.rectangle(xs[k+1]-3,ys[k+1]-3,xs[k+1]+3,ys[k+1]+3); //k
          end;
          //zeichnen der gedrheten figur
           for k:=1 to (n-1) do
          begin
           image1.canvas.moveto(xs[k],ys[k]);
           image1.canvas.lineto(xs[k+1],ys[k+1]);
             end;
           image1.canvas.moveto(xs[n],ys[n]);
           image1.canvas.lineto(xs[1],ys[1]);

           // image1.canvas.brush.style:=bsclear;
            image1.canvas.pen.color:=clblack;
end;
Das Drehen um den letzten Punkt habe ich nach vielen Versuchen endlich Hinbekommen das Problem ist aber ich muss des ding um den ersten Punkt drehen

Bekomme des aber nach tagelangem versuchen immer noch nicht hin.


Kann mir da jemand helfen mit nem Kleinem Tipp wo und wie ich da jetzt ansetzen sollte.

sollte der rest des Quellcodes noch gebraucht werden bitte sagen! der ist dann nicht mehr so lang


Danke für die Hilfe



Wenn ich alles wüßte wäre, ich gott bin ich aber nicht deshalb Frage ich!
achja Brauche keinem Link zum PHP handbuch des habe ich schon !
  Mit Zitat antworten Zitat