Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

segm_intersect

Segment Intersection


Description

Do two segments have at least one point in common?

Usage

segm_intersect(s1, s2)

Arguments

s1, s2

Two segments, represented by their end points; i.e., s <- rbind(p1, p2) when p1, p2 are the end points.

Details

First compares the ‘bounding boxes’, and if those intersect looks at whether the other end points lie on different sides of each segment.

Value

Logical, TRUE if these segments intersect.

Note

Should be written without reference to the cross function. Should also return the intersection point, see the example.

References

Cormen, Th. H., Ch. E. Leiserson, and R. L. Rivest (2009). Introduction to Algorithms. Third Edition, The MIT Press, Cambridge, MA.

See Also

Examples

## Not run: 
plot(c(0, 1), c(0, 1), type="n",
     xlab = "", ylab = "", main = "Segment Intersection")
grid()
for (i in 1:20) {
s1 <- matrix(runif(4), 2, 2)
s2 <- matrix(runif(4), 2, 2)
if (segm_intersect(s1, s2)) {
    clr <- "red"
    p1 <- s1[1, ]; p2 <- s1[2, ]; p3 <- s2[1, ]; p4 <- s2[2, ]
    A <- cbind(p2 - p1, p4 - p3)
    b <- (p3 - p1)
    a <- solve(A, b)
    points((p1 + a[1]*(p2-p1))[1], (p1 + a[1]*(p2-p1))[2], pch = 19, col = "blue")
} else
    clr <- "darkred"
lines(s1[,1], s1[, 2], col = clr)
lines(s2[,1], s2[, 2], col = clr)
}
## End(Not run)

pracma

Practical Numerical Math Functions

v2.3.3
GPL (>= 3)
Authors
Hans W. Borchers [aut, cre]
Initial release
2021-01-22

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.