a = c(1,5,2,6,3,6,3,5,7)
b= c(5,3,5,7,2,6,9,3,6)
plot(a,type = "l")
lines(b)
Есть ли какая-либо функция, чтобы получить все точки пересечения двух векторов? Как получить точку пересечения двух векторов?
a = c(1,5,2,6,3,6,3,5,7)
b= c(5,3,5,7,2,6,9,3,6)
plot(a,type = "l")
lines(b)
Есть ли какая-либо функция, чтобы получить все точки пересечения двух векторов? Как получить точку пересечения двух векторов?
Использование АиР пространственных объектов:
library(sp) ## Provides basic spatial classes/methods, incl. SpatialLines
library(rgeos) ## Supports topological operations, including intersection
## Read in data and wrap them up as SpatialLines objects
a = c(1,5,2,6,3,6,3,5,7)
b = c(5,3,5,7,2,6,9,3,6)
SL1 <- SpatialLines(list(Lines(Line(cbind(seq_along(a),a)), "A")))
SL2 <- SpatialLines(list(Lines(Line(cbind(seq_along(b),b)), "B")))
## Find intersections
coords <- coordinates(gIntersection(SL1, SL2))
## Check that it worked
plot(a,type = "l")
lines(b)
points(coords, col="red", pch=16)
Я знал, что будут пакеты, которые могут это сделать. – Roland
a = c(1,5,2,6,3,6,3,5,7)
b= c(5,3,5,7,2,6,9,3,6)
plot(a,type = "l")
lines(b)
i <- seq_along(a)
inter0 <- i[(a-b)==0]
as <- split(a, cut(i, c(0,inter0,Inf)))
bs <- split(b, cut(i, c(0,inter0,Inf)))
m <- 0
xs <- ys <- numeric(length(a))
for (k in seq_along(as)) {
int <- which(diff(sign(as[[k]]-bs[[k]])) != 0)
left <- cbind(as[[k]][int], bs[[k]][int])
right <- cbind(as[[k]][int+1], bs[[k]][int+1])
d <- right-left
x <- (left[,1]-left[,2])/(d[,2]-d[,1])
y <- left[,1]+d[,1]*x
x <- x+int+m
xs[(m+1):(m+length(x))] <- x
ys[(m+1):(m+length(y))] <- y
m <- m+length(as[[k]])
}
ys <- ys[xs!=0]
xs <- xs[xs!=0]
points(xs,ys,col="red")
+1 для решений в базе – rawr
Удар! Хорошо, Роланд, я надеюсь :-) Вы написали это, исходя из предположения, что в наборе данных находятся только целые координаты. 'i [(a-b) == 0]' !! В противном случае, очень красиво сделано –
Что вы имеете в виду под "точек пересечения векторов"? Точки пересечения графов? – twin
Да. Точки пересечения графов. –
Ну, вы меня поймали: это не векторы в математическом смысле (если бы они были, вы бы спросили, как узнать, пересекаются ли две линии от начала координат до точек в девятом пространстве: -0). более интересная проблема. –