动态创建点阵列

Lat*_*ati 1 c# point

我想绘制一条曲线graphics.DrawCurve,我在不同的数组(float x[]float y[])中有x和y值.由于DrawCurve需要将数组作为输入,我需要从浮点数x和y转换或动态创建点数组.这有什么快捷的方法吗?

我有大约20000点用于绘制曲线,graphics.DrawCurve为此目的使用是否是个好主意?

Cor*_*rak 5

有几个问题需要回答.

我无法找到如何分配点数组.

那么,分配点数组与任何其他类型的数组没有区别:

const int size = 100;
Point[] pointArray = new Point[size];
Run Code Online (Sandbox Code Playgroud)

但阵列缺少一些"便利".例如,它们具有您需要在初始化(分配)时指定的固定大小.如果您需要更多空间,则必须手动创建一个新的(更大的)数组并将所有值从旧的复制到新的.

这就是为什么几乎在任何地方你都可以使用数组,你可能最好使用一个列表:

List<Point> pointList = new List<Point>();
Run Code Online (Sandbox Code Playgroud)

然后,无论您何时需要传递数组,都可以通过以下方式获取:

Point[] pointArray = pointList.ToArray();
Run Code Online (Sandbox Code Playgroud)

动态收集分配的点数组中的x和y值

使用列表时,这很简单:

pointList.Add(new Point(x, y));
Run Code Online (Sandbox Code Playgroud)

我们不知道你是怎么填写您float x[]float y[].如果可能的话,我首先没有这两个单独的数组,只需pointList从头开始使用.有一点需要注意:System.Drawing.Point仅适用于int值,而不适用于float值.所以我假设你打算收集int坐标值.

从float数组x和y动态创建点数组

如果您无法更改坐标的集合并且必须使用这些数组,则可以将它们"压缩"在一起,如下所示:

IEnumerable<Point> points = x.Zip(y, (xCoord, yCoord) => 
    (new Point((int)xCoord, (int)yCoord));
Run Code Online (Sandbox Code Playgroud)

或者,如果您知道您需要一个数组:

Point[] pointArray = x.Zip(y, (xCoord, yCoord) => 
    (new Point((int)xCoord, (int)yCoord)).ToArray();
Run Code Online (Sandbox Code Playgroud)

为此,您需要能够使用System.Linq(换句话说,高于.Net 2.0).

如果你不能使用Linq,你必须"手动".就像是:

int size = Math.Min(x.Length, y.Length);
Point[] pointArray = new Point[size];

for (int index = 0; index < size; index++)
{
  pointArray[index] = new Point((int)x[index], (int)y[index]);
}
Run Code Online (Sandbox Code Playgroud)