/// <summary> /// Flattens a <see cref="Vector4"/> into an array of floats, similar to how the <see cref="IFlattenableData{T}"/> /// interface works. /// </summary> /// <param name="vector4">The vector to flatten.</param> /// <returns>An array of floats.</returns> public static float[] Flatten(this Vector4 vector4) { float[] outArr = new float[4]; vector4.CopyTo(outArr); return(outArr); }
public void Vector4CopyToTest() { Vector4 v1 = new Vector4(2.5f, 2.0f, 3.0f, 3.3f); Single[] a = new Single[5]; Single[] b = new Single[4]; v1.CopyTo(a, 1); v1.CopyTo(b); Assert.Equal(0.0f, a[0]); Assert.Equal(2.5f, a[1]); Assert.Equal(2.0f, a[2]); Assert.Equal(3.0f, a[3]); Assert.Equal(3.3f, a[4]); Assert.Equal(2.5f, b[0]); Assert.Equal(2.0f, b[1]); Assert.Equal(3.0f, b[2]); Assert.Equal(3.3f, b[3]); }
public void FloatLayout() { var color = new RgbaVector(1F, 2, 3, 4); Vector4 colorBase = Unsafe.As <RgbaVector, Vector4>(ref Unsafe.Add(ref color, 0)); float[] ordered = new float[4]; colorBase.CopyTo(ordered); Assert.Equal(1, ordered[0]); Assert.Equal(2, ordered[1]); Assert.Equal(3, ordered[2]); Assert.Equal(4, ordered[3]); }
Vector4[] Reflect(Vector4[] a, float v1, float v2, int n) { Vector4[] a1 = new Vector4[a.Length]; Vector4[] a2 = new Vector4[a.Length]; a.CopyTo(a1, 0); a.CopyTo(a2, 0); for (var i = 0; i < a.Length; i++) { a1[i][n] = v1; a2[i][n] = v2; } Vector4[].Reverse(a2); a = new Vector4[2 * a.Length]; a1.CopyTo(a, 0); a2.CopyTo(a, a1.Length); return(a); }
public void Vector4CopyToTest() { Vector4 v1 = new Vector4(2.5f, 2.0f, 3.0f, 3.3f); float[] a = new float[5]; float[] b = new float[4]; Assert.Throws<NullReferenceException>(() => v1.CopyTo(null, 0)); Assert.Throws<ArgumentOutOfRangeException>(() => v1.CopyTo(a, -1)); Assert.Throws<ArgumentOutOfRangeException>(() => v1.CopyTo(a, a.Length)); Assert.Throws<ArgumentException>(() => v1.CopyTo(a, a.Length - 2)); v1.CopyTo(a, 1); v1.CopyTo(b); Assert.Equal(0.0f, a[0]); Assert.Equal(2.5f, a[1]); Assert.Equal(2.0f, a[2]); Assert.Equal(3.0f, a[3]); Assert.Equal(3.3f, a[4]); Assert.Equal(2.5f, b[0]); Assert.Equal(2.0f, b[1]); Assert.Equal(3.0f, b[2]); Assert.Equal(3.3f, b[3]); }
Vector4[] Reflect(Vector4[] a, float v1, float v2, int n) { Vector4[] a1 = new Vector4[ a.Length ]; Vector4[] a2 = new Vector4[ a.Length ]; a.CopyTo( a1, 0 ); a.CopyTo( a2, 0 ); for( var i=0; i<a.Length; i++ ){ a1[i][n] = v1; a2[i][n] = v2; } Vector4[].Reverse( a2 ); a = new Vector4[ 2 * a.Length ]; a1.CopyTo( a, 0 ); a2.CopyTo( a, a1.Length ); return a; }