0

我研究了splinesnurbsBezier 曲线位,但找不到适合我需要的算法。我将不胜感激有关可以根据二维数组中的点绘制曲线的算法或函数的帮助。

例子:

我数组中的第一个起点: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

4

1 回答 1

1

这个问题有两个部分:定义一条穿过这些点的平滑曲线,然后将该曲线绘制到您的数组中。

穿过几个定义点的常见曲线类型是Catmull-Rom 样条曲线。您可能想看看这是否满足您的需求。

要定义您的 Catmull-Rom 样条曲线,您需要从左到右扫描您的二维数组,只要有 1,就在样条曲线上添加一个点。您还需要提出曲线参数化。使用列号作为每个点的参数值可能会产生良好的结果。

在绘画方面,有几种不同的方法。Catmull-Rom 样条是参数化的,因此您可以尝试计算曲线上许多 t 值的点,并设置相应的数组位置。如果您实现了画线图元(如 Bresenham 线图),则可以在样条曲线上计算更少的点并用线填充。还有其他方法,例如将样条分解为贝塞尔曲线或扫描线方法,但它们更复杂并且可能没有必要。

于 2018-09-11T21:14:17.287 回答