Advertisement
Guest User

line segment intersection

a guest
Sep 22nd, 2013
1,070
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 0.98 KB | None | 0 0
  1. // translation from C code from this answer http://stackoverflow.com/a/1968345/1418097
  2.  
  3.     type Point2D =
  4.         {
  5.             x: float
  6.             y: float
  7.         }
  8.  
  9.     let crossing l1start l1finish l2start l2finish =
  10.         let toTuple point = (point.x, point.y)
  11.         let [(p0x, p0y); (p1x, p1y); (p2x, p2y); (p3x, p3y)] = List.map toTuple [l1start; l1finish; l2start; l2finish]
  12.  
  13.         let s1x = p1x - p0x
  14.         let s1y = p1y - p0y
  15.         let s2x = p3x - p2x
  16.         let s2y = p3y - p2y
  17.  
  18.         let sdiv = -s2x * s1y + s1x * s2y
  19.         let tdiv = -s2x * s1y + s1x * s2y
  20.  
  21.         if 0.0 = sdiv || 0.0 = tdiv
  22.             then None
  23.             else
  24.                 let s = (-s1y * (p0x - p2x) + s1x * (p0y - p2y)) / sdiv
  25.                 let t = ( s2x * (p0y - p2y) - s2y * (p0x - p2x)) / sdiv
  26.  
  27.                 if (s >= 0.0 && s <= 1.0 && t >= 0.0 && t <= 1.0)
  28.                     then Some {x = p0x + (t * s1x); y = p0y + (t * s1y)}
  29.                     else None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement