Пример #1
0
        public static (Vector2F position, Vector2F size, float angle, Vector2F center) TransformArea(RectF area, Matrix44F transform)
        {
            var pos3 = new Vector3F(area.Position.X, area.Position.Y, 0.0f);
            var a    = new Vector3F(area.Position.X + area.Size.X, area.Position.Y, 0.0f);
            var b    = new Vector3F(area.Position.X, area.Position.Y + area.Size.Y, 0.0f);

            var pos3t = transform.Transform3D(pos3);
            var at    = transform.Transform3D(a);
            var bt    = transform.Transform3D(b);

            var aDiff = at - pos3t;
            var bDiff = bt - pos3t;

            var position = new Vector2F(pos3t.X, pos3t.Y);
            var size     = new Vector2F(aDiff.Length, bDiff.Length);
            var angle    = MathF.Atan2(aDiff.Y, aDiff.X);
            var center3  = pos3t + at * 0.5f + bt * 0.5f;

            return(position, size, angle, new Vector2F(center3.X, center3.Y));
        }