Hi I am plotting various strands of information, and I want to create an "envelope" around each line, so that the locus of the envelope is the boundary points no more than a fixed maximum distance from the plotted line, a bit like drawing a larger rectangle with paralle sides and curved compass corners around a smaller rectangle. Obviously I can work out how to do this in code (eventually) but I suspect it would take me a while and i was wondering whether there was some R function which I don't know about which creates sets of of points at a given maximal distance the lines are simple vectors, ie like this noddy example veca<-c(4,3,6,5,7,3,2,3,3,6,8,7) plot(veca,type="l",lwd=2) then I want to plot the locus of the boundary of all points no more than (say) 1 unit from the line I imagine that one would have to provide a larger set of interpolated points between the actual points of veca, but I can do that no problem I'd be grateful if anyone out there in the R-ethervoid has any ideas Thanks, Nick Wray [[alternative HTML version deleted]]
On 02/11/2015 7:33 AM, WRAY NICHOLAS wrote:> Hi I am plotting various strands of information, and I want to create an > "envelope" around each line, so that the locus of the envelope is the boundary > points no more than a fixed maximum distance from the plotted line, a bit like > drawing a larger rectangle with paralle sides and curved compass corners around > a smaller rectangle. Obviously I can work out how to do this in code > (eventually) but I suspect it would take me a while and i was wondering whether > there was some R function which I don't know about which creates sets of of > points at a given maximal distance > > the lines are simple vectors, ie like this noddy example > > veca<-c(4,3,6,5,7,3,2,3,3,6,8,7) > plot(veca,type="l",lwd=2) > > then I want to plot the locus of the boundary of all points no more than (say) 1 > unit from the line I imagine that one would have to provide a larger set of > interpolated points between the actual points of veca, but I can do that no > problem > > I'd be grateful if anyone out there in the R-ethervoid has any ideasThe graphics system will do this for you automatically if your coordinate system has the same scale in x and y, and you use a really huge line width. For example, veca<-c(4,3,6,5,7,3,2,3,3,6,8,7)plot(veca, lwd=150, col="gray", type="l")lines(veca, lwd=2) If you want to be 1 unit away in user coordinates and the x and y scales are different, it will be a lot harder. Duncan Murdoch
> ---------- Original Message ---------- > From: WRAY NICHOLAS <nicholas.wray at ntlworld.com> > To: Duncan Murdoch <murdoch.duncan at gmail.com>, r-help > <r-help at missing_domain> > Date: at > Subject: Re: [R] Creating "Envelope" around a plot > > > Hi Dennis again, I see what you're getting at and it looks rather groovy > but unfortunately what I actually need is the vector of the points on the > boundary (the graphics just being a way of checking that everything's as it > should be) and so it rather looks like I need to do a lot of calculating of > orthogonal vectors along straight stretches and circles round peaks > > I'm looking to do an algorithmic filtration of strands which lie within > the "envelope" of other strands -- your method would allow visual "by hand" > inspection but unfortunately I've got hundreds of strands to compare! > > But thanks again -- useful thoughts Nick > > > > > > On 02 November 2015 at 15:03 Duncan Murdoch > > <murdoch.duncan at gmail.com> wrote: > > > > > > On 02/11/2015 7:33 AM, WRAY NICHOLAS wrote: > > > Hi I am plotting various strands of information, and I want to > > > create an > > > "envelope" around each line, so that the locus of the envelope is > > > the boundary > > > points no more than a fixed maximum distance from the plotted > > > line, a bit like > > > drawing a larger rectangle with paralle sides and curved compass > > > corners around > > > a smaller rectangle. Obviously I can work out how to do this in > > > code > > > (eventually) but I suspect it would take me a while and i was > > > wondering whether > > > there was some R function which I don't know about which creates > > > sets of of > > > points at a given maximal distance > > > > > > the lines are simple vectors, ie like this noddy example > > > > > > veca<-c(4,3,6,5,7,3,2,3,3,6,8,7) > > > plot(veca,type="l",lwd=2) > > > > > > then I want to plot the locus of the boundary of all points no > > > more than (say) 1 > > > unit from the line I imagine that one would have to provide a > > > larger set of > > > interpolated points between the actual points of veca, but I can > > > do that no > > > problem > > > > > > I'd be grateful if anyone out there in the R-ethervoid has any > > > ideas > > > > The graphics system will do this for you automatically if your > > coordinate system has the same scale in x and y, and you use a > > really > > huge line width. For example, > > > > veca<-c(4,3,6,5,7,3,2,3,3,6,8,7)plot(veca, lwd=150, col="gray", > > type="l")lines(veca, lwd=2) > > > > > > If you want to be 1 unit away in user coordinates and the x and y > > scales > > are different, it will be a lot harder. > > > > Duncan Murdoch > > > > > > > >[[alternative HTML version deleted]]
Instead of computing the envelopes (of various radii) of paths and seeing if they intersect you could compute distances between paths and seeing if they are smaller than a given distance. Computing the distance between 2 polylines is not difficult, although computing it quickly for very long sequences of line segments is more difficult. Bill Dunlap TIBCO Software wdunlap tibco.com On Mon, Nov 2, 2015 at 7:19 AM, WRAY NICHOLAS <nicholas.wray at ntlworld.com> wrote:> > > ---------- Original Message ---------- > > From: WRAY NICHOLAS <nicholas.wray at ntlworld.com> > > To: Duncan Murdoch <murdoch.duncan at gmail.com>, r-help > > <r-help at missing_domain> > > Date: at > > Subject: Re: [R] Creating "Envelope" around a plot > > > > > > Hi Dennis again, I see what you're getting at and it looks rather > groovy > > but unfortunately what I actually need is the vector of the points on > the > > boundary (the graphics just being a way of checking that everything's as > it > > should be) and so it rather looks like I need to do a lot of calculating > of > > orthogonal vectors along straight stretches and circles round peaks > > > > I'm looking to do an algorithmic filtration of strands which lie > within > > the "envelope" of other strands -- your method would allow visual "by > hand" > > inspection but unfortunately I've got hundreds of strands to compare! > > > > But thanks again -- useful thoughts Nick > > > > > > > > > On 02 November 2015 at 15:03 Duncan Murdoch > > > <murdoch.duncan at gmail.com> wrote: > > > > > > > > > On 02/11/2015 7:33 AM, WRAY NICHOLAS wrote: > > > > Hi I am plotting various strands of information, and I want > to > > > > create an > > > > "envelope" around each line, so that the locus of the > envelope is > > > > the boundary > > > > points no more than a fixed maximum distance from the plotted > > > > line, a bit like > > > > drawing a larger rectangle with paralle sides and curved > compass > > > > corners around > > > > a smaller rectangle. Obviously I can work out how to do this > in > > > > code > > > > (eventually) but I suspect it would take me a while and i was > > > > wondering whether > > > > there was some R function which I don't know about which > creates > > > > sets of of > > > > points at a given maximal distance > > > > > > > > the lines are simple vectors, ie like this noddy example > > > > > > > > veca<-c(4,3,6,5,7,3,2,3,3,6,8,7) > > > > plot(veca,type="l",lwd=2) > > > > > > > > then I want to plot the locus of the boundary of all points > no > > > > more than (say) 1 > > > > unit from the line I imagine that one would have to provide a > > > > larger set of > > > > interpolated points between the actual points of veca, but I > can > > > > do that no > > > > problem > > > > > > > > I'd be grateful if anyone out there in the R-ethervoid has > any > > > > ideas > > > > > > The graphics system will do this for you automatically if your > > > coordinate system has the same scale in x and y, and you use a > > > really > > > huge line width. For example, > > > > > > veca<-c(4,3,6,5,7,3,2,3,3,6,8,7)plot(veca, lwd=150, col="gray", > > > type="l")lines(veca, lwd=2) > > > > > > > > > If you want to be 1 unit away in user coordinates and the x > and y > > > scales > > > are different, it will be a lot harder. > > > > > > Duncan Murdoch > > > > > > > > > > > > > > > > [[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/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]
Look at the polylineoffset function in the polyclip package. It looks like it does what you are asking for. On Mon, Nov 2, 2015 at 5:33 AM, WRAY NICHOLAS <nicholas.wray at ntlworld.com> wrote:> Hi I am plotting various strands of information, and I want to create an > "envelope" around each line, so that the locus of the envelope is the boundary > points no more than a fixed maximum distance from the plotted line, a bit like > drawing a larger rectangle with paralle sides and curved compass corners around > a smaller rectangle. Obviously I can work out how to do this in code > (eventually) but I suspect it would take me a while and i was wondering whether > there was some R function which I don't know about which creates sets of of > points at a given maximal distance > > the lines are simple vectors, ie like this noddy example > > veca<-c(4,3,6,5,7,3,2,3,3,6,8,7) > plot(veca,type="l",lwd=2) > > then I want to plot the locus of the boundary of all points no more than (say) 1 > unit from the line I imagine that one would have to provide a larger set of > interpolated points between the actual points of veca, but I can do that no > problem > > I'd be grateful if anyone out there in the R-ethervoid has any ideas > > Thanks, Nick Wray > [[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/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- Gregory (Greg) L. Snow Ph.D. 538280 at gmail.com