当前位置:首页 > JavaScript

js实现玫瑰

2026-04-05 19:42:49JavaScript

以下是使用JavaScript绘制玫瑰图案的几种方法,结合数学公式和Canvas绘图实现:

极坐标玫瑰曲线

玫瑰曲线(Rose Curve)的极坐标方程为: $ r = a \cdot \cos(k\theta) $ 或 $ r = a \cdot \sin(k\theta) $ 其中$k$控制花瓣数量,$a$控制大小。

const canvas = document.createElement('canvas');
document.body.appendChild(canvas);
const ctx = canvas.getContext('2d');
canvas.width = 400;
canvas.height = 400;

function drawRose(k, a, color) {
  ctx.beginPath();
  for (let theta = 0; theta < Math.PI * 2; theta += 0.01) {
    const r = a * Math.cos(k * theta);
    const x = 200 + r * Math.cos(theta) * 20;
    const y = 200 + r * Math.sin(theta) * 20;
    ctx.lineTo(x, y);
  }
  ctx.closePath();
  ctx.fillStyle = color;
  ctx.fill();
}

drawRose(5, 1, 'pink'); // 5瓣玫瑰

参数方程实现

使用参数方程生成更复杂的玫瑰形态: $ x = \sin(\theta) \cdot \cos(\theta) \cdot \log(\theta) $ $ y = \theta \cdot \cos(\theta) $

ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
for (let theta = 0.1; theta < 20; theta += 0.1) {
  const x = 200 + Math.sin(theta) * Math.cos(theta) * Math.log(theta) * 30;
  const y = 200 + theta * Math.cos(theta) * 3;
  ctx.lineTo(x, y);
}
ctx.strokeStyle = 'red';
ctx.stroke();

使用三次贝塞尔曲线

通过贝塞尔曲线手动构建玫瑰花瓣:

function drawPetal(x, y, size, angle) {
  ctx.save();
  ctx.translate(x, y);
  ctx.rotate(angle);

  ctx.beginPath();
  ctx.moveTo(0, 0);
  ctx.bezierCurveTo(
    size * 0.5, size * 0.2,
    size * 0.8, size * 0.5,
    size * 0.4, size * 1
  );
  ctx.bezierCurveTo(
    size * 0.2, size * 0.8,
    size * 0.1, size * 0.5,
    0, 0
  );
  ctx.fillStyle = 'rgba(255,100,100,0.7)';
  ctx.fill();

  ctx.restore();
}

// 绘制多个花瓣组成玫瑰
for (let i = 0; i < 8; i++) {
  drawPetal(200, 200, 80, Math.PI * 2 / 8 * i);
}

SVG路径生成

生成SVG格式的玫瑰路径:

function generateSVGRose(petals) {
  let path = '';
  const a = 50;

  for (let theta = 0; theta < Math.PI * 2; theta += 0.01) {
    const r = a * Math.cos(petals * theta);
    const x = 100 + r * Math.cos(theta);
    const y = 100 + r * Math.sin(theta);
    path += (theta === 0 ? 'M' : 'L') + x + ',' + y;
  }

  return `<svg width="200" height="200">
    <path d="${path}z" fill="coral"/>
  </svg>`;
}

document.body.innerHTML += generateSVGRose(7);

以上方法可根据需要调整参数:

js实现玫瑰

  • 修改$k$值改变花瓣数量
  • 调整$a$值改变花朵大小
  • 修改颜色和透明度实现渐变效果
  • 添加动画效果使玫瑰旋转或绽放

标签: 玫瑰js
分享给朋友:

相关文章

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…

js 实现验证码

js 实现验证码

实现验证码的 JavaScript 方法 生成随机验证码 验证码通常由随机字符(数字、字母或混合)组成。以下代码生成一个 6 位随机验证码(数字和字母混合): function generateCa…