Option Explicit Const xx As Double = 0.0000001 Private Sub Command1_Click() MsgBox IsConnect(Line1, Line2) End SubPublic Function IsConnect(Line1 As Line, Line2 As Line) As Boolean IsConnect = False Dim Rate1 As Double Dim Rate2 As Double If Line1.X2 = Line1.X1 Then Rate1 = 0 Else Rate1 = (Line1.Y2 - Line1.Y1) / (Line1.X2 - Line1.X1) End If If Line2.X2 = Line2.X1 Then Rate2 = 0 Else Rate2 = (Line2.Y2 - Line2.Y1) / (Line2.X2 - Line2.X1) End If If Abs(Rate1 - Rate2) > xx Then IsConnect = True Else IsConnect = False End If End Function
比例为DOUBLE 精确
Const xx As Double = 0.0000001
Private Sub Command1_Click()
MsgBox IsConnect(Line1, Line2)
End SubPublic Function IsConnect(Line1 As Line, Line2 As Line) As Boolean
IsConnect = False Dim Rate1 As Double
Dim Rate2 As Double
If Line1.X2 = Line1.X1 Then
Rate1 = 0
Else
Rate1 = (Line1.Y2 - Line1.Y1) / (Line1.X2 - Line1.X1)
End If If Line2.X2 = Line2.X1 Then
Rate2 = 0
Else
Rate2 = (Line2.Y2 - Line2.Y1) / (Line2.X2 - Line2.X1)
End If If Abs(Rate1 - Rate2) > xx Then
IsConnect = True
Else
IsConnect = False
End If
End Function
楼主提的问题可高深了,以前有好多人提过了,在不计算线段点的情况下判断是否相交的算法.
请 T2(無藥可救)详细描述一下你的线段
你用你的这段代码,一试就知道了。你只是用两条线的斜率K1,K2来判断,
\ /
\ /
\ /
你觉得这两条线段是相交还是不相交?
先直线通式 y=kx+b
直线1:k1=(y1-y2)/(x1-x2) b1=y1-k1*x1
直线2:k2=(y3-y4)/(x3-x4) b2=y3-k1*x3
如果相同,这平行,没有交点,如果不同者求交点
x=(k1-k2)/(b2-b1)
如果x再x1和x2之间,或者在x3和x4之间,则有交点,否则没有
如果左三段在一条直线上,其中一段就当作一条直线即可!!难道T2(無藥可救)要的是视觉上要相交才叫相交?就是在界面上不交就是不相交我认为====="两条在同一平面上的线段是否相交的最佳解法" 不是说就是界面上交上了才叫相交吧?
----------------------------------------------
直线和线段难道一样???!!!无语了