使用2D数组中的点列表绘制样条线

问题描述 投票:0回答:1

我查看了样条曲线,nurbs和Bezier曲线,我找不到符合我需要的算法。我将非常感谢能够根据2D数组中的点绘制曲线的算法或函数的帮助。

例:

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

c# algorithm bezier spline nurbs
1个回答
1
投票

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

经过几个定义点的常见曲线类型是Catmull-Rom spline。您可能想看看这是否符合您的需求。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.