我正在开发一个图形编辑器应用程序。它有一个Bezier工具。我希望实现它类似于Paint.NET应用程序中的bezier控件,其中曲线的两个句柄(除了端点)放在曲线本身的上,用户可以通过它控制曲率。将这些手柄放置在曲线上,会给图形师更好的感觉和感觉,如下图所示:
但我的问题是,DrawBezier方法在.NET中得到两个控制点,这些控制点不一定总是放在曲线上。您知道如何使用这两个在曲线上的句柄的坐标来绘制Bezier吗?
发布于 2018-12-30 10:58:09
我们可以用标准多项式曲线拟合,通过任何四个点的集合找到一个单一的三次Bezier曲线,但是你总是会有一个自由参数问题:其中两个点将是曲线的开始和结束,所以我们知道它们的时间值是0和1,但是这两个点在时间值上是完全自由的,所以你必须想出一个合理的假设它们应该是什么,然后你才能评估你的曲线拟合。
如果您想自己实现它,或者查找一个进行多项式拟合的库(这意味着任何半体面的统计软件包),请参阅https://pomax.github.io/bezierinfo/#curvefitting获取数学,然后,对于计时值,您有一些选项:
在这些程序中,显然2只需花费最少的精力就能给出“合理”的结果,但如果您正在编写图形应用程序,“合理”取决于您的用户需要什么,而不是什么对您来说是容易的。
发布于 2018-12-28 09:40:09
Graphics类的DrawCurve方法完成了这项工作。也就是说,不要使用Bezier曲线,您应该使用标准样条。
我在Charles 的书(用C#编程)中找到了它:
标准样条-图形类包括第二种样条,称为标准样条,即标准样条或正常样条.
https://stackoverflow.com/questions/53958748
复制相似问题