(VBA,Excel)从任意点开始按顺时针方向对墙点进行排序

时间:2019-03-05 03:19:45

标签: excel vba

我是这里的新手,而VBA也相对较新。我已经为这个问题苦苦挣扎了一段时间,而且似乎找不到解决方案。 我有一些与墙的端点或墙的相交点相对应的点(如附图所示)。

Points

enter code here

我需要将此信息转换为沿壁边界的点(从给定的壁厚开始),从任意点开始按顺时针方向进行排序。请参阅所附图片。

Goal

通过将每个节点缩回一半的壁厚,然后在垂直方向上将每个结点“并排”移动垂直的方向,即壁厚的一半,我设法在边界上创建了点(非常粗略)。 / p>

我的数据确实显示了每一行的节点对。这些“ AtoB”线型连接对在节点到节点之间存在,并且不交叉。
任何建议或帮助将不胜感激。我有点卡住了。 谢谢!

以下是“ L”形墙的输出信息: enter image description here

然后我获取XY坐标并移动它们:

ReDim CoordsArr(9, 3) '10 Walls total available per pier

''' Store coord in variables '''
For coordrow = 0 To Counter - 2
CoordsArr(coordrow, 0) = Cells(24 + coordrow, 5)
CoordsArr(coordrow, 1) = Cells(24 + coordrow, 6)
CoordsArr(coordrow, 2) = Cells(24 + coordrow, 8)
CoordsArr(coordrow, 3) = Cells(24 + coordrow, 9)
Next coordrow
''' Generate New Corner Points '''
ReDim POINTS_XY(19, 7) 'Array as (x1,y1,x2,y2,x3,y3,x4,y4) for points 
'above and below CL
For coordrow = 0 To Counter - 2
If Abs(CoordsArr(coordrow, 3) - CoordsArr(coordrow, 1)) = 0 Then
If CoordsArr(coordrow, 0) < CoordsArr(coordrow, 2) Then
XnewL = CoordsArr(coordrow, 0) + thick / 2
XnewR = CoordsArr(coordrow, 2) - thick / 2
POINTS_XY(coordrow, 0) = XnewL
POINTS_XY(coordrow, 1) = thick / 2
POINTS_XY(coordrow, 2) = XnewL
POINTS_XY(coordrow, 3) = -thick / 2
POINTS_XY(coordrow, 4) = XnewR
POINTS_XY(coordrow, 5) = thick / 2
POINTS_XY(coordrow, 6) = XnewR
POINTS_XY(coordrow, 7) = -thick / 2
ElseIf CoordsArr(coordrow, 0) > CoordsArr(coordrow, 2) Then
XnewL = CoordsArr(coordrow, 0) - thick / 2
XnewR = CoordsArr(coordrow, 2) + thick / 2
POINTS_XY(coordrow, 0) = XnewL
POINTS_XY(coordrow, 1) = thick / 2
POINTS_XY(coordrow, 2) = XnewL
POINTS_XY(coordrow, 3) = -thick / 2
POINTS_XY(coordrow, 4) = XnewR
POINTS_XY(coordrow, 5) = thick / 2
POINTS_XY(coordrow, 6) = XnewR
POINTS_XY(coordrow, 7) = -thick / 2
End If
ElseIf Abs(CoordsArr(coordrow, 2) - CoordsArr(coordrow, 0)) = 0 Then
If CoordsArr(coordrow, 1) < CoordsArr(coordrow, 3) Then
YnewD = CoordsArr(coordrow, 1) + thick / 2
YnewU = CoordsArr(coordrow, 3) - thick / 2
POINTS_XY(coordrow, 0) = -thick / 2
POINTS_XY(coordrow, 1) = YnewD
POINTS_XY(coordrow, 2) = thick / 2
POINTS_XY(coordrow, 3) = YnewD
POINTS_XY(coordrow, 4) = -thick / 2
POINTS_XY(coordrow, 5) = YnewU
POINTS_XY(coordrow, 6) = thick / 2
POINTS_XY(coordrow, 7) = YnewU
ElseIf CoordsArr(coordrow, 1) > CoordsArr(coordrow, 3) Then
YnewD = CoordsArr(coordrow, 1) - thick / 2
YnewU = CoordsArr(coordrow, 3) + thick / 2
POINTS_XY(coordrow, 0) = -thick / 2
POINTS_XY(coordrow, 1) = YnewD
POINTS_XY(coordrow, 2) = thick / 2
POINTS_XY(coordrow, 3) = YnewD
POINTS_XY(coordrow, 4) = -thick / 2
POINTS_XY(coordrow, 5) = YnewU
POINTS_XY(coordrow, 6) = thick / 2
POINTS_XY(coordrow, 7) = YnewU
End If
End If
Next coordrow

0 个答案:

没有答案