已知兩條線段端點,判斷是否相交及交點


Function TriAreaSize(ByVal ax As Double, ByVal ay As Double, ByVal bx As Double, ByVal by As Double, ByVal cx As Double, ByVal cy As Double) As Double

TriAreaSize = ((ax - cx) * (by - cy) - (ay - cy) * (bx - cx)) * 0.5

End Function

Function GetIfTwoLineIntr(ByVal ax As Double, ByVal ay As Double, ByVal bx As Double, ByVal by As Double, _
ByVal cx As Double, ByVal cy As Double, ByVal dx As Double, ByVal dy As Double, _
ByRef IntrX As Double, ByRef IntrY As Double) As Boolean

Dim area_abc, area_abd As Double
Dim area_cda, area_cdb As Double
Dim t, ddx, ddy As Double

GetIfTwoLineIntr = True

area_abc = Nis_Fun.TriAreaSize(ax, ay, bx, by, cx, cy)
area_abd = Nis_Fun.TriAreaSize(ax, ay, bx, by, dx, dy)

If area_abc * area_abd < 0 Then Exit Function

area_cda = Nis_Fun.TriAreaSize(cx, cy, dx, dy, ax, ay)
area_cdb = Nis_Fun.TriAreaSize(cx, cy, dx, dy, bx, by)

If area_cda * area_cdb < 0 Then Exit Function

GetIfTwoLineIntr = False

t = area_cda / (area_abd - area_abc)
ddx = t * (bx - ax)
ddy = t * (by - ay)

IntrX = ax + ddx
IntrY = ay + ddy

End Function


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM