We werken met een coordinatenstelsel waarin elk punt aangegeven wordt door een x-coordinaat en een y-coordinaat. Notatie punt P = (x,y).
Zie bv
http://nl.wikipedia.org/wiki/Cartesisch ... tenstelsel, plaatje rechtsboven.
Dit werkt met hetzelfde principe als met je pixelcoordinaten x en y.
Het roteren gaat hierin eenvoudig om de oorsprong O = (0,0).
Daar nemen we dan in eerste instantie het centrum van de rechthoek.
De hoekpunten A, B, C en D van je rechthoek kan je nu aangeven als:
A = (-l/2, -b/2)
B = (l/2, -b/2)
C = (l/2, b/2)
D = (-l/2, b/2)
waarbij l=lengte en b=breedte van je rechthoek
In jouw voorbeeld: rechthoek = 400 x 100:
A=(-200, -50)
B=(200, -50)
C=(200, 50)
D=(-200, 50)
Het centrum = middelpunt = O = (0, 0)
Teken hiervan zelf svp even een plaatje.
Als we vervolgens deze rechthoek roteren om O over alpha graden, kunnen we de volgende rotatieformules gebruiken:
Voor elk punt P = (x,y) geldt dat dit door deze rotatie afgebeeld wordt op punt P ' = (x', y'),
waarbij:
x' = x * cos(alpha) - y * sin(alpha)
y' = x * sin(alpha) + y * cos(alpha)
(zie bv
http://nl.wikipedia.org/wiki/Rotatiematrix)
Voorbeeld:
als we over 45 graden roteren (= 45 graden tegen de klok in), dan wordt het beeld van C:
x' = 200*cos(45) - 50*sin(45) = 106.0660...
y' = 200*sin(45) + 50*cos(45) = 176.7766...
Dus: C = (200, 50) wordt afgebeeld op C ' = (106.0660, 176.7766)
De andere geroteerde hoekpunten vind je op dezelfde manier.
Dan rest nog de translatie van het middelpunt = O naar M = (mx, my) = (300, 300):
bij de x-coordinaten van al je punten tel je mx op,
bij de y-coordinaten van al je punten tel je my op.
Het verschoven C ' = C '' = (106.0660 + 300, 176.7766 + 300) = (406.0660, 476.7766).
En als je de coordinaten van de hoekpunten weet, hoef je daartussen alleen nog maar lijnen te tekenen.
Dit is alles.
Let nog wel op dat:
(1) de meeste programmeertalen in radialen werken ipv graden
(2) in de y-as van een bitmap de pixels omgekeerd (van boven naar beneden) genummerd worden
(3) omzetten van gebroken getal naar geheel getal in veel programmeertalen afkappen is, dus al je de coordinaten wilt omzetten naar gehele waarden (integers) kan je er het beste eerst 0.5 bij optellen en dan afkappen (hierdoor ontstaat het normale afronden) - tenzij jouw taal een echte round() functie kent.
Lukt het zo?