La estructura de matriz da una salida incorrecta -- # campo con matrix campo con vector camp Relacionados El problema

Matrix struct gives wrong output


4
vote

problema

Español

En .NET Framework 4.6.2 (y anteriormente), allí la estructura Matrix4x4 en el espacio de nombres public partial class Model { public Model() { this.CollectionOfItems= new HashSet<Items>(); } public int Id{ get; set; } public virtual ICollection<Items> CollectionOfItems{ get; set; } } 9. La estructura tiene una propiedad Intent0 que obviamente se usa para almacenar la parte de traducción. Sin embargo, al usar esta propiedad, almacena los valores en la última fila

Ejemplo:

  Intent111  

produce la siguiente matriz:

1, 0, 0, 0

0, 1, 0, 0

0, 0, 1, 0

1, 2, 3, 1

pero debería ser

1, 0, 0, 1

0, 1, 0, 2

0, 0, 1, 3

0, 0, 0, 1

en mi opinión.

¿Es este un error o hay algo que me equivoco por completo?

Original en ingles

In .Net Framework 4.6.2 (and earlier), there the Matrix4x4 struct in the System.Numerics namespace. The struct has a property Translation which is obviously used to store the translational part. However, when using this property, it stores the values in the last row

Example:

var test = Matrix4x4.CreateTranslation(new Vector3(1, 2, 3)); 

yields the following matrix:

1, 0, 0, 0

0, 1, 0, 0

0, 0, 1, 0

1, 2, 3, 1

But it should be

1, 0, 0, 1

0, 1, 0, 2

0, 0, 1, 3

0 ,0 ,0 ,1

in my opinion.

Is this a bug or is there something I completely got wrong?

        
         
         

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 

La matriz de traducción está "transpuesta" porque System.numerics define fila vectores:

para transformaciones de matriz, el vector2, vector3 y vector4 Las instancias están representadas como filas: un vector V se transforma por un Matriz M con multiplicación de VM.

( fuente )

Las matemáticas son las siguientes:

              / 1 0 0 0  [a b c 1] * | 0 1 0 0 | = [a+A b+B c+C 1]             | 0 0 1 0 |              A B C 1 /   
 

The translation matrix is "transposed" because System.Numerics defines row vectors:

For matrix transformations, the Vector2, Vector3, and Vector4 instances are represented as rows: a vector v is transformed by a matrix M with vM multiplication.

(source)

The mathematics is as follows:

            / 1 0 0 0 \ [a b c 1] * | 0 1 0 0 | = [a+A b+B c+C 1]             | 0 0 1 0 |             \ A B C 1 / 
 
 
   
   

Relacionados problema

0  Error de tiempo de ejecución al implementar vector en C ++  ( Runtime error while implementing vector in c ) 
Estoy tratando de implementar mi propia versión de vector en C ++. Hasta ahora lo he hecho .. #include<iostream> #include<string> using namespace std; t...

4  ¿Cómo puedo cambiar de elementos a la izquierda (para implementar el borrado) en el contenedor de C ++?  ( How can i shift elements to left in order to implement erase in c container ) 
De mi pregunta anterior: Cómo implementar Borrar En vector en C ++ , he intentado implementar erase a través de asignar nueva memoria, y copiar todos los e...

0  MATLAB: evaluar una función simbólica con argumentos vectoriales y matriz  ( Matlab evaluate a symbolic function with vector and matrix arguments ) 
Quiero hacer algo como esto: syms x1 x2 h11 h12 h21 h22 x = [x1 x2] matrix = [h11 h12; h21 h22] y luego cree mi función como: f(x, matrix) = ((2*mat...

26  Pensando en vectores con r  ( Thinking in vectors with r ) 
Sé que se debe evitar R funciona de manera más eficiente con vectores y bucle. Estoy teniendo dificultades para enseñarme a escribir el código de esta manera....

3  Crear e inicializar una matriz de vectores de una sola vez  ( Create and initialise an array of vectors in one go ) 
Para crear una matriz de cadenas, esto funciona: std::string array[] = { "first", "second", : "last" }; Si trato de hacer lo mismo con ...

2  Cómo pasar un vector de STL a una función que toma un Const [] (C ++)  ( How to pass a stl vector to a function which takes a const c ) 
Tengo un vector 3D STL, vector<vector<vector<double> > > mdata; También tengo una función myfun(const double ya[]); Para ser más precisos, es un...

2  ¿Cómo usar un sindicato C para equiparar múltiples variables nombradas y otra, más grande llamada variable? [duplicar]  ( How to use a c union to equate multiple named variables and another larger name ) 
Esta pregunta ya tiene respuestas aquí : ¿Cómo compilar el código C con estructuras / sindicatos anó...

1  C. Vector para manejar diferentes tipos de matriz basada en argumento  ( C vector to handle different array type based in argument ) 
Estoy buscando en vectores en C, es decir, matrices de forma dinámica. He implementado uno que maneja una matriz de caracteres. Pero si quiero la misma func...

4  Rendimiento vectorial de STL  ( Stl vector performance ) 
STL Vector Class almacena una copia del objeto con el constructor de copia cada vez que llamo push_back. ¿No ralentizaría el programa? Puedo tener un tipo de ...

10  Puntos de colineal  ( Collinear points ) 
Si tengo A, B, C punto con X, y en forma de vectores que, ¿cómo puedo encontrar puntos colineal ... FABS ((b.x_-a.x _) * (c.y_-a.y _) - (c.x_-a.x _) * (b.y_...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos