[R] Calculating angle of a polyline
Eric Berger
ericjberger at gmail.com
Tue Jan 30 18:15:39 CET 2018
nice
On Tue, Jan 30, 2018 at 7:05 PM, William Dunlap <wdunlap at tibco.com> wrote:
> I like to use complex numbers for 2-dimensional geometry. E.g.,
>
> > polyAngles2
> function (xV, yV)
> {
> stopifnot((length(xV) == length(yV)) && (length(xV) >= 3))
> z <- complex(re = xV, im = yV)
> c(NA, diff(Arg(diff(z))), NA) # radians, positive is counter-clockwise
> }
> > x <- c(0:3)
> > y <- c(0,0,1,1)
> > polyAngles2(x,y) / pi * 180
> [1] NA 45 -45 NA
>
>
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
> On Tue, Jan 30, 2018 at 7:09 AM, Eric Berger <ericjberger at gmail.com>
> wrote:
>
>> Assuming your polyline is defined by two vectors, one for the x
>> coordinates, one for the y coordinates, you can try the following
>>
>> library(NISTunits)
>> polyangles <- function(xV,yV) {
>> stopifnot( (length(xV)==length(yV)) && (length(xV) >= 3))
>> v <- function(i) { c( xV[i]-xV[i-1], yV[i]-yV[i-1])}
>> vlen <- function(v) { sqrt(sum(v*v)) }
>>
>> lV <- rep(NA_real_,length(xV))
>> for ( i in 2:(length(xV)-1) )
>> lV[i] <- acos( sum(v(i)*v(i+1))/(vlen(v(i))*vlen(v(i+1))) )
>> angleV <- NISTunits::NISTradianTOdeg(lV)
>> angleV
>> }
>>
>> # example
>> x <- c(0:3)
>> y <- c(0,0,1,1)
>> polyangles( x, y )
>>
>> # NA 45.0 45.0 NA
>>
>> Note, I have included the NA's at the beginning and end of the polyline as
>> a reminder that there is no angle defined there.
>>
>> HTH,
>> Eric
>>
>>
>> On Tue, Jan 30, 2018 at 4:34 PM, Jeff Newmiller <jdnewmil at dcn.davis.ca.us
>> >
>> wrote:
>>
>> > A polyline by definition has many angles, so your question is
>> ill-formed.
>> > And this is a question about math, not R, so is off topic here. I
>> suggest
>> > reading Wikipedia.
>> > --
>> > Sent from my phone. Please excuse my brevity.
>> >
>> > On January 29, 2018 11:10:02 PM PST, javad bayat <j.bayat194 at gmail.com>
>> > wrote:
>> > >Dear R users
>> > >I am trying to find a formula to calculate the angle of a polyline. Is
>> > >there a way to do this?
>> > >Many thanks.
>> >
>> > ______________________________________________
>> > 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.
>> >
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> 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/posti
>> ng-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list