rechteckt (4 eckpunkte) drehen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

5k41

Betreff: rechteckt (4 eckpunkte) drehen

BeitragSa, Mai 27, 2006 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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

TheShadow

Moderator

BeitragSa, Mai 27, 2006 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 27, 2006 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 27, 2006 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragSa, Mai 27, 2006 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Na ganz einfach Very Happy

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 Very Happy

Goodjee

BeitragSa, Mai 27, 2006 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 27, 2006 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Goodjee hat Folgendes geschrieben:
satz des pytagoras: schnittstelle=Wurzel(a²+b²)


richtig sag ich ja Very Happy

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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group