1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| nbsol = 0
For i = 0 To 3
ok = False
u(1) = x1 - o(i, 1)
u(2) = y1 - o(i, 2)
v(1) = x2 - o(i, 1)
v(2) = y2 - o(i, 2)
w(1) = o(i + 1, 1) - o(i, 1)
w(2) = o(i + 1, 2) - o(i, 2)
den = u(1) * v(2) - v(2) * u(1)
det = w(1) * u(2) - w(2) * u(1)
If den = 0 And det = 0 And det <> den Then '====== (O(i)O(i+1)) = (AB)
ta = u(1) / w(1)
tb = v(1) / w(1)
If Not ((ta < 0 Or ta >= 1) And (tb < 0 Or tb >= 1)) Then
If ta > tb Then
tc = tb
tb = ta
ta = tc
End If
If ta < 0 Then ta = 0
If tb > 1 Then tb = 1
sol(1) = ta
sol(2) = tb
nbsol = 2
i = 4
End If
Else
det1 = w(1) * ab(2) - w(2) * ab(1)
If det1 <> 0 Then
mu = -det / det1
Else
mu = -1
End If
sol(nbsol) = mu
nbsol = nbsol + 1
End If
Next i
For i = 0 To nbsol - 1
If (sol(i) >= 0 And sol(i) <= 1) Then
solgood(nbgood) = sol(i)
nbgood = nbgood + 1
End If
Next i
If nbgood = 1 Then
If isinside(x1, y1, lx, ly, rx, ry, tx, ty, bx, by) Then
solgood(nbgood) = 0
nbgood = nbgood + 1
End If
If isinside(x2, y2, lx, ly, rx, ry, tx, ty, bx, by) Then
solgood(nbgood) = 1
nbgood = nbgood + 1
End If
End If
If nbgood = 2 Then
intersect = Abs(solgood(1) - solgood(0))
Else
intersect = 0
End If |
Partager