当前位置:首页 > 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实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…

js 实现按钮点击

js 实现按钮点击

实现按钮点击的 JavaScript 方法 HTML 按钮元素 在 HTML 中创建一个按钮,可以通过 <button> 或 <input> 标签实现: <button…