我最近一直在玩画布,并使用与这些曲线相关的方法绘制了几种形状(泪滴、花瓣、云、岩石)。话虽如此,我似乎无法弄清楚这些不同曲线的用例之间的区别。
我知道三次贝塞尔曲线有 2 个控制点、一个起点和一个端点,而二次贝塞尔曲线有一个控制点、一个起点和一个终点。但是,在绘制形状时,我似乎无法轻易决定使用哪一个或何时结合使用它们。
我如何知道在绘制形状的不同点使用哪种类型的曲线?
我最近一直在玩画布,并使用与这些曲线相关的方法绘制了几种形状(泪滴、花瓣、云、岩石)。话虽如此,我似乎无法弄清楚这些不同曲线的用例之间的区别。
我知道三次贝塞尔曲线有 2 个控制点、一个起点和一个端点,而二次贝塞尔曲线有一个控制点、一个起点和一个终点。但是,在绘制形状时,我似乎无法轻易决定使用哪一个或何时结合使用它们。
我如何知道在绘制形状的不同点使用哪种类型的曲线?
正如您所发现的,二次曲线和三次贝塞尔曲线都只是将 2 个点与一条曲线连接起来。
由于三次曲线具有更多控制点,因此在这两个点之间的路径更加灵活。
例如,假设您要绘制这个字母“R”:
从 R 的“非曲线”部分开始绘制:
现在尝试用二次曲线绘制曲线。
请注意,二次曲线比我们想要的更“尖”。
那是因为我们只有 1 个控制点来定义二次曲线。
现在尝试用三次贝塞尔曲线绘制曲线。
三次贝塞尔曲线比二次曲线更圆润。
那是因为我们有 2 个控制点来定义三次曲线。
所以......更多的控制点可以更好地控制“曲线”
这是代码和小提琴:http: //jsfiddle.net/m1erickson/JpXZW/
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; padding:20px; }
#canvas{border:1px solid red;}
</style>
<script>
$(function(){
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
ctx.lineWidth=8;
ctx.lineCap="round";
function baseR(){
ctx.clearRect(0,0,canvas.width,canvas.height);
ctx.beginPath();
ctx.moveTo(30,200);
ctx.lineTo(30,50);
ctx.lineTo(65,50);
ctx.moveTo(30,120);
ctx.lineTo(65,120);
ctx.lineTo(100,200);
ctx.strokeStyle="black";
ctx.stroke()
}
function quadR(){
ctx.beginPath();
ctx.moveTo(65,50);
ctx.quadraticCurveTo(130,85,65,120);
ctx.strokeStyle="red";
ctx.stroke();
}
function cubicR(){
ctx.beginPath();
ctx.moveTo(65,50);
ctx.bezierCurveTo(120,50,120,120,65,120);
ctx.strokeStyle="red";
ctx.stroke();
}
$("#quad").click(function(){
baseR();
quadR();
//cubicR();
});
$("#cubic").click(function(){
baseR();
cubicR();
});
}); // end $(function(){});
</script>
</head>
<body>
<button id="quad">Use Quadratic curve</button>
<button id="cubic">Use Cubic Bezier curve</button><br><br>
<canvas id="canvas" width=150 height=225></canvas>
</body>
</html>
我知道这篇文章有点晚了。但似乎仍然缺少关于二次和三次贝塞尔曲线的一些重要方面。所以....
使用二次贝塞尔曲线,您将永远无法使两端斜率平行。但是你可以用三次贝塞尔曲线来实现。此外,三次贝塞尔曲线允许您单独控制两个端部斜率,这对于二次贝塞尔曲线也是不可能的。但是,二次贝塞尔曲线永远不会有拐点(曲率符号发生变化的点),而三次贝塞尔曲线可能有拐点,如果您不小心控制点。因此,总而言之,三次贝塞尔曲线比二次贝塞尔曲线更受欢迎,因为它具有灵活性。当单调曲率很重要时,将使用二次贝塞尔曲线(更常见的是有理二次贝塞尔曲线)。