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