我有一个组成飞机的点列表.我想在连续点之间创建边缘并将它们添加到另一个列表中.
这是我目前的代码:
// Get points forming the plate
ArrayList points = part.points;
// Number of points forming the plate
int pointCount = points.Count;
// Create edges
List<LineSegment> edges = new List<LineSegment>();
for (int i = 0; i < pointCount - 1; i++)
{
// Get start and end points
Point start = points[i];
Point end = points[i+1];
// Create edge
LineSegment edge = new LineSegment(start, end);
// Add edge to the list
edges.Add(edge);
}
Run Code Online (Sandbox Code Playgroud)
它不太起作用,因为它不会在列表的最后一个点和第一个点之间创建最后一个边.纠正它的方法是什么?我可以使用if这样的if语句:
for (int i = 0; i < pointCount; i++)
{
// Get start and end points
Point start = points[i] as Point;
Point end;
if (i == pointCount-1) end = points[0] as Point;
else end = points[i+1] as Point;
// Rest of the code here
}
Run Code Online (Sandbox Code Playgroud)
但我确信有更优雅的方式来做到这一点.在Python中,我将从-1开始循环,以便第一个边实际上将最后一个点连接到第一个点,但这在C#中是不可能的.
编辑:点列表由API给出为ArrayList.
"优雅"的解决方案是使用模数:
for (int i = 0; i < pointCount; i++)
{
…
// for i+1 == pointCount this will yield points[0]
Point end = points[(i+1) % pointCount] as Point;
…
}
Run Code Online (Sandbox Code Playgroud)
但是,我相信if您使用的声明更具可读性.
注意:也可以使用a List<T>代替ArrayList.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |