static SKMatrix44 GetMatrix(VoxelData voxelData, int size) { var r = 1.61803398875f; var d = size / (r * voxelData.size.MaxDimension); var tran = SKMatrix44.CreateTranslate(size * 0.5f, size * 0.5f, 0); var rotx = SKMatrix44.CreateRotationDegrees(1, 0, 0, -26f); var roty = SKMatrix44.CreateRotationDegrees(0, 1, 0, 45); var matrix = SKMatrix44.CreateIdentity(); matrix.PreConcat(tran); matrix.PreConcat(rotx); matrix.PreConcat(roty); matrix.PreScale(d, -d, d); matrix.PreTranslate(-voxelData.size.X * 0.5f, -voxelData.size.Z * 0.5f, voxelData.size.Y * 0.5f); return(matrix); }
public void Matrix44MapsScalars() { // translate var matrixTranslate = SKMatrix44.CreateTranslate(10, 20, 0); var resultTranslateZero = matrixTranslate.MapScalars(0, 0, 0, 1); var resultTranslateValue = matrixTranslate.MapScalars(5, 25, 0, 1); Assert.Equal(new[] { 10f, 20f, 0f, 1f }, resultTranslateZero); Assert.Equal(new[] { 15f, 45f, 0f, 1f }, resultTranslateValue); // rotate var matrixRotate = SKMatrix44.CreateRotationDegrees(0, 1, 0, 90); var resultRotateZero = matrixRotate.MapScalars(0, 0, 0, 1); var resultRotateValue = matrixRotate.MapScalars(5, 25, 0, 1); Assert.Equal(new[] { 0f, 0f, 0f, 1f }, resultRotateZero); Assert.Equal(new[] { 0f, 25f, -5f, 1f }, resultRotateValue.Select(v => (int)(v / EPSILON) * EPSILON)); }
public void Matrix44MapsPointsBulk() { var rnd = new Random(); var matrixTranslate = SKMatrix44.CreateTranslate(10, 25, 0); // generate some points var points = new SKPoint[1000]; var results = new SKPoint[points.Length]; for (int i = 0; i < points.Length; i++) { points[i] = new SKPoint(rnd.Next(1000) / 10f, rnd.Next(1000) / 10f); results[i] = new SKPoint(points[i].X + 10, points[i].Y + 25); } var actualResults = matrixTranslate.MapPoints(points); Assert.Equal(results, actualResults); }
public void Matrix44MapsPoints() { // translate var matrixTranslate = SKMatrix44.CreateTranslate(10, 20, 0); var resultTranslateZero = matrixTranslate.MapPoint(SKPoint.Empty); var resultTranslateValue = matrixTranslate.MapPoint(new SKPoint(5, 25)); Assert.Equal(new SKPoint(10f, 20f), resultTranslateZero); Assert.Equal(new SKPoint(15f, 45f), resultTranslateValue); // rotate var matrixRotate = SKMatrix44.CreateRotationDegrees(0, 1, 0, 90); var resultRotateZero = matrixRotate.MapPoint(SKPoint.Empty); var resultRotateValue = matrixRotate.MapPoint(new SKPoint(5, 25)); Assert.Equal(new SKPoint(0f, 0f), resultRotateZero); Assert.Equal(0, resultRotateValue.X, PRECISION); Assert.Equal(25, resultRotateValue.Y, PRECISION); }