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