我正在构建一个JavaScript模块,以便为HTML5 canvas元素添加便利功能。我试图尽可能多地提供不同的实现来填写我的模块。要查看我的进度,请访问我的project page和我的examples page。
我有一个使用三次贝塞尔曲线的椭圆绘制方法。我知道二次贝塞尔曲线可以转换成三次贝塞尔曲线,但我有一些问题:
P.S。这不是直接相关的,但是在这样的模块中是否还有其他任何功能?
注意:这是不作业。
编辑:这是我的椭圆代码(xDis是半径x,yDis是半径y):
function ellipse(x, y, xDis, yDis) {
var kappa = 0.5522848, // 4 * ((√(2) - 1) / 3)
ox = xDis * kappa, // control point offset horizontal
oy = yDis * kappa, // control point offset vertical
xe = x + xDis, // x-end
ye = y + yDis; // y-end
this.moveTo(x - xDis, y);
this.bezierCurveTo(x - xDis, y - oy, x - ox, y - yDis, x, y - yDis);
this.bezierCurveTo(x + ox, y - yDis, xe, y - oy, xe, y);
this.bezierCurveTo(xe, y + oy, x + ox, ye, x, ye);
this.bezierCurveTo(x - ox, ye, x - xDis, y + oy, x - xDis, y);
}
相关问题:
答案 0 :(得分:1)
三次贝塞尔曲线比二次曲线有两个degrees of freedom。因此可以进一步减少误差。虽然选择控制点的数学变得越复杂,但曲线的程度越高,立方曲线应该足够简单。
性能差异不大。还有一些乘法和补充。
虽然这可以通过旋转平面来实现,但能够指定椭圆的轴是很好的。一个中心和两个轴将形成椭圆center + cos(t)*axis1 + sin(t)*axis2
。
库的另一个特征可能是不同种类的多项式曲线和样条。 B-spline类似于贝塞尔曲线,但可以沿多个控制点继续。
答案 1 :(得分:0)
如果它是一个椭圆椭圆,那么绘制椭圆的标准参数形式是不是更容易,如果它具有非规范方向,则将结果通过旋转变换?