Big*_*azy 2 algorithm graphics bezier rust
我有一个关于计算曲线的贝塞尔曲线控件的问题。问题如下图所示:
我的红色点在有序列表中,包括C和D。我需要找到F和E。问题在于,并非每个点都必须在曲线上(曲线不需要通过任何点,除了开始和结束)。它只是一个“近似值”。
我已经阅读了以下内容:
所以我对如何解决这个问题的想法是:
由此,我需要以某种方式将这些点插入贝塞尔曲线公式,然后反向计算控制点...如何?
预先感谢您的任何提示。
我在“ 从三点创建曲线”的“贝塞尔曲线上的基础知识”一文中做了详细说明。部分,尽管您可能还需要阅读前两部分,因为它们解释了支持的理论和代码。
重要的信息是,对于任何给定的情况t,在{start,end}线上有一个固定点连接到曲线上的Bezier(t)点。在下面的图像,例如,点C是总是在从开始和结束相同的距离比。曲线的形状与放置控制点的位置无关,都无关紧要:在t=0.5标记处,C始终始终在起点和终点之间。另外,线段{ C,Bezier(t)}和线段{ Bezier(t),A} 的长度之比是固定的。因此,如果您知道前两点C以及Bezier(t)您要进行的工作,那么您会立即知道在哪里A 这样,您便拥有了所需的所有信息。
这样,您可以根据自己的喜好重新构建曲线,唯一的自由参数是切线处的切线t,或更准确地说,是左右插值距离。如果没有超过三个点,这几乎是一个估计值,并且有一些“美观”的选择,但这些都不适合您的情况:您在所选t值附近有很多点,然后您可以根据切线进行有根据的猜测在这些上,您可以使用该信息简单地重建三次贝塞尔曲线。
由于没有信息,安全的方法是根据De Casteljau算法说插值线段所在的位置来选择距离,并选择其中心:
但是根据您的数据,您可以得到更好的拟合度。