Berechung von rechteck

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Meoqan

Betreff: Berechung von rechteck

BeitragSo, Feb 01, 2009 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
hi!

ich versuche seit nen paar stunden ein problem zu lösen... da mathe nie meine stärke war bitte ich um mithilfe!

das problem:

user posted image

1. von einem startpunkt rechne ich eine verschiebung dazu: +x , +y (kein problem)

2. von diesem verschiebungs punk rechne ich einfach cos und sin mal entferung dazu: x+(cos(winkel)*entferung), y+(sin(winkel)*entferung) (kein problem)

3. von da aus wirds schwer: die quadratischen zeichungen sind kein problem, aber die rechteckigen:
wie rechne ich von einem mittelpunkt, den eckpunkt von einem rechteck aus _WENN_ sich das bild um die eigene achse drehen soll?

also: vergessen wir punkt 1 und punk 2 und gehen von einem nullpunkt aus:
bis jetzt habe ich den winkel bestimmt und die entferung des ganzen rechtecks
dann habe ich durch cos und sin mal enferung den mittelpunkt bestimmt
dieses ergebnis durch 2 geteilt und das dann als size genommen von der quadratischrechung


leider kann ich den orginalcode nicht posten da er durch bank.peekshort(offset) sowieso nicht zu verstehen ist.

hier aber ein abgeänderter code:

Code: [AUSKLAPPEN]

            SetRotation((bildwinkel + -45 ))
            Local sx1:Float =  x
            Local sy1:Float =  y
            Local sx2:Float = sx1 + (Cos(2.winkel ) * entferung)
            Local sy2:Float = sy1 +  (sin(2.winkel ) * entferung)
            Local Awinkel:Float = -ATan2(0 - Float(bildsizex), 0 - Float(bildsizey)) - 90 Mod 360
            Local enferungx:Float = Cos(Awinkel) * (Sqr(0 - Float(bildsizex) ^ 2 + (0 - Float(bildsizey) ^ 2) / 2))
            Local enferungy:Float = sin(Awinkel) * (Sqr(0 - Float(bildsizex) ^ 2 + (0 - Float(bildsizey) ^ 2) / 2))
            Local sx3:Float = sx2 - (Cos(Float(bildwinkel) ) * (enferungx))
            Local sy3:Float = sy2 - (Sin(Float(bildwinkel) ) * (enferungy))


mfg meoqan
meine codes sind die essenz des bössen. nicht du veränderst meine codes sondern meine codes verändern dich!

Goodjee

BeitragSo, Feb 01, 2009 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
du kannst ja die länge der halben diagonale deines rechtecks ausrechnen, sowie den winkel diesier diagonale( atan2())

dann kannst du irgendeinen wert auf den winkel draufaddieren und mit sinus, cosinus, deiner länge der diagonale und dem geänderten winkel das rechteck rotieren
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Meoqan

BeitragSo, Feb 01, 2009 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube ich hab die lösung gefunden... jedenfalls tut das rechteck was es soll Smile

thx an Goodjee

ich habe ein kleines test prog gebaut und soweit geht das jetzt

Code: [AUSKLAPPEN]

SetGraphicsDriver GLMax2DDriver()
Graphics 700, 500

x:Float = 350
y:Float = 250

sizex = 100

sizey = 200
Repeat
   Cls
   sizey = sizey + 1
   If sizey > 400 Then sizey = 100
   winkel = winkel + 1 Mod 360
   SetRotation(winkel + -225)
   
   xwinkel:Float = ATan2(0 - sizex, 0 - sizey) + -225 Mod 360
   
   sx:Float = x + ((Cos(winkel - xwinkel) * Sqr((sizex) ^ 2 + (sizey) ^ 2)) / 2)
   sy:Float = y + ((Sin(winkel - xwinkel) * Sqr((sizex) ^ 2 + (sizey) ^ 2)) / 2)
   
   SetColor(255, 255, 255)
   DrawRect(sx, sy, sizex, sizey)
   
   SetRotation(0)
   SetColor(255, 0, 0)
   DrawRect(x, y, 3, 3)
   
   SetColor(0, 255, 0)
   DrawLine(sx + ((Cos(winkel - xwinkel + 180) * Sqr((sizex) ^ 2 + (sizey) ^ 2)) / 2), sy + ((Sin(winkel - xwinkel + 180) * Sqr((sizex) ^ 2 + (sizey) ^ 2)) / 2), sx, sy)
   
   
   SetColor(255, 255, 255)
   DrawText(xwinkel, 1, 1)
   
   
   Flip
Until KeyHit(KEY_ESCAPE)
End
meine codes sind die essenz des bössen. nicht du veränderst meine codes sondern meine codes verändern dich!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group