Ist Punkt in rotierten Rechteck
Verfasst: 29.12.2012 15:35
Hallo PBler,
die Lösung dafür ist relativ simpel. Der Punkt (Cursor) wird zurückgedreht, darauf folgt eine simple bounding Box Prüfung. Leider ist die Funktion zur Rotation scheinbar recht CPU lastig wenn sie permanent aufgerufen wird.
Vielleicht finden sich ja ASM Gurus die es beschleunigen können.
Wichtig ist aber auch den Rotations-Punkt festlegen zu können.
lG,
die Lösung dafür ist relativ simpel. Der Punkt (Cursor) wird zurückgedreht, darauf folgt eine simple bounding Box Prüfung. Leider ist die Funktion zur Rotation scheinbar recht CPU lastig wenn sie permanent aufgerufen wird.
Vielleicht finden sich ja ASM Gurus die es beschleunigen können.
Code: Alles auswählen
Structure POINTF
x.f
y.f
EndStructure
Procedure Rotate(*PointF.POINTF, angle.f, *Center.POINTF=#Null)
Protected x.f, y.f
Protected Sin.f = Sin(Radian(angle)), Cos.f = Cos(Radian(angle))
If *Center
x = *PointF\x - *Center\x
y = *PointF\y - *Center\y
EndIf
*PointF\x = Cos*x - Sin*y
*PointF\y = Sin*x + Cos*y
If *Center
*PointF\x + *Center\x
*PointF\y + *Center\y
EndIf
ProcedureReturn *PointF
EndProcedure
Define Mouse.POINTF : Mouse\x = 10 : Mouse\y = 10
Define Center.POINTF : Center\x = 0 : Center\y = 0
Rotate(@Mouse, 45, @Center)
Debug Mouse\x
Debug Mouse\y