正如标题所说,我想在线性帧缓冲区(又名绘制像素)上绘制二次贝塞尔曲线。
我已经有了一个函数,可以根据https://www.joshondesign.com/2018/07/11/bezier-curves绘制三次贝塞尔曲线(我把javascript翻译成C,如下所示https://gist.github.com/cheyao/a736a58c4cf683eabea2aa2a87718ef1#file-cubic-c),它工作得很好。
现在我试着把它转换成绘制一条二次贝塞尔曲线(比如下面的https://gist.github.com/cheyao/a736a58c4cf683eabea2aa2a87718ef1#file-flatness-c),这对我来说看起来不太好(也不像曲线)。
我也试过像这样野蛮地强迫它
void quadratic_bezier_curve(const Vector2 p[3], const color_t color) {
for (double t = 0; t < 1; t += 0.001) {
putPixel((uint32_t) ((1 - t) * (1 - t) * p[0].x + 2 * (1 - t) * t * p[1].x + t * t * p[2].x),
(uint32_t) ((1 - t) * (1 - t) * p[0].y + 2 * (1 - t) * t * p[1].y + t * t * p[2].y), color);
}
}
这使得喜欢看大胆。
于是我的问题来了:有没有人知道一些更好的算法来绘制(二次)贝塞尔曲线?(我需要它的字体渲染。)
1条答案
按热度按时间jyztefdp1#
您的代码可以正常工作。发现一个错误,即对于平坦度,我们需要检查绝对值。还有一个打字错误,即
p[1].y
被使用了两次而不是一次。因此,它将如下所示:JS中的实时示例(单击“运行代码段”按钮,然后开始在画布上单击鼠标左键):