Dim k As Integer
For k = 0 To numLines - 1
If sID = 0 Then
LnPara(k).x(0, i + 1) = XCorssLeftTemp(k) '取左边值
LnPara(k).y(0, i + 1) = YCorssLeftTemp(k)
ElseIf sID = 1 Then
LnPara(k).x(1, i + 1) = XCorssRightTemp(k) '取右边值
LnPara(k).y(1, i + 1) = YCorssRightTemp(k)
End If
Next k
'求平行线起点和终点的坐标:基线的垂线和平行线的交点
If isFirstPoint = True Then '必须包含起点或终点的时候才求
ReDim cParaStart(numLines - 1) As Double '起点平行线方程 y=ax+c 中的c
ReDim cVerStart(numLines - 1) As Double '起点端垂线方程y=x/a+c 中的c
Dim fp As Integer
Dim p As Integer
For fp = 0 To numLines - 1
For p = 0 To 1 '0表示左边(以前进方向为准)
Public Type PointBaseParall '基线的顶点
X_b As Double
Y_b As Double
End Type
Public Type LineParallel '平行线的顶点
x() As Double '第一维表示左右,第二维表示点号
y() As Double
End Type
Option Explicit
'传入:基线顶点坐标,偏移量,条数,哪一边(0左,1右,2两边)
'传出:平行线的顶点坐标
Private Sub ParallelPoint(PtBase() As PointBaseParall, dis As Double, numLines As Integer, sID As Integer, LnPara() As LineParallel)
Dim PtBaseOne As PointBaseParall
Dim PtBaseTwo As PointBaseParall
Dim PtBaseThree As PointBaseParall
If UBound(PtBase) = 1 Then '如果只有两个点
PtBaseOne = PtBase(0)
PtBaseTwo = PtBase(1)
If PtBaseOne.Y_b = PtBaseTwo.Y_b Then '垂直于x轴
Dim c1 As Integer
If PtBaseTwo.X_b > PtBaseOne.X_b Then
For c1 = 0 To numLines - 1
LnPara(c1).y(0, 0) = PtBaseOne.Y_b + dis * (c1 + 1) '第一点
LnPara(c1).x(0, 0) = PtBaseOne.X_b
LnPara(c1).y(1, 0) = PtBaseOne.Y_b - dis * (c1 + 1)
LnPara(c1).x(1, 0) = PtBaseOne.X_b
LnPara(c1).x(0, 1) = PtBaseTwo.X_b + dis * (c1 + 1) '第二点
LnPara(c1).y(0, 1) = PtBaseTwo.Y_b
LnPara(c1).x(1, 1) = PtBaseTwo.X_b - dis * (c1 + 1)
LnPara(c1).y(1, 1) = PtBaseTwo.Y_b
Next c1
End If
Else
Dim slope As Double '斜率
Dim cVer As Double '垂直于原直线的方程Y=AX+C的c
Dim cBase As Double '原直线方程Y=AX+C的c
Dim cParaLeft As Double '平行于原直线的方程Y=AX+C的c
Dim cParaRight As Double