所以我的问题是这个。我有一个公式(见图),根据该公式我应该计算一些坐标,在输出字段中给出。
我在php中制作了我的公式,但它返回了错误的结果。
公式:
$inpx =(string)3484481.0943; //input X
$inpy =(string)3144325.1033;//input Y
$inpz =(string)4305103.1740;//input Z
$dx=-2.0796; //delta X
$dy=-0.3484; //delta Y
$dz=1.7009; //delta Z
$rx=(string)(0.05465/3600)*(string)(M_PI/180);
$ry=(string)(-0.06718/3600)*(string)(M_PI/180);
$rz=(string)(0.06143/3600)*(string)(M_PI/180);
$k=(string)0.0181/(string)pow(10,6);
$n=1+$k;
$X84=$n*$inpx-$rz*$n*$inpy+$ry*$n*$inpz+$dx;
$Y84=$rz*$n*$inpx+$n*$inpy-$rx*$n*$inpz+$dy;
$Z84=-$ry*$n*$inpx+$rx*$n*$inpy+$n*$inpz+$dz;
$X84 = round($X84,4);
$Y84 = round($Y84,4);
$Z84 = round($Z84,4);
我应该得到的结果
$X84 = 3484481.4163; $Y84 = 3144324.9149; $Z84 = 4305102.9848;
我得到的结果
$X84 = 3484476.7392; $Y84 = 3144324.7089; $Z84 = 4305106.9208;
如果有人能在我的公式中找到我的错误,我将不胜感激,因为我现在已经搞乱了几天。
答案 0 :(得分:1)
<强>更新强>
经过进一步考虑后,我认为您输入的rv值的正负符号存在错误。
$inpx =(float)3484481.0943; //input X
$inpy =(float)3144325.1033;//input Y
$inpz =(float)4305103.1740;//input Z
$dx=-2.0796; //delta X
$dy=-0.3484; //delta Y
$dz=1.7009; //delta Z
在:
$rx=(float)(0.05465/3600)*(float)(M_PI/180);
$ry=(float)(-0.06718/3600)*(float)(M_PI/180);
$rz=(float)(0.06143/3600)*(float)(M_PI/180);
之后并产生正确的结果:
$rx=(float)(-0.05465/3600)*(float)(M_PI/180);
$ry=(float)(0.06718/3600)*(float)(M_PI/180);
$rz=(float)(-0.06143/3600)*(float)(M_PI/180);
只需更改所有三个rv值的正负号,我就会收到预期的结果。
$k=(float)0.0181/(float)pow(10,6);
$n=1+$k;
为了清楚起见,我还在以下函数中添加了一些括号。
$X84=($inpx*$n)+(-$rz*$inpy*$n)+($ry*$inpz*$n)+$dx;
$Y84=($rz*$n*$inpx)+($n*$inpy)+(-$rx*$n*$inpz)+$dy;
$Z84=(-$ry*$n*$inpx)+($rx*$n*$inpy)+($n*$inpz)+$dz;
$X84 = round($X84,4);
$Y84 = round($Y84,4);
$Z84 = round($Z84,4);
print_r($X84); //3484481.4164
print_r($Y84); //3144324.9147
print_r($Z84); //4305102.9848
希望这有助于解决您的问题!