任何人都可以帮忙。
我有一个问题,我需要循环3行并检查它们是否使用C#相交。 3条线将构成三角形的一般形状。因此,一次只能有两条线相交。
我有3个Line对象,我已将它们存储在List行中。 我检查交叉点的方法目前如下:
ProcessIntersections(lines[0], lines[1])
ProcessIntersections(lines[1], lines[2])
ProcessIntersections(lines[2], lines[0])
在我可以做的时候循环遍历列表,但要检查最后的交叉点,我必须再次传入第一行并在最后一行检查它。
有没有更好的方法来处理我的十字路口? 如何通过仅调用ProcessIntersections一次来循环遍历行列表? 我试过了:
for (int i = 0; i < lines.Count; i++)
{
if (i >= 3)
{
i = 0;
ProcessIntersection(lines[i], lines[i + 1]);
}
}
但这让我陷入无限循环,因为我一直在重置为0。
有没有人有任何建议。
答案 0 :(得分:1)
如果你想检查每一行的后续行,然后检查行[0]的最后一行,你可以这样做:
for(int i = 0;i < lines.Count - 1;++i)
ProcessIntersection(lines[i], lines[i + 1]);
if(lines.Count > 1)
ProcessIntersection(lines[lines.Count - 1], lines[0]);
如果你真的希望它在for()循环中处理(这会对速度产生负面影响),你可以这样做:
for(int i = 0;i < lines.Count;++i)
ProcessIntersection(lines[i], lines[i == lines.Count - 1 ? 0 : i + 1]);
答案 1 :(得分:1)
for (int i = 0; i < lines.Count; i++)
{
ProcessIntersection(lines[i], lines[i == lines.Count -1 ? 0 : i + 1]);
}
答案 2 :(得分:1)
尝试下一个循环:
for (int i = 0; i < lines.Count; i++)
{
var next_i = i + 1;
if (next_i >= lines.Count)
next_i = 0;
ProcessIntersection(lines[i], lines[next_i]);
}
或优化循环:
for (int i = 0; i < lines.Count; i++)
{
ProcessIntersection(lines[i], lines[(i + 1) % lines.Count]);
}