RotateTransform
Represents the rotate3d transformation.
using System;
namespace AngleSharp.Css.Values
{
internal sealed class RotateTransform : ITransform
{
private readonly float _x;
private readonly float _y;
private readonly float _z;
private readonly float _angle;
public float X => _x;
public float Y => _y;
public float Z => _z;
public float Angle => _angle;
internal RotateTransform(float x, float y, float z, float angle)
{
_x = x;
_y = y;
_z = z;
_angle = angle;
}
public static RotateTransform RotateX(float angle)
{
return new RotateTransform(1, 0, 0, angle);
}
public static RotateTransform RotateY(float angle)
{
return new RotateTransform(0, 1, 0, angle);
}
public static RotateTransform RotateZ(float angle)
{
return new RotateTransform(0, 0, 1, angle);
}
public TransformMatrix ComputeMatrix()
{
float num = 1 / (float)Math.Sqrt((double)(_x * _x + _y * _y + _z * _z));
float num2 = (float)Math.Sin((double)_angle);
float num3 = (float)Math.Cos((double)_angle);
float num4 = _x * num;
float num5 = _y * num;
float num6 = _z * num;
float num7 = 1 - num3;
return new TransformMatrix(num4 * num4 * num7 + num3, num5 * num4 * num7 - num6 * num2, num6 * num4 * num7 + num5 * num2, num4 * num5 * num7 + num6 * num2, num5 * num5 * num7 + num3, num6 * num5 * num7 - num4 * num2, num4 * num6 * num7 - num5 * num2, num5 * num6 * num7 + num4 * num2, num6 * num6 * num7 + num3, 0, 0, 0, 0, 0, 0);
}
}
}