rechteckt (4 eckpunkte) drehen
Übersicht

![]() |
5k41Betreff: rechteckt (4 eckpunkte) drehen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo!
Ich habe heute mal ein bisschen singlesurface programmierung angefangen und als ich probleme mit dem drehen meiner "sprites" bekam hab ich mir dieses kleine Testprogramm geschrieben: Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer BackBuffer() Type p Field x,y End Type width=100 height=100 Dim p.p(4) p.p(1)=New p p(1)\x=(GraphicsWidth()/2)-(width/2) p(1)\y=(GraphicsHeight()/2)-(height/2) p.p(2)=New p p(2)\x=(GraphicsWidth()/2)+(width/2) p(2)\y=(GraphicsHeight()/2)-(height/2) p.p(3)=New p p(3)\x=(GraphicsWidth()/2)+(width/2) p(3)\y=(GraphicsHeight()/2)+(height/2) p.p(4)=New p p(4)\x=(GraphicsWidth()/2)-(width/2) p(4)\y=(GraphicsHeight()/2)+(height/2) mittex=p(1)\x+width/2 mittey=p(1)\y+height/2 While Not KeyDown(1) Line p(1)\x,p(1)\y,p(2)\x,p(2)\y Line p(2)\x,p(2)\y,p(3)\x,p(3)\y Line p(3)\x,p(3)\y,p(4)\x,p(4)\y Line p(4)\x,p(4)\y,p(1)\x,p(1)\y If KeyDown(203) Then winkel=winkel+1 Mod 360 i=1 For i=1 To 4 p(i)\x=mittex+(Sin#(winkel+winkel2)*(width/2)) p(i)\y=mittey+(Cos#((winkel+winkel2))*(height/2)) winkel2=winkel2+90 Next winkel2=0 EndIf Text 0,0,Sqr((p(2)\x-p(1)\x)^2+(p(2)\y-p(1)\y)^2) Flip Cls Wend End nun wird das rechteckt komischer weise kleiner, sobald ich es drehe, wie auch die entfernung oben links zeigt... ich hab schon mehrere sachen versucht, aber bin zu keinem brauchbaren ergebniss gekommen... MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm...
x=cos(winkel)*radius y=sin(winkel)*radius so für 1. Punkt nimmst du 45° und für jeden anderen 90° mehr - dann zu jedem Punkt einen Rotationswiklen hinzurechnen radius bekommst du mit "halbe breite" * sqr(2) heraus Aber es geht dann nur mit Quadraten ! ansonsten mußst du Rotationsformel nehmen (suchen) oder winkel und radius für rechteck errechnen... geht mit Atan2 und Pythagoras |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
- Zuletzt bearbeitet von TheShadow am Sa, Mai 27, 2006 14:40, insgesamt einmal bearbeitet
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das wird an der Höhe und Breite legen, weil die ja fest vergeben ist.
Wenn du das Rechteck drehst, ist die Kantenlänge durch den mittelpunkt zur anderen Kante 100.(folge: rechteck wird kleiner) Versuch mal die Kantenlänge einfach zu nutzen, dann sollts gehen!! Also für 100 x 100 Rechteck muss das dann glaub 141.42136 sein. |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Schanz0r: sry hab irgendwie net ganz verstanden was du mir sagen wolltest
@The Shadow: SUPER! Genau das, was ich gesucht hab, aber wieso muss ich noch *sqr(2) rechnen und wieso muss ich den winkel2 vor der berechnung u auf 45° setzen? MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na ganz einfach ![]() Du hast ja 100(width, height ) jeweils wenn du jetzt aus den Rechteck 2 dreiecke machst (in gedanken!!) dann hast du ja eine schnittlinie, die länger wär als 100. Oder mal so, wenn du das Rechteck auf eine Kante stellst, ist die Höhe ja größer als die Höhe einer der vier Seiten , nicht wahr?! ^^ Also macht er ja die "Schnittstelle" auf 100, dann ist die Kantenlänge des Rechtecks nicht mehr 100 sondern 70.71. Sprich kleiner ![]() |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
satz des pytagoras: schnittstelle=Wurzel(a²+b²) | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Goodjee hat Folgendes geschrieben: satz des pytagoras: schnittstelle=Wurzel(a²+b²)
richtig sag ich ja ![]() Edit: Ich häts so gemacht: Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer BackBuffer() Type p Field x,y End Type width#=141.42136 height#=141.42136 W=100 H=100 Dim p.p(4) p.p(1)=New p p(1)\x=(GraphicsWidth()/2)-(W/2) p(1)\y=(GraphicsHeight()/2)-(H/2) p.p(2)=New p p(2)\x=(GraphicsWidth()/2)+(W/2) p(2)\y=(GraphicsHeight()/2)-(H/2) p.p(3)=New p p(3)\x=(GraphicsWidth()/2)+(W/2) p(3)\y=(GraphicsHeight()/2)+(H/2) p.p(4)=New p p(4)\x=(GraphicsWidth()/2)-(W/2) p(4)\y=(GraphicsHeight()/2)+(H/2) mittex=p(1)\x+W/2 mittey=p(1)\y+H/2 While Not KeyDown(1) Line p(1)\x,p(1)\y,p(2)\x,p(2)\y Line p(2)\x,p(2)\y,p(3)\x,p(3)\y Line p(3)\x,p(3)\y,p(4)\x,p(4)\y Line p(4)\x,p(4)\y,p(1)\x,p(1)\y If KeyDown(203) Then winkel=winkel+1 Mod 360 i=1 For i=1 To 4 p(i)\x=mittex+(Sin#(winkel+winkel2)*(width#/2)) p(i)\y=mittey+(Cos#((winkel+winkel2))*(height#/2)) winkel2=winkel2+90 Next winkel2=0 EndIf Text 0,0,Sqr((p(2)\x-p(1)\x)^2+(p(2)\y-p(1)\y)^2) Flip Cls Wend End |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group