Code Tags: PHP
I was working on a project that needed to list the Beaufort wind force. The first attempt was to do a lookup based function using the data here:
http://en.wikipedia.org/wiki/Beaufort_scaleAttempt 1php code:
function beaufort_scale($speed, $unit="m/s"){
$units['m/s'] = 1;
$units['kph'] = 1/3.6;
$units['mph'] = 0.44704;
$units['kts'] = 0.514444444;
if(!in_array($unit,array_keys($units))){
return "Error: couldn't recognise unit";
}
$speed *= $units[$unit];
$scale = array(0.3,1.5,3.4,5.4,7.9,10.7,13.8,17.1,20.7,24.4,28.4,32.6,1000);
foreach($scale as $key=>$val){
if($speed <= $val) return $key;
}
return 'Error';
}
I then noticed on the wikipedia page the scale's empirical formula
so i thought i could improve the function ;)
v = 0.866 * B3/2 (units m/s)
Attempt 2php code:
function beaufort_scale($speed, $unit="m/s", $rnd=0){
$units['m/s'] = 1;
$units['kph'] = 1/3.6;
$units['mph'] = 0.44704;
$units['kts'] = 0.514444444;
if(!in_array($unit,array_keys($units))){
return "Error: couldn't recognise unit";
}
$speed *= $units[$unit];
$scale = pow(($speed/0.836),(2/3));
return round($scale,$rnd);
}
This one has the added ability of returning a decimal answer