Einzelnen Beitrag anzeigen

mbamler

Registriert seit: 19. Mai 2005
Ort: Hamburg
118 Beiträge
 
Delphi 7 Architect
 
#2

Re: Problem mit Polygon auf Canvas Drehen

  Alt 14. Mär 2006, 07:47
Zitat von TiPi:
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 !



Was in deinem Code das Problem ist kann ich nicht so schnell analysieren...
Aber vielleicht hilft dir ja der Code weiter, den ich mal vor ein paar Monaten gemacht habe.
Er kommt hier am Hamburger Airport zum Einsatz in einem Programm, dass die Positionen der Flugzeuge auf dem Vorfeld darstellt.

Gruß
Matthias
Angehängte Dateien
Dateityp: zip vector_flugzeug_173.zip (216,4 KB, 31x aufgerufen)
  Mit Zitat antworten Zitat