[R] Interpolate? a line
David Winsemius
dwinsemius at comcast.net
Wed Sep 15 13:24:42 CEST 2010
Replacing context:
>> Hello everyone.
>> I have created a 100*100 matrix in R.
>> Let's now say that I have a line that starts from (2,3) point and
>> ends to the
>> (62,34) point. In other words this line starts at cell (2,3) and
>> ends at cell
>> (62,34).
>>
>> Is it possible to get by some R function all the matrix's cells
>> that this line
>> transverses?
>>
>> I would like to thank you for your feedback.
>>
>> Best Regards
>> Alex
On Sep 15, 2010, at 6:52 AM, Michael Bedward wrote:
> Hello Alex,
>
> Here is one way to do it. It works but it's not pretty :)
If you want an alternative, consider that produces the Y cell indices
(since the x cell indices are already 2:62):
> linefn <- function(x) 3+((34-3)/(62-2)) *(x-2)
> findInterval(linefn(2:62), 3:34)
[1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11
11 12 12 13 13 14
[28] 14 15 15 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25
26 26 27 27 28
[55] 28 29 29 30 30 31 32
# that seems "off" by two
> linefn(62)
[1] 34
> linefn(2)
[1] 3 # but that checks out and I realized those were just indices for
the 3:34 findInterval vector
> (3:34)[findInterval(linefn(2:62), 3:34)]
[1] 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13
13 14 14 15 15 16
[28] 16 17 17 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27
28 28 29 29 30
[55] 30 31 31 32 32 33 34
( no rounding and I think the logic is clearer.)
--
David.
>
> interp <- approx(c(2, 62), c(3, 34), method="linear", xout=2:62)
> m <- matrix(c(interp$x, round(interp$y)), ncol=2)
> tie <- m[,2] == c(-Inf, m[-nrow(m),2])
> m <- m[ !tie, ]
>
> You might want to examine the result like this...
>
> plot(m) # plots points
> lines(c(2,26), c(3, 34)) # overlay line for comparison
you can add a grid with
abline(v=2:62, h=3:34)
>
> Michael
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list