R: Segment Intersection

segm_intersect {pracma} | R Documentation

## 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

`segm_distance`

### 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)

[Package pracma version 2.0.4 Index]