我如何将两点传递给方法?

时间:2013-12-28 22:11:55

标签: c# winforms

到目前为止我尝试的是:我现在这样做的方式会得到两次相同的点。 我每次都要传两分。我可以在第二个clouds[i+1]做,但后来我会得到一些索引...错误我认为。

for (int i = 0; i < clouds.Count; i++)
{
    ExtendPoints(clouds[i], clouds[i]);
}

云是List<PointF> ExtendPoint得到PointF,PointF

我现在这样做的方式会两次获得相同的点数。 我每次都要传两分。我可以在第二个clouds[i+1]做,但后来我会得到一些索引...错误我认为。

编辑**

这是方法:

private static List<PointF> ExtendPoints(PointF pt1, PointF pt2)
        {
            float x = (Math.Max(pt1.X, pt2.X) - Math.Min(pt1.X, pt2.X)) / 2 + Math.Min(pt1.X, pt2.X);
            float y = (Math.Max(pt1.Y, pt2.Y) - Math.Min(pt1.Y, pt2.Y)) / 2 + Math.Min(pt1.Y, pt2.Y);
            var pt3 = new PointF(x, y);
            var extendedPoints = new List<PointF> { pt1, pt3, pt2 };
            return extendedPoints;
        }

2 个答案:

答案 0 :(得分:4)

var maxIndex = clouds.Count - 1;
for (int i = 0; i < maxIndex; i++)
{
    ExtendPoints(clouds[i], clouds[i + 1]);
}

它会调用ExtendPoints(clouds[0], clouds[1]),然后调用ExtendPoints(clouds[1], clouds[2]),依此类推。

如果您只需要传递一次,请拨打ExtendPoints(clouds[0], clouds[1]),然后ExtendPoints(clouds[2], clouds[3]),然后将i++更改为i += 2

var maxIndex = clouds.Count - 1;
for (int i = 0; i < maxIndex; i += 2)
{
    ExtendPoints(clouds[i], clouds[i + 1]);
}

答案 1 :(得分:3)

如果您有三个点A,B,C并且您希望连续传递两对A,B和B,那么只需将条件更改为i < clouds.Count - 1

for (int i = 0; i < clouds.Count - 1; i++)
{
    ExtendPoints(clouds[i], clouds[i + 1]);
}

当您尝试获取索引IndexOutOfRangeException

时,不会抛出i + 1