幾何学幾何学
平面上の同次変換行列単体テスト; 2D Homogeneous Unit Test

概要
平面上の同次変換行列の単体テスト
テスト対象の平面上の同次変換行列はこちら


ソースコード

namespace Geometry.Geometry2D.Tests {
    [TestClass()]
    public class Matrix2DTests {
        [TestMethod()]
        public void Matrix2DTest() {
            Matrix2D matrix1 = new Matrix2D(1, 2, 3, 4);
            Matrix2D matrix2 = new Matrix2D(1, 2, 3, 4, 5, 6, 7, 8, 9);

            Assert.AreEqual(matrix1.E11, 1);
            Assert.AreEqual(matrix1.E12, 2);
            Assert.AreEqual(matrix1.E13, 0);
            Assert.AreEqual(matrix1.E21, 3);
            Assert.AreEqual(matrix1.E22, 4);
            Assert.AreEqual(matrix1.E23, 0);
            Assert.AreEqual(matrix1.E31, 0);
            Assert.AreEqual(matrix1.E32, 0);
            Assert.AreEqual(matrix1.E33, 1);

            Assert.AreEqual(matrix2.E11, 1);
            Assert.AreEqual(matrix2.E12, 2);
            Assert.AreEqual(matrix2.E13, 3);
            Assert.AreEqual(matrix2.E21, 4);
            Assert.AreEqual(matrix2.E22, 5);
            Assert.AreEqual(matrix2.E23, 6);
            Assert.AreEqual(matrix2.E31, 7);
            Assert.AreEqual(matrix2.E32, 8);
            Assert.AreEqual(matrix2.E33, 9);
        }

        [TestMethod()]
        public void TransposeTest() {
            Matrix2D matrix1 = new Matrix2D(1, 2, 3, 4, 5, 6, 7, 8, 9).Transpose;

            Assert.AreEqual(matrix1, new Matrix2D(1, 4, 7, 2, 5, 8, 3, 6, 9));
        }

        [TestMethod()]
        public void OperatorTest() {
            Matrix2D matrix1 = new Matrix2D(1, 2, 3, 4, 5, 6, 7, 8, 9);
            Matrix2D matrix2 = new Matrix2D(1, 3, 5, 7, 9, 2, 4, 6, 8);
            Matrix2D matrix3 = new Matrix2D(1, 2, 3, 4, 5, 6, 7, 8, 9);

            Assert.AreEqual(+matrix1, new Matrix2D(1, 2, 3, 4, 5, 6, 7, 8, 9));
            Assert.AreEqual(-matrix1, new Matrix2D(-1, -2, -3, -4, -5, -6, -7, -8, -9));
            Assert.AreEqual(matrix1 + matrix2, new Matrix2D(2, 5, 8, 11, 14, 8, 11, 14, 17));
            Assert.AreEqual(matrix1 - matrix2, new Matrix2D(0, -1, -2, -3, -4, 4, 3, 2, 1));
            Assert.AreEqual(matrix2 - matrix1, new Matrix2D(0, 1, 2, 3, 4, -4, -3, -2, -1));
            Assert.AreEqual(matrix1 * matrix2, new Matrix2D(27, 39, 33, 63, 93, 78, 99, 147, 123));
            Assert.AreEqual(matrix2 * matrix1, new Matrix2D(48, 57, 66, 57, 75, 93, 84, 102, 120));
            Assert.AreEqual(2 * matrix1, new Matrix2D(2, 4, 6, 8, 10, 12, 14, 16, 18));
            Assert.AreEqual(matrix1 * 2, new Matrix2D(2, 4, 6, 8, 10, 12, 14, 16, 18));
            Assert.AreEqual(matrix1 / 2, new Matrix2D(0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5));

            Assert.AreEqual(matrix1 == matrix3, true);
            Assert.AreEqual(matrix2 == matrix3, false);
            Assert.AreEqual(matrix1 != matrix2, true);
        }

