public static D2D_MATRIX_4X4_F Rotation(float degrees, float centerX = 0, float centerY = 0, float centerZ = 0) { var magnitude = D2D1Functions.D2D1Vec3Length(centerX, centerY, centerZ); centerX /= magnitude; centerY /= magnitude; centerZ /= magnitude; var radians = degrees * (3.141592654f / 180.0f); D2D1Functions.D2D1SinCos(radians, out var sin, out var cos); var oneMinusCos = 1 - cos; return(new D2D_MATRIX_4X4_F( 1 + oneMinusCos * (centerX * centerX - 1), centerZ * sin + oneMinusCos * centerX * centerY, -centerY * sin + oneMinusCos * centerX * centerZ, 0, -centerZ * sin + oneMinusCos * centerY * centerX, 1 + oneMinusCos * (centerY * centerY - 1), centerX * sin + oneMinusCos * centerY * centerZ, 0, centerY * sin + oneMinusCos * centerZ * centerX, -centerX * sin + oneMinusCos * centerZ * centerY, 1 + oneMinusCos * (centerZ * centerZ - 1), 0, 0, 0, 0, 1 )); }
public static D2D_MATRIX_4X4_F RotationX(float degrees) { var radians = degrees * (3.141592654f / 180f); D2D1Functions.D2D1SinCos(radians, out var sin, out var cos); return(new D2D_MATRIX_4X4_F( 1, 0, 0, 0, 0, cos, sin, 0, 0, -sin, cos, 0, 0, 0, 0, 1 )); }