2014-04-11 11 views
9

Quindi il mio problema è questo. Ho una formula (vedi immagine), secondo la quale dovrei calcolare alcune coordinate, date nel campo di output.I calcoli di formula lunga di PHP danno risposte errate?

enter image description here

ho fatto le mie formule in php, ma restituisce i risultati errati.

Formula:

$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); 

I risultati che ho dovrei ottenere

$X84 = 3484481.4163; 
    $Y84 = 3144324.9149; 
    $Z84 = 4305102.9848; 

I risultati che ottengo

$X84 = 3484476.7392; 
    $Y84 = 3144324.7089; 
    $Z84 = 4305106.9208; 

Sarebbe gradito se qualcuno riuscisse a trovare ciò che ho sbagliato nella mia formula, perché ho lavorato con lui per qualche giorno.

+0

'(stringa)' deve essere rimosso. '$ k = 0,0181E-6;' o '0,0181 * 1E-6'. –

+0

rimozione (stringa) non ha avuto effetto, ha comunque restituito le stesse risposte – Guram

+0

Inizialmente pensavo che questo avesse a che fare con precisione doppia/singola, ma l'ho riprodotto in Java con numeri espliciti a doppia precisione e ottenuto le stesse risposte. – Tenner

risposta

1

Aggiornato:
Dopo ulteriori considerazioni, credo di avere un errore con il segno positivo e negativo sui vostri valori camper inputed.

$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 

Prima:

$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); 

Dopo e conseguente i risultati corretti:

$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); 

Solo cambiando il segno positivo e negativo su tutti e tre i valori camper, ricevo i risultati attesi .

$k=(float)0.0181/(float)pow(10,6); 
$n=1+$k; 

Per clarityI hanno anche aggiunto alcuni parentesi per la seguente funzione.

$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 

Spero che questo aiuti risolvere il tuo problema!

+1

Aggiornamento soluzione vecchia dopo una notte pensato a questo proposito! –

+0

grazie mille, ho aiutato molto – Guram

+0

, felice di sentirlo aiutato. –

Problemi correlati