        [TestMethod()]
        public void EqualsTest() {
            Matrix2D matrix1 = new Matrix2D(1, 2, 3, 4, 5, 6, 7, 8, 9);
            Matrix2D matrix2 = new Matrix2D(1, 3, 5, 7, 9, 2, 4, 6, 8);
            Matrix2D matrix3 = new Matrix2D(1, 2, 3, 4, 5, 6, 7, 8, 9);

            Assert.AreEqual(matrix1.Equals(matrix1), true);
            Assert.AreEqual(matrix1.Equals(matrix2), false);
            Assert.AreEqual(matrix1.Equals(matrix3), true);
            Assert.AreEqual(matrix1.Equals(null), false);
        }

        [TestMethod()]
        public void StaticMatrixTest() {
            Matrix2D matrix1 = Matrix2D.Zero;
            Matrix2D matrix2 = Matrix2D.Identity;
            Matrix2D matrix3 = Matrix2D.Invalid;

            Assert.AreEqual(matrix1.E11, 0);
            Assert.AreEqual(matrix1.E12, 0);
            Assert.AreEqual(matrix1.E13, 0);
            Assert.AreEqual(matrix1.E21, 0);
            Assert.AreEqual(matrix1.E22, 0);
            Assert.AreEqual(matrix1.E23, 0);
            Assert.AreEqual(matrix1.E31, 0);
            Assert.AreEqual(matrix1.E32, 0);
            Assert.AreEqual(matrix1.E33, 0);

            Assert.AreEqual(matrix2.E11, 1);
            Assert.AreEqual(matrix2.E12, 0);
            Assert.AreEqual(matrix2.E13, 0);
            Assert.AreEqual(matrix2.E21, 0);
            Assert.AreEqual(matrix2.E22, 1);
            Assert.AreEqual(matrix2.E23, 0);
            Assert.AreEqual(matrix2.E31, 0);
            Assert.AreEqual(matrix2.E32, 0);
            Assert.AreEqual(matrix2.E33, 1);

            Assert.AreEqual(double.IsNaN(matrix3.E11), true);
            Assert.AreEqual(double.IsNaN(matrix3.E12), true);
            Assert.AreEqual(double.IsNaN(matrix3.E13), true);
            Assert.AreEqual(double.IsNaN(matrix3.E21), true);
            Assert.AreEqual(double.IsNaN(matrix3.E22), true);
            Assert.AreEqual(double.IsNaN(matrix3.E23), true);
            Assert.AreEqual(double.IsNaN(matrix3.E31), true);
            Assert.AreEqual(double.IsNaN(matrix3.E32), true);
            Assert.AreEqual(double.IsNaN(matrix3.E33), true);
        }

        [TestMethod()]
        public void RotateTest() {
            Vector2D vector = new Vector2D(1, 2);

            Assert.AreEqual((Matrix2D.Rotate(0) * vector - new Vector2D(1, 2)).Norm < 1e-12, true);
            Assert.AreEqual((Matrix2D.Rotate(Math.PI / 2) * vector - new Vector2D(-2, 1)).Norm < 1e-12, true);
            Assert.AreEqual((Matrix2D.Rotate(Math.PI) * vector - new Vector2D(-1, -2)).Norm < 1e-12, true);
            Assert.AreEqual((Matrix2D.Rotate(Math.PI * 3 / 2) * vector - new Vector2D(2, -1)).Norm < 1e-12, true);
        }

        [TestMethod()]
        public void ScaleTest() {
            Vector2D vector = new Vector2D(1, 2);

            Assert.AreEqual(Matrix2D.Scale(2, 3) * vector, new Vector2D(2, 6));
        }

        [TestMethod()]
        public void MoveTest() {
            Vector2D vector = new Vector2D(1, 2);

            Assert.AreEqual(Matrix2D.Move(2, -3) * vector, new Vector2D(3, -1));
        }

        [TestMethod()]
        public void ToStringTest() {
            Matrix2D matrix1 = new Matrix2D(1, 2, 3, 4, 5, 6, 7, 8, 9);

            Assert.AreEqual(matrix1.ToString(), "{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }");
        }
    }
}

関連項目
平面上の同次変換行列

ライブラリライブラリ
確率統計確率統計
線形代数線形代数
幾何学幾何学
最適化最適化
微分方程式微分方程式
画像処理画像処理
補間補間
機械学習機械学習
クラスタリングクラスタリング
パズルゲーム・パズル
未分類未分類