fn segs_cross_point p11 p12 p21 p22 =
(
a = p12 - p11
b = p22 - p21
c = p21 - p11
mag = cross a b
len = (length mag) ^ 2
p0 = p11 + a * (dot (cross c b) mag)/len
p1 = p21 + b * (dot (cross c a) mag)/len
(p0 + p1)/2
)
delete objects
--seed (timestamp())
p11 = point name:#p11 pos:(random -[100,100,0] [100,100,0]) cross:on wirecolor:green
p12 = point name:#p12 pos:(random -[100,100,0] [100,100,0]) cross:on wirecolor:green
p21 = point name:#p21 pos:(random -[100,100,0] [100,100,0]) cross:on wirecolor:yellow
p22 = point name:#p22 pos:(random -[100,100,0] [100,100,0]) cross:on wirecolor:yellow
v = segs_cross_point p11.pos p12.pos p21.pos p22.pos
cp = point name:#cross pos:v cross:on wirecolor:red