[R] x, y for point of intersection
(Ted Harding)
ted.harding at wlandres.net
Tue Nov 22 23:49:58 CET 2011
On 22-Nov-11 21:25:56, Monica Pisica wrote:
> Hi everyone,
>
> I am trying to get a point of intersection between a
> polyline and a straight line
.. and get the x and y
> coordinates of this point.
> For exemplification consider this:
>
> set.seed(123)
> k1 <-rnorm(100, mean=1.77, sd=3.33)
> k1 <- sort(k1)
> q1 <- rnorm(100, mean=2.37, sd=0.74)
> q1 <- sort(q1, decreasing = TRUE)
> plot(k1, q1, xlim <- c((min(k1)-5), (max(k1)+5)), type="l")
>
> ya <- 2
> xa = -5
> yb=4
> xb=12
> lines(c(xa, xb), c(ya, yb), col = 2)
>
># I want to get the x and y coordinates of the
># intersection of the 2 lines.
>
> m <- (ya-yb)/(xa-xb)
> b <- ya-m*xa
> ln <- loess(q1~k1)
> lines(ln)
>
> It is clear that the x, y will satisfy both linear equations,
> y = m*x + b and the ln polyline - .. but while I can visualize
> the equation of the straight line - I have problems with the
> polyline. I will appreciate any ideas to solve this problem.
> I thought it a trivial solution but it seems I cannot see it.
> Thanks,
> Monica
ya <- 2
xa = -5
yb = 4
xb = 12
These define a line
y = ya + (x - xa)*(yb - ya)/(xb - xa)
so write this as
y = A + B*x
Then points above the line satisfy
y > A + B*X
and points below the line satisfy
Y < A + B*X
A <- ya - xa*(yb - ya)/(xb - xa)
B <- (yb - ya)/(xb - xa)
So now extract the points (x,y) fron the loess fit:
x.ln <- ln$x
y.ln <- ln$y
and now find the points on 'ln' which are above, and
the points on ln which are below, which will locate the
segment which crosses the (X,Y) line:
ix.upper <- which(y.ln > A + B*ln$y)
ix.lower <- which(y.ln <=3D A + B*ln$y)
ix.upper
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15=20
So now you have the line segment from
(x.ln[15],y.ln[15])
to
(x.ln[16],y.ln[16])
and now all you need to do is to find the intersection
of the line from (ln.x[15],ln.y[15]) to (ln.x[16],ln.y[16])
with the line from (xa,ya) to (xb,yb).
(There could be complications if the y-values of ln do not
continually decrease in value; but happily they do decrease
in your example).
Hoping this helps!
Ted.
--------------------------------------------------------------------
E-Mail: (Ted Harding) <ted.harding at wlandres.net>
Fax-to-email: +44 (0)870 094 0861
Date: 22-Nov-11 Time: 22:49:54
------------------------------ XFMail ------------------------------
More information about the R-help
mailing list