2016-05-11 8 views
0

Я не знаю, почему sin() и cos() двойника, которые предположительно имеют определенное значение, дают мне неправильное значение, когда я отлаживаю использование QtОшибка при вычислении cos (x) и sin (x) с opencv

вот мой код:

Vec3d nor2 (0.0 ,0.0 ,0.0); 
double jphi = 0.0 ; 
double phi2 = 0.0 ; 

for (int i = 0; i < 800; i++) 
     { 
      double jphi = (i+1) * step_phi - phimax ; 

      double phi2 = phi_0 + CV_PI * jphi/180.0 ; 

      // apply partial phi-rotation in (x-z) plane 
      nor2 = (cos(phi2), 0.0 , sin(phi2)); 

} 

значение nor2 = (0.620691455366943 , 0 , 0) для первой итерации , когда я сделал это с MATLAB это дает мне nor2 = (0.7841 , 0 , 0.6207)

+0

Что такое значение 'phi2'? – thuga

+0

Значение phi2 равно 0.669624292283149 – ner

+2

Значение '(cos (phi2), 0.0, sin (phi2))' является 'sin (phi2)'. Если вам нужен вектор из трех координат, напишите 'Vec3d (cos (phi2), 0.0, sin (phi2))' – molbdnilo

ответ

4

Вы получаете ожидаемый результат, но не в ожидаемом месте - 0.6207: 0.620691455366943 округляется до четырех знаков после запятой.

Проблема в том, что вы используете оператор запятой, который оценивает левую сторону, отбрасывает результат и возвращает значение правой части.
То есть значение (cos(phi2), 0.0 , sin(phi2)) равно sin(phi2) (круглые скобки не меняют это значение).

Вы должны сделать это:

nor2 = Vec3d(cos(phi2), 0.0 , sin(phi2)); 
+0

спасибо @molbdnilo, это исправляет мою проблему и возвращает значения записи – ner