Dev - C++ - rotacion 2d

 
Vista:
Imágen de perfil de felipe
Val: 141
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

rotacion 2d

Publicado por felipe (74 intervenciones) el 30/12/2020 02:58:43
esta función me arroja valores incorrectos y no se el por qué
rotar un punto 2d usando matrices de rotación

1
2
3
4
5
6
7
8
9
10
11
12
struct vec2{
float x,y;
}
 
vec2 rotate(vec2 v, float angle){
float angleRad = a * 3.141592f / 180.0f; // angulo a radianes
vec2 r; // vector resultante de la rotación
 
r.x =  v.x * cos(angle) + v.y * sin(angle);
r.y = -v.x * sin(angle) +  v.y * cos(angle);
return r;
}

(es rotacion horaria para angulos positivos)
por ejemplo al querer rotar el punto (0,1) 90 grados, la función debería retornar el vector (0,-1)
y retorna 3.13916e-007 en X, y unicamente en la coordenada "Y" devuelve el resultado correcto (-1)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

rotacion 2d

Publicado por Rodrigo (539 intervenciones) el 30/12/2020 03:33:30
Linea 6

La variable a no parece estar definida
La variable angleRad la calculas y no la usas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de felipe
Val: 141
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

rotacion 2d

Publicado por felipe (74 intervenciones) el 30/12/2020 03:45:29
me equivoque en algunas cosas al escribir la pregunta

esta es la funcion, no hay variables no definidas ni tampoco problemas de compilacion, aun asi da resultados erroneos
que podría ser?
1
2
3
4
5
6
7
8
9
10
11
12
struct vec2{
float x,y;
}
 
vec2 rotate(vec2 v, float a){
float angleRad = a * 3.141592f / 180.0f; // angulo a radianes
vec2 r; // vector resultante de la rotación
 
r.x =  v.x * cos(angleRad) + v.y * sin(angleRad);
r.y = -v.x * sin(angleRad) +  v.y * cos(angleRad);
return r;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

rotacion 2d

Publicado por Martín (158 intervenciones) el 30/12/2020 14:33:54
No compila. A tu definición de vec2 le falta el punto y coma final.

Por otro lado, ten en cuenta que el tipo float es aproximado, si deseas mejor precisión puedes usar double. También sin() y cos() devuelven valores aproximados, y el valor que has puesto para PI es otra aproximación.

Con todo eso, 3.13916e-007 puede considerarse una razonable representación de 0.

Puede servirte leer sobre la representación de números en coma flotante y, en particular, std::numeric_limits<float>::epsilon() de <limits>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar