You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确填充Canvas中两个半椭圆之间的区域实现圆柱效果

问题原因

当前填充出现扭曲,是因为Canvas 2D上下文的路径默认是连续拼接的:你先后绘制两个独立半椭圆时,前一个路径的终点会自动和后一个路径的起点相连,导致填充区域的边界不符合预期。

解决方法

手动将两个半椭圆的侧边连接,形成完整的闭合路径再填充,即可得到顶部无远侧边的圆柱效果。

修改后的代码如下:

HTML 代码

<canvas id="canvas"></canvas>

JS 代码

const canvas = document.getElementById("canvas"),
      ctx = canvas.getContext("2d");

canvas.width = canvas.height = 300;
ctx.beginPath();
// 绘制上方半椭圆(左到右的上弧,终点落在右侧(300, 0))
ctx.ellipse(150, 0, 150, 90, 0, 0, Math.PI);
// 连接到下方半椭圆的右端点
ctx.lineTo(300, 200);
// 逆时针绘制下方半椭圆,从右到左走下弧,终点落在左侧(0, 200)
ctx.ellipse(150, 200, 150, 90, 0, Math.PI, 0, true);
// 连接回上方半椭圆的左端点,闭合整个路径
ctx.lineTo(0, 0);

ctx.fillStyle = "lightgreen";
ctx.fill();
ctx.stroke();

代码说明

ellipse方法的第8个参数为anticlockwise,设为true后,下方半椭圆会从右向左绘制,刚好和上下两条侧边的路径衔接成完整的闭合区域,填充后就是你需要的圆柱效果。

内容的提问来源于stack exchange,提问作者vanowm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:15:04