Canvas绘制极坐标图形需将θ、r转为x= cx + r×cos(θ)、y= cy + r×sin(θ),通过角度映射控制对称性与动态节奏,支持单/多点圆周运动、半径颜色随θ变化、螺旋生成及性能优化。

Canvas 绘制极坐标图形,核心在于把角度(θ)和半径(r)映射为直角坐标(x, y),再用 arc、lineTo 或 moveTo 等方法落点绘图。圆周运动本质就是极坐标到笛卡尔坐标的实时转换,而角度映射则决定了图形的对称性、密度与动态节奏。
圆周运动:用三角函数算位置
让一个点绕固定中心做匀速圆周运动,只需按帧更新其极角,再转成像素坐标:
- 设圆心为 (cx, cy),轨道半径为 r,当前角度为 θ(单位:弧度)
- 则点的位置是:x = cx + r × cos(θ),y = cy + r × sin(θ)
- 每帧让 θ 增加一个固定增量(如
0.05),就能实现平滑旋转 - 若想变速或反向,改增量正负号或用非线性函数(如
θ += 0.02 * Math.sin(time * 0.3))
多点圆周运动:错开相位更自然
单点转圈容易单调;多个点同半径但不同初始角度,会产生节奏感和空间层次:
- 创建 n 个点,各自初始角度设为
i * (2 * Math.PI / n)(等分圆周) - 或随机偏移:
Math.random() * Math.PI * 2,让运动不完全同步 - 也可让半径也随机:
r = baseR + Math.random() * 20,增强立体错落感 - 注意:清画布后重绘全部点,避免残留轨迹干扰视觉
角度映射:控制图形结构的关键
角度不只是用来转圈,它可作为输入变量驱动其他参数,形成复杂极坐标图案:
-
半径随角度变化:比如
r = 50 + 30 * Math.sin(5 * θ),画出五瓣玫瑰线 -
颜色/大小映射角度:用
hsl(θ * 180 / Math.PI, 80%, 60%)实现色相渐变 -
跳过某些角度区间:加条件判断,只在
θ % (Math.PI/2) > 0.1时绘点,生成空隙式图案 -
角度缩放实现螺旋:把 θ 同时用于 cos/sin 和 r 计算,例如
r = 0.5 * θ,就得到阿基米德螺旋
性能与渲染细节建议
极坐标计算本身轻量,但高频重绘需注意优化:
- 避免在 draw 循环里重复创建对象或调用
Math.sin/cos多次——提前算好或缓存常用值 - 大量点运动时,考虑用
beginPath()+ 批量lineTo()替代多个arc(),减少状态切换 - 需要抗锯齿效果时,启用
ctx.imageSmoothingEnabled = false可提升小圆点清晰度(视需求) - 动画用
requestAnimationFrame,别用setInterval,确保帧率稳定且省电


















