到目前为止我尝试的是:我现在这样做的方式会得到两次相同的点。
我每次都要传两分。我可以在第二个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;
}
答案 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