使用二维数组中的点列表绘制样条曲线
Draw splines with a list of points in a 2D Array
我研究了 splines、nurbs 和 Bezier 曲线 我可以'找不到适合我需要的算法。我将不胜感激能够根据二维数组中的点绘制曲线的算法或函数。
示例:
我数组中的第一个起点:ex arr[1,2] = new Point(1,2)
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
输出:
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0
0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0
0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0
0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0
0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
这个问题有两个部分:定义一条通过这些点的平滑曲线,然后将该曲线绘制到数组中。
经过多个定义点的常见曲线类型是 Catmull-Rom spline。您可能想看看这是否满足您的需求。
要定义您的 Catmull-Rom 样条曲线,您需要从左到右扫描您的 2D 数组,并在任何有 1 的地方向样条曲线添加一个点。您还需要提出曲线参数化。使用列号作为每个点的参数值可能会得到很好的结果。
在绘图方面,有几种不同的方法。 Catmull-Rom 样条曲线是参数化的,因此您可以尝试在很多 t 值处计算曲线上的点,并设置相应的数组位置。如果您实现了线图原语(如 Bresenham 线图),则可以在样条曲线上计算更少的点并用线填充。还有其他方法,例如将样条分解为贝塞尔曲线或扫描线方法,但它们更复杂并且可能没有必要。
我研究了 splines、nurbs 和 Bezier 曲线 我可以'找不到适合我需要的算法。我将不胜感激能够根据二维数组中的点绘制曲线的算法或函数。
示例:
我数组中的第一个起点:ex arr[1,2] = new Point(1,2)
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
输出:
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0
0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0
0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0
0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0
0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
这个问题有两个部分:定义一条通过这些点的平滑曲线,然后将该曲线绘制到数组中。
经过多个定义点的常见曲线类型是 Catmull-Rom spline。您可能想看看这是否满足您的需求。
要定义您的 Catmull-Rom 样条曲线,您需要从左到右扫描您的 2D 数组,并在任何有 1 的地方向样条曲线添加一个点。您还需要提出曲线参数化。使用列号作为每个点的参数值可能会得到很好的结果。
在绘图方面,有几种不同的方法。 Catmull-Rom 样条曲线是参数化的,因此您可以尝试在很多 t 值处计算曲线上的点,并设置相应的数组位置。如果您实现了线图原语(如 Bresenham 线图),则可以在样条曲线上计算更少的点并用线填充。还有其他方法,例如将样条分解为贝塞尔曲线或扫描线方法,但它们更复杂并且可能没有必要。