[R] Angle between two points with coordinates

Gwennaël Bataille gwennael.bataille at uclouvain.be
Fri Jan 29 09:49:21 CET 2016


Thank you very much for your quick answers!
The %% operator seems the easiest way to go; it works perfectly.

Best regards,

Gwennaël


Le 28/01/2016 20:39, William Dunlap a écrit :
> In addition to the other fine answers, you might find it convenient
> to represent the points as complex numbers and use the Arg function
> to get the angle (and abs() or Mod() the distance).
>
>   > z <- complex(real=0.8660254, imaginary=0.5)
>   > Arg(z) / base::pi * 180
>   [1] 30
>   > Arg(-z) / base::pi * 180
>   [1] -150
>
>
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com <http://tibco.com>
>
> On Thu, Jan 28, 2016 at 9:09 AM, Gwennaël Bataille 
> <gwennael.bataille at uclouvain.be 
> <mailto:gwennael.bataille at uclouvain.be>> wrote:
>
>     Dear all,
>     I'd like to calculate the angle from one point (origin) to another
>     (target), whatever their coordinates.
>     But I encounter some problems (detailed below). The problem could
>     be solved if one of you could answer positively to one of the
>     following questions:
>
>     1) Is there a function in R converting angles in a standardized
>     manner? (for example, converting -150 or 570 (=210+360) into 210)
>
>     2) If not, would you know a function arccos or arcsin returning
>     two different angles as an output instead of one?
>
>
>
>     Details:
>
>     I'd like to calculate the angle from one point (origin) to another
>     (target), whatever their coordinates.
>     For this, the acos and asin functions work pretty well when the
>     end point is located right and above the starting point (first
>     quarter of the trigonometric circle), but are problematic otherwise.
>
>     # In the following example, the origin is (0,0) and the target
>     (0.8660254, 0.5) is located at an angle of 30° :
>     acos( (0.8660254 - 0) )*180/pi
>     asin( (0.5 - 0) )*180/pi
>     # Both acos and asin give the same answer : 30
>
>     # If now, the origin is (0.8660254, 0.5) and the target is (0,0),
>     the target is located at an angle of -150° :
>     acos( (0 - 0.8660254) )*180/pi
>     asin( (0 - 0.5) )*180/pi
>     # Here the results are different : 150 and -30
>
>     # In fact, there are two angle solutions giving the same cosinus :
>     150 and -(150)
>     # And for sinus as well : -30 and ( 180 - (-30) ) = 210° = -150°
>     -acos( (0 - 0.8660254) )*180/pi
>     180 - asin( (0 - 0.5) )*180/pi
>     # But I cannot test equality between the two :
>     -acos( (0 - 0.8660254) )*180/pi    ==    180 - asin( (0 - 0.5)
>     )*180/pi
>     # FALSE, since 210 != -150  (it's only the case when those two are
>     angles)
>
>
>     Thank you very much in advance for your answers!
>
>     Best regards,
>
>
>     Gwennaël
>
>     -- 
>     Gwennaël BATAILLE, PhD student - Teaching assistant
>
>     Earth and Life Institute
>     Université Catholique de Louvain
>     1348 Louvain-la-Neuve
>     BELGIUM
>
>     ______________________________________________
>     R-help at r-project.org <mailto:R-help at r-project.org> mailing list --
>     To UNSUBSCRIBE and more, see
>     https://stat.ethz.ch/mailman/listinfo/r-help
>     PLEASE do read the posting guide
>     http://www.R-project.org/posting-guide.html
>     and provide commented, minimal, self-contained, reproducible code.
>
>

-- 
Gwennaël BATAILLE, PhD student - Teaching assistant

Earth and Life Institute
Université Catholique de Louvain
SST/ELI/ELIB
Bâtiment Carnoy, c.145
Croix du sud 4-5, bte L7.07.04
1348 Louvain-la-Neuve
BELGIUM


	[[alternative HTML version deleted]]



More information about the R-help mailing list