//Variables from filename $orbit = $data[1]*1; //orbit number $degree = substr($data[2],0,4)/10; //degree from equator on "night side" //Constants that must be precise //6814 is calculated orbital period of MRO //90 is a "tweak"-number found by testing.. $mro_orbital_period = 6814-90; $mars_rotational_period = 88642.6632; //Initial value $i_orbit = 823; $i_degree = 172.0; $it_latitude = -7.8; $it_longitude = 279.5; //Calculate the longitude at "degree" 0 on the initial orbit (823) $i_longitude = $it_longitude - (180-(($i_degree/360*$mro_orbital_period)/$mars_rotational_period)*360); //Calculate the time passed since this first orbit $time_since_initial_value = ($orbit-$i_orbit)*$mro_orbital_period + $degree/360*$mro_orbital_period; //Calculate an orbit offset, due to the rotation of mars $longitude_offset = ($time_since_initial_value/$mars_rotational_period*360)%360; //Treat the different cases of degree if($degree > 90 && $degree < 270) { $longitude_offset += 180; $latitude = $degree - 180; } else if($degree < 90) $latitude = -$degree; else if($degree >= 270) $latitude = 360-$degree; //Do the final longitude calculation $longitude = (($i_longitude-$longitude_offset)%360+360)%360;