#include "UnitTestSharpHLSL.fx" #include "Affine2DMatrix.fxh" float3x3 Identity = { 1, 0, 0, 0, 1, 0, 0, 0, 1, }; void AreTransformsInverseOfEachOther(float2x3 WCV, float2x3 WCV_Inverse) { float3x3 WCV_Full = { WCV, 0, 0, 1, }; float3x3 WCV_Inverse_Full = { WCV_Inverse, 0, 0, 1, }; CheckEqual(Identity, mul(WCV_Full, WCV_Inverse_Full)); CheckEqual(Identity, mul(WCV_Inverse_Full, WCV_Full)); CheckEqual(Identity, mul(transpose(WCV_Full), transpose(WCV_Inverse_Full))); CheckEqual(Identity, mul(transpose(WCV_Inverse_Full), transpose(WCV_Full))); } void MatrixInversion_Identity() { float2x3 WCV = { 1, 0, 0, 0, 1, 0, }; float2x3 WCV_Inverse = Invert2DAffine(WCV); AreTransformsInverseOfEachOther(WCV, WCV_Inverse); } void MatrixInversion_Translate() { float2x3 WCV = { 1, 0, 3, 0, 1, -4, }; float2x3 WCV_Inverse = Invert2DAffine(WCV); AreTransformsInverseOfEachOther(WCV, WCV_Inverse); } void MatrixInversion_Orientation() { float2x3 WCV = { 0, 1, 0, 1, 0, 0, }; float2x3 WCV_Inverse = Invert2DAffine(WCV); AreTransformsInverseOfEachOther(WCV, WCV_Inverse); } void MatrixInversion_OrientationAndTranslate() { float2x3 WCV = { 0, 1, 3, 1, 0, -4, }; float2x3 WCV_Inverse = Invert2DAffine(WCV); AreTransformsInverseOfEachOther(WCV, WCV_Inverse); } void MatrixInversion_MoreComplex() { float2x3 WCV = { .707, .707, 3, -.707, .707, -4, }; float2x3 WCV_Inverse = Invert2DAffine(WCV); float3x3 WCV_Full = { WCV, 0, 0, 1, }; float3x3 WCV_Inverse_Full = { WCV_Inverse, 0, 0, 1, }; float2x3 diff = mul(WCV_Full, WCV_Inverse_Full) - Identity; Check(length(diff[0]) + length(diff[1]) < 1e-5); //AreTransformsInverseOfEachOther(WCV, WCV_Inverse); } void MatrixInversion_Complete() { float2x3 WCV = { 7, -11, 5, -3, 1, -4, }; float2x3 WCV_Inverse = Invert2DAffine(WCV); AreTransformsInverseOfEachOther(WCV, WCV_Inverse); //Check(false); //!!!!!! This is not getting tested. }