gpt4 book ai didi

c# - 动态创建点数组

转载 作者:太空宇宙 更新时间:2023-11-03 18:05:49 25 4
gpt4 key购买 nike

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

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

最佳答案

有几个问题需要回答。

I couldn't find out how to allocate a point array.

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

const int size = 100;
Point[] pointArray = new Point[size];

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

这就是为什么几乎所有你会使用数组的地方,你可能最好使用列表:

List<Point> pointList = new List<Point>();

然后,无论您实际需要传递一个数组,您都可以通过以下方式简单地获取它:

Point[] pointArray = pointList.ToArray();

dynamically collect the x and y values in the allocated point array

当您使用列表时,这很简单:

pointList.Add(new Point(x, y));

我们不知道您如何填充float x[]float y[]。如果可能的话,我不会首先使用这两个单独的数组,而只是从一开始就使用 pointList。有一个警告:System.Drawing.Point仅适用于 int 值,不适用于 float 值。所以我假设您打算收集坐标的 int 值。

dynamically create the point array from the float arrays x and y

如果您不能更改坐标集合并且使用这些数组,您可以像这样将它们“压缩”在一起:

IEnumerable<Point> points = x.Zip(y, (xCoord, yCoord) => 
(new Point((int)xCoord, (int)yCoord));

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

Point[] pointArray = x.Zip(y, (xCoord, yCoord) => 
(new Point((int)xCoord, (int)yCoord)).ToArray();

为此,您需要能够使用 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]);
}

关于c# - 动态创建点数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30499654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com