[英]Why does sizeof(*value) returns different value than sizeof(value) in c++
[英]Why does Matlab gives different value than C++
我正在用c ++創建一個用於計算機視覺的大型程序,並且出於調試目的,我使用Matlab。 經過一段時間的努力,我意識到使用Matlab和c ++(Visual Studio 9編譯器BTW)時一些簡單的算術方程的答案是不同的。 這是為什么?
這是算術運算:
Matlab功能:
function [x,y]=shape_fun(p,shape,Ax,Ay)
x=p(1)+Ax+shape(1)+Ax.*shape(3)+Ay.*shape(4)+Ax.*Ax.*shape(5)/2+Ay.*Ay.*shape(6)/2+Ax.*Ay.*shape(7);
y=p(2)+Ay+shape(2)+Ax.*shape(8)+Ay.*shape(9)+Ax.*Ax.*shape(10)/2+Ay.*Ay.*shape(11)/2+Ax.*Ay.*shape(12);
end
C ++函數
cv::Point2d deformed(const double shape_fun[12],const cv::Point2d p,const double Ax,const double Ay){
cv::Point2d result;
result.x=(p.x+Ax)+shape_fun[0]+shape_fun[2]*Ax+shape_fun[3]*Ay+shape_fun[4]*Ax*Ax/2*shape_fun[5]*Ay*Ay/2+shape_fun[6]*Ax*Ay;
result.y=(p.y+Ay)+shape_fun[1]+shape_fun[7]*Ax+shape_fun[8]*Ay+shape_fun[9]*Ax*Ax/2*shape_fun[10]*Ay*Ay/2+shape_fun[11]*Ax*Ay;
return result;
}
數據:
注意:Matlab值是從debbuger c ++值復制粘貼而成的,它們完全相同。
Ax=-12
Ay=-12
p=[468,683];
shape=[
63.178114688537441
36.536135487588474
-0.038695673779030673
-0.045313362559036965
0.016469896824803026
0.0017122284868442948
-0.0030285669997117204
-0.067902655024060773
0.17995980761526389
0.012716871878336870
-0.036890386929202310
-0.00081243692842574420
];
結果:
Matlab的 :
x =
3.947029931219995e+02
y =
7.043339656551383e+02
C ++:
result {x=393.54007007383439 y=703.64248713855773 } cv::Point_<double>
注意:我不是故意將問題標記為OpenCV
。 雖然顯然我在C ++中使用OpenCV
,但cv::Point2d
只是具有兩個double
變量x和y的結構,我根本不認為這個問題與OpenCV
有關。
result.x=
(p.x+Ax)+
shape_fun[0]+
shape_fun[2]*Ax+
shape_fun[3]*Ay+
shape_fun[4]*Ax*Ax/2*
shape_fun[5]*Ay*Ay/2+
shape_fun[6]*Ax*Ay;
result.y=
(p.y+Ay)+
shape_fun[1]+
shape_fun[7]*Ax+
shape_fun[8]*Ay+
shape_fun[9]*Ax*Ax/2*
shape_fun[10]*Ay*Ay/2+
shape_fun[11]*Ax*Ay;
應該(大概)
result.x=
(p.x+Ax)+
shape_fun[0]+
shape_fun[2]*Ax+
shape_fun[3]*Ay+
shape_fun[4]*Ax*Ax/2+ /** change here **/
shape_fun[5]*Ay*Ay/2+
shape_fun[6]*Ax*Ay;
result.y=
(p.y+Ay)+
shape_fun[1]+
shape_fun[7]*Ax+
shape_fun[8]*Ay+
shape_fun[9]*Ax*Ax/2+ /** change here **/
shape_fun[10]*Ay*Ay/2+
shape_fun[11]*Ax*Ay;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.