public void IsIndentityTest_shouldReturnTrue()
        {
            var identityMatrix =
                DenseMatrix.CreateIdentity(10);

            Assert.IsTrue(MatrixFunctions.isIndentity(identityMatrix));
        }
Esempio n. 2
0
    public ShapeMatching(GameObject points)
    {
        //Instantiation method for shapematching object

        //Stores duplicates of points passed in to object as an array of original positions to be used in calculation
        particles = points;
        Transform [] original_transforms = particles.GetComponentsInChildren <Transform>();
        original_positions = new Vector3[original_transforms.Length - 1];
        for (int i = 1; i < original_transforms.Length; i++)         //i starts at one in order to avoid origin being added to positions
        {
            original_positions[i - 1] = particles.transform.InverseTransformPoint(original_transforms[i].position);
            cm0 += original_positions[i - 1];
        }
        cm0 /= original_positions.Length;

        //Precalculates Aqq from original positions
        aqq = new double [, ] {
            { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }
        };
        for (int i = 0; i < original_positions.Length; i++)
        {
            original_positions[i] -= cm0;
            MatrixFunctions.matrix_add_3x3(ref aqq, MatrixFunctions.vector3_covariance(original_positions[i], original_positions[i]));
        }


        //performs inverse operation on Aqq matrix as stated in Muller paper
        MatrixFunctions.matrixInverse3x3(ref aqq);
    }
    // Update is called once per frame
    void FixedUpdate()
    {
        if (deformation_frames > 0)
        {
            for (int i = 0; i < particles.Length; i++)
            {
                particles[i].displace(displacements[i]);
                displacements[i] /= 4;
            }
            cluster.recalculate();

            for (int i = 0; i < particles.Length; i++)
            {
                particles[i].movePoints(cluster.origin_cm);
            }

            for (int i = 0; i < vertices.Length; i++)
            {
                Vector3 x = particle_container.transform.TransformPoint(original_vertices[i] - cluster.origin_cm);
                vertices[i] = MatrixFunctions.matrix_multiply_1x3_by_3x3(x, cluster.getTransformation());
            }

            gameObject.transform.position = cluster.cm;

            rigidbody.centerOfMass = cluster.cm;
            mesh.vertices          = vertices;

            deformation_frames--;
        }

        prev_velocity = rigidbody.velocity;
    }
Esempio n. 4
0
        public override Matrix GetHandleMatrix(SETItem item)
        {
            Matrix matrix = Matrix.Identity;

            MatrixFunctions.Translate(ref matrix, item.Position);

            return(matrix);
        }
        public void IsIndentityTest_shouldReturnFalse()
        {
            var notIdentityMatrix =
                DenseMatrix.OfArray(new[, ] {
                { 1.1, 2, 3 }, { 1, 2, 3 }
            });

            Assert.IsFalse(MatrixFunctions.isIndentity(notIdentityMatrix));
        }
Esempio n. 6
0
        public override Matrix GetHandleMatrix(SETItem item)
        {
            Matrix matrix = Matrix.Identity;

            MatrixFunctions.Translate(ref matrix, item.Position.X, item.Position.Y + 0.5f, item.Position.Z);
            MatrixFunctions.RotateY(ref matrix, item.Rotation.Y);

            return(matrix);
        }
Esempio n. 7
0
        public override Matrix GetHandleMatrix(SETItem item)
        {
            Matrix matrix = Matrix.Identity;

            MatrixFunctions.Translate(ref matrix, item.Position);
            MatrixFunctions.RotateObject(ref matrix, item.Rotation.X & 0xC000, item.Rotation.Y, 0);

            return(matrix);
        }
Esempio n. 8
0
    public void updatePositions()
    {
        double [,] t = cluster.getTransformation();
        for (int i = 0; i < vertices.Length; i++)
        {
            vertices[i] = MatrixFunctions.matrix_multiply_1x3_by_3x3(vertices[i], t);
        }

        mesh.vertices = vertices;
    }
Esempio n. 9
0
        public override Matrix GetHandleMatrix(SETItem item)
        {
            Matrix matrix = Matrix.Identity;
            float  Scale  = item.Scale.X + 1.0f;

            MatrixFunctions.Translate(ref matrix, item.Position);
            MatrixFunctions.RotateY(ref matrix, item.Rotation.Y);
            MatrixFunctions.Scale(ref matrix, Scale, Scale, Scale);

            return(matrix);
        }
Esempio n. 10
0
        public override Matrix GetHandleMatrix(SETItem item)
        {
            Matrix matrix = Matrix.Identity;

            MatrixFunctions.Translate(ref matrix, item.Position);
            MatrixFunctions.RotateY(ref matrix, (ushort)(item.Rotation.Y + 0x8000));
            MatrixFunctions.RotateZ(ref matrix, item.Rotation.Z);
            MatrixFunctions.RotateX(ref matrix, item.Rotation.X);


            return(matrix);
        }
Esempio n. 11
0
        public override Matrix GetHandleMatrix(SETItem item)
        {
            Matrix matrix = Matrix.Identity;

            MatrixFunctions.Translate(ref matrix, item.Position);
            MatrixFunctions.RotateObject(ref matrix, item.Rotation);
            float size = item.Scale.X + 1.0f;

            MatrixFunctions.Scale(ref matrix, size, size, size);

            return(matrix);
        }
Esempio n. 12
0
    void run_test()
    {
        //randomize rotation of control spheres
        Quaternion rot = Random.rotation;

        print(rot.eulerAngles);
        duplicate.transform.rotation = rot;

        //Stores positions of particles post rotation
        Vector3 []   new_positions;
        Transform [] temp = duplicate.GetComponentsInChildren <Transform>();        //Get components in children creates unwanted first element in array, needs compensation
        new_positions = new Vector3[temp.Length - 1];

        //Instantiates spheres at particle locations
        destroy_markers();
        markers = new GameObject[temp.Length - 1];
        for (int i = 1; i < temp.Length; i++)         //i starts at one to compensate for problem descibed earlier
        {
            new_positions[i - 1] = duplicate.transform.TransformPoint(temp[i].position) + new Vector3(Random.Range(-randomness, randomness), Random.Range(-randomness, randomness), Random.Range(-randomness, randomness));;
            GameObject t = Instantiate(marker, new_positions[i - 1], Quaternion.identity);
            t.transform.parent = duplicate.transform;             //Parents new objects under Duplicate_Points
        }

        //ENTERY INTO SHAPE MATCH
        double [,] rotation_matrix;
        if (linear)
        {
            rotation_matrix = shape_match.generate_linear_matrix(new_positions, beta);
        }
        else
        {
            rotation_matrix = shape_match.generate_rotation_matrix(new_positions);
        }

        //print_matrix(rotation_matrix);

        //Multiplies rotation matrix recieved by shape matching to mesh's vertices
        Vector3 [] new_vertices = new Vector3 [vertices.Length];

        for (int i = 0; i < vertices.Length; i++)
        {
            new_vertices[i] = MatrixFunctions.matrix_multiply_1x3_by_3x3(vertices[i], rotation_matrix);
        }

        //Assigns altered vertice positions to object
        Mesh mesh = gameObject.GetComponent <MeshFilter>().mesh;

        mesh.vertices = new_vertices;
        // flipNormals();
        mesh.RecalculateNormals();
    }
Esempio n. 13
0
		public override Matrix GetHandleMatrix(SETItem item)
		{
			Matrix matrix = Matrix.Identity;

			MatrixFunctions.Translate(ref matrix, item.Position);

			int RotY = item.Rotation.Y + 34;
			if ((RotY + 24) != 0x4000)
			{
				MatrixFunctions.RotateY(ref matrix, (RotY + 24) - 0x4000);
			}

			return matrix;
		}
Esempio n. 14
0
    public double [,] generate_linear_matrix(Vector3 [] new_positions, double beta)
    {
        double [,] r = generate_rotation_matrix(new_positions);
        double [,] a = MatrixFunctions.matrixMultiply3x3(apq, aqq);
        //Rotation_test.print_matrix(aqq);


        double determinant = alglib.rmatrixdet(a);

        determinant = Mathf.Pow((float)determinant, 1.0f / 3.0f);
        MatrixFunctions.scalar_multiply(ref a, beta / determinant);
        MatrixFunctions.scalar_multiply(ref r, 1 - beta);

        MatrixFunctions.matrix_add_3x3(ref a, r);

        return(a);
    }
Esempio n. 15
0
 void OnCollisionEnter(Collision collision)
 {
     if (cooldown_remaining > 0)
     {
         foreach (ContactPoint contact in collision.contacts)
         {
             for (int i = 0; i < particles.Length; i++)
             {
                 float   d     = ((particles[i].transform.position - contact.point).magnitude);
                 Vector3 force = MatrixFunctions.vector_scalar(collision.impulse, Time.fixedDeltaTime * (1 + (d * d * d)));
                 particles[i].set_force(force);
             }
         }
         cooldown_remaining = cooldown_frames;
     }
     else
     {
         cooldown_remaining--;
     }
 }
Esempio n. 16
0
        public override Matrix GetHandleMatrix(SETItem item)
        {
            Matrix matrix = Matrix.Identity;

            MatrixFunctions.Translate(ref matrix, item.Position);

            int x = item.Rotation.X;
            int y = item.Rotation.Y;

            if (!item.Scale.IsEmpty)
            {
                (item.Position - item.Scale).GetRotation(out x, out y);
            }

            MatrixFunctions.RotateY(ref matrix, x);
            MatrixFunctions.RotateY(ref matrix, y);
            MatrixFunctions.RotateY(ref matrix, item.Rotation.Z);

            return(matrix);
        }
Esempio n. 17
0
    public double [,] generate_rotation_matrix(Vector3 [] new_positions)
    {
        //3x3 matrix of zeros used for summation
        apq = new double [, ] {
            { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }
        };
        for (int i = 0; i < original_positions.Length; i++)
        {
            MatrixFunctions.matrix_add_3x3(ref apq, MatrixFunctions.vector3_covariance(new_positions[i], original_positions[i]));
            //CHECKED: new positions are different from old ones, seem consitent
        }
        //CHECKED THROUGH THIS POINT
        s = MatrixFunctions.matrixMultiply3x3(MatrixFunctions.transpose3x3(apq), apq);

        MatrixFunctions.matrixInverseSquareRoot(ref s);

        double [,] r = MatrixFunctions.matrixMultiply3x3(apq, s);

        return(r);
    }
Esempio n. 18
0
        public Matrix GetLocalAxes(out Vector3 Up, out Vector3 Right, out Vector3 Look)
        {
            Matrix transform = Matrix.Identity;

            try
            {
                MatrixFunctions.RotateXYZ(ref transform, Rotation.X, Rotation.Y, Rotation.Z);
            }
            catch (NotSupportedException)
            {
                Console.WriteLine("Certain Item types don't support rotations. This can be ignored.");
            }

            Up    = new Vector3(0, 1, 0);
            Look  = new Vector3(0, 0, 1);
            Right = new Vector3(1, 0, 0);

            Up    = Vector3.TransformCoordinate(Up, transform);
            Look  = Vector3.TransformCoordinate(Look, transform);
            Right = Vector3.TransformCoordinate(Right, transform);

            return(transform);
        }
Esempio n. 19
0
    public void movePoints(Vector3 cm0)
    {
        Vector3 x = gameObject.transform.parent.transform.TransformPoint(original_position - cm0);

        gameObject.transform.position = MatrixFunctions.matrix_multiply_1x3_by_3x3(x, transformation_matrix);
    }
 public void IsIndentityTest_shouldReturnTrue()
 {
     Assert.IsTrue(MatrixFunctions.isIndentity(_identityMatrix));
 }
 public void IsIndentityTest_shouldReturnFalse()
 {
     Assert.IsFalse(MatrixFunctions.isIndentity(_notIdentityMatrix));
 }
Esempio n. 22
0
        //       protected override Band_Data Get_ChemPot_From_External(Band_Data density)
        //       {
        //           Save_Data(density, dens_filename);
        //
        //           return Get_Data_From_External(flexpde_script, initcalc_result_filename);
        //       }

        /// <summary>
        /// Calculates the Laplacian for the given band structure of the input potential
        /// ie. returns d(eps * d(input))
        /// NOTE: the input should be a potential so make sure you divide all band energies by q_e
        /// </summary>
        public Band_Data Calculate_Phi_Laplacian(Band_Data input)
        {
            DoubleTriDiagMatrix lap_mat = Generate_Laplacian(exp.Layers);

            return(new Band_Data(MatrixFunctions.Product(lap_mat, input.vec)));
        }
Esempio n. 23
0
        private void BuildNextRandom()
        {
            NowRandomComponent = (Component)random.Next(0, 2);

            switch (NowRandomComponent.ToString())
            {
            case "Матрицы":
            {
                NowRandomMatrixFunction = (MatrixFunctions)random.Next(0, 2);
                switch (NowRandomMatrixFunction.ToString())
                {
                case "Sub":
                {
                    dataGridViews = new DataGridView[3];
                    dataGridViews = MatrixBuilder.BuildDefaultThreeMatrix(random.Next(1, 6), random.Next(1, 6), dataGridViews);
                    QuestionLabel = CreateQuestionLabel("Вычитение");
                    Controls.Add(QuestionLabel);
                    PrevRandomComponent = 0;
                    InitialyzeComponents(dataGridViews);
                    break;
                }

                case "Mul":
                {
                    dataGridViews = new DataGridView[3];
                    int Count = random.Next(1, 6);
                    dataGridViews = MatrixBuilder.BuildDefaultThreeMatrix(Count, Count, dataGridViews);
                    QuestionLabel = CreateQuestionLabel("Умножение");
                    Controls.Add(QuestionLabel);
                    PrevRandomComponent = 0;
                    InitialyzeComponents(dataGridViews);
                    break;
                }
                }
                break;
            }

            case "Уравнения":
            {
                NowEquFunction = random.Next(0, 0);
                FirstB         = random.Next(-10, 0);
                SecondB        = random.Next(0, 11);
                switch (NowEquFunction)
                {
                case 0:
                {
                    koef1      = random.Next(-1, 10);
                    AnswerText = CreateTextBox();
                    Controls.Add(AnswerText);
                    QuestionLabel = CreateQuestionLabel("Cos(x-" + koef1 + "). Границы: " + FirstB + ", " + SecondB);
                    Controls.Add(QuestionLabel);
                    PrevRandomComponent = (Component)1;
                    break;
                }
                    //case 2:
                    //    {

                    //    }
                    //case 3:
                    //    {

                    //    }
                    //case 4:
                    //    {

                    //    }
                }
                break;
            }
            }



            QuestionCounter++;
        }
 DoubleComplexMatrix Product(DoubleHermitianMatrix A, DoubleComplexMatrix B)
 {
     return(new DoubleComplexMatrix(NMathFunctions.Product(MatrixFunctions.ToGeneralMatrix(A), B)));
 }