Matrix Rotation 2D
Verfasst: 24.04.2016 17:09
Hallo leute
Ich bin dabei für mein Grafik Proggy Rotation einzubinden
was Ich dann mit Matrizen realisieren wollte (anregung durch Stargates Drawing3D)
soweit so gut !
die Rotation klappt
die Spieglung nur in x richtung
die Scalierung auch nur in x richtung und mit Rotation wird diese verzehrt
hier noch wie ich das ganze dann zusammen Rechnen lasse
Zeichen lasse Ich dann so
Ich hoffe das Ihr oder Stargate meinen Denkfehler mir aufzeigen könnt
Da diese mein erster ausflug in die Welt der Matrizen ist
Gruss Silbersurfer
Ich bin dabei für mein Grafik Proggy Rotation einzubinden
was Ich dann mit Matrizen realisieren wollte (anregung durch Stargates Drawing3D)
soweit so gut !
die Rotation klappt
Code: Alles auswählen
Procedure Rotation(*matrix.Matrix2D,winkel.f)
*Matrix\A11 =Cos(winkel) : *matrix\A12 =-Sin(winkel)
*Matrix\A21 =Sin(winkel) : *matrix\A22 =Cos(winkel)
ProcedureReturn *matrix
EndProcedure
Code: Alles auswählen
Procedure Spieglung(*matrix.Matrix2D,spx=1,spy=1)
*Matrix\A11 =spx : *matrix\A12 =0
*Matrix\A21 =0 : *matrix\A22 =spy
ProcedureReturn *matrix
EndProcedure
Code: Alles auswählen
Procedure scale(*matrix.Matrix2D,scalex.f=1,scaley.f=1)
*Matrix\A11 =scalex : *matrix\A12 =0
*Matrix\A21 =0 : *matrix\A22 =scaley
ProcedureReturn *matrix
EndProcedure
Code: Alles auswählen
Procedure BerechnePoint(*matrix.Matrix2D,*point.vertex2D)
Protected Buffer.vertex2D
CopyMemory(*point, @Buffer, SizeOf(vertex2D))
*point\X =Buffer\X**matrix\A11 + Buffer\Y**matrix\A12
*point\y =Buffer\X**matrix\A21 + Buffer\Y**matrix\A22
ProcedureReturn *point
EndProcedure
Procedure matrix_Multi(*Use.Matrix2D, *Source.Matrix2d)
Protected Buffer.Matrix2D
CopyMemory(*Use, @Buffer, SizeOf(Matrix2d))
With *Use
\A11 = Buffer\A11 * *Source\A11 + Buffer\A21* *Source\A12
\A12 = Buffer\A12 * *Source\A11 + Buffer\A22* *Source\A12
\A21 = Buffer\A11 * *Source\A21 + Buffer\A21* *Source\A22
\A22 = Buffer\A12 * *Source\A22 + Buffer\A22* *Source\A22
EndWith
ProcedureReturn *Use
EndProcedure
Code: Alles auswählen
Procedure DrawImage2D(*this.Image2D,x,y)
If (Not *this) : ProcedureReturn #False : EndIf
Protected *pointer.Matrix2D,Scale.Matrix2D,Rotation.Matrix2D,Spieglung.Matrix2D
Protected *p1.vertex2D,p1.vertex2D,punkte.i,w.i,h.i,z.i,e.i,width.i,height.i
With *this
\PosX=x : \PosY=y
e = Sqr(\width*\width +\height*\height)
width=\width/2+(e-\width)/2
height=\height/2+(e-\height)/2
*pointer=scale (scale,\ScaleX,\ScaleY)
*pointer=Spieglung (Spieglung,\FlipX,\FlipY)
*pointer=Rotation (Rotation,Radian(\Winkel))
*pointer=matrix_Multi (Scale,Rotation)
*pointer=matrix_Multi (Spieglung,*pointer)
For h=y To y+e-1
For w=x To x+e-1
p1\x=w-x-width
p1\y=h-y-height
*p1=BerechnePoint(*pointer,p1)
*p1\x=*p1\x+\width/2
*p1\y=*p1\y+\height/2
If *p1\x>=0 And *p1\x<\width And *p1\y>=0 And *p1\y<\height
Plot(w,h,\color(Int(*p1\x),Int(*p1\y)))
EndIf
Next
Next
EndWith
EndProcedure
Da diese mein erster ausflug in die Welt der Matrizen ist
Gruss Silbersurfer