note 88119 added to function.atan2

From: Date: Sun, 11 Jan 2009 20:39:02 +0000
Subject: note 88119 added to function.atan2
Groups: php.notes 
Request: Send a blank email to php-notes+get-149070@lists.php.net to get a copy of this message
<?php /** * Given an origin point of (0,0) and a destination point $x,$y * somewhere on an axis grid, compass() determines the compass * heading(direction) of the destination point from the origin * * HOWEVER, atan2(y,x)'s natural compass thinks east is north, * * {135}-------{ 90}-------{45} * | +-----[ +y]-----+ | * | | | | * | | | | * {180} [-x] [0,0] [+x] {0} <--------- North ? * | | | | * | | | | * | +-----[ -y]-----+ | * {-135}-------{-90}-------{-45} * * * SO, we simply transpose the (y,x) parameters to atan2(x,y) * which will both rotate(left) and reflect(mirror) the compass. * * Which gives us this compass * * {-45}-------{ 0 }-------{45} * | +-----[ +y]-----+ | * | | | | * | | | | * {-90} [-x] [0,0] [+x] {90} * | | | | * | | | | * | +-----[ -y]-----+ | * {-135}-------{180}-------{135} * * FINALLY,` we check if param $x was indeed a negative number, * if so we simply add 360 to the negative angle returned by atan2() * */ function compass($x,$y) { if($x==0 AND $y==0){ return 0; } // ...or return 360 return ($x < 0) ? rad2deg(atan2($x,$y))+360 // TRANSPOSED !! y,x params : rad2deg(atan2($x,$y)); } function polar($x,$y) { $N = ($y>0)?'N':''; $S = ($y<0)?'S':''; $E = ($x>0)?'E':''; $W = ($x<0)?'W':''; return $N.$S.$E.$W; } function show_compass($x,$y) { return '<BR>' .polar($x,$y) .' compass( x='.$x.', y='.$y.' )= ' .number_format(compass($x,$y),3).'&deg'; } echo show_compass(0,3); echo show_compass(.06,3); echo show_compass(3,3); echo show_compass(3,.06); echo show_compass(3,0); echo show_compass(3,-.06); echo show_compass(3,-3); echo show_compass(.06,-3); echo show_compass(0,-3); echo show_compass(-.06,-3); echo show_compass(-3,-3); echo show_compass(-3,-.06); echo show_compass(-3,0); echo show_compass(-3,.06); echo show_compass(-3,3); echo show_compass(-.06,3); /* RENDERS THIS N compass( x=0, y=3 )= 0 ° NE compass( x=0.06, y=3 )= 1.14576283818 ° NE compass( x=3, y=3 )= 45 ° NE compass( x=3, y=0.06 )= 88.8542371618 ° E compass( x=3, y=0 )= 90 ° SE compass( x=3, y=-0.06 )= 91.1457628382 ° SE compass( x=3, y=-3 )= 135 ° SE compass( x=0.06, y=-3 )= 178.854237162 ° S compass( x=0, y=-3 )= 180 ° SW compass( x=-0.06, y=-3 )= 181.145762838 ° SW compass( x=-3, y=-3 )= 225 ° SW compass( x=-3, y=-0.06 )= 268.854237162 ° W compass( x=-3, y=0 )= 270 ° NW compass( x=-3, y=0.06 )= 271.145762838 ° NW compass( x=-3, y=3 )= 315 ° NW compass( x=-0.06, y=3 )= 358.854237162 ° */ ?> ---- Server IP: 69.147.83.197 Probable Submitter: 75.248.101.81 ---- Manual Page -- http://www.php.net/manual/en/function.atan2.php Edit -- https://master.php.net/note/edit/88119 Del: integrated -- https://master.php.net/note/delete/88119/integrated Del: useless -- https://master.php.net/note/delete/88119/useless Del: bad code -- https://master.php.net/note/delete/88119/bad+code Del: spam -- https://master.php.net/note/delete/88119/spam Del: non-english -- https://master.php.net/note/delete/88119/non-english Del: in docs -- https://master.php.net/note/delete/88119/in+docs Del: other reasons-- https://master.php.net/note/delete/88119 Reject -- https://master.php.net/note/reject/88119 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#149070) next »