当前位置:首页 > JavaScript

js实现玫瑰

2026-02-01 03:19:58JavaScript

使用Canvas绘制玫瑰曲线

在JavaScript中,可以通过Canvas绘制玫瑰曲线(Rose Curve)。玫瑰曲线是极坐标下的一种数学曲线,方程为 \( r = a \cdot \cos(k \theta) \) 或 \( r = a \cdot \sin(k \theta) \)。

const canvas = document.createElement('canvas');
canvas.width = 400;
canvas.height = 400;
document.body.appendChild(canvas);

const ctx = canvas.getContext('2d');
ctx.translate(canvas.width / 2, canvas.height / 2);

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 = r * Math.cos(theta) * 50;
        const y = r * Math.sin(theta) * 50;
        if (theta === 0) {
            ctx.moveTo(x, y);
        } else {
            ctx.lineTo(x, y);
        }
    }
    ctx.strokeStyle = color;
    ctx.stroke();
}

drawRose(5, 1, 'red');

参数说明

  • \( k \):控制花瓣的数量和形状。若为整数,表示花瓣数;若为分数,形状更复杂。
  • \( a \):控制曲线的大小。
  • 调整 theta 的步长(如 0.01)可改变曲线的平滑度。

动态生成玫瑰

通过动画循环动态改变参数,可生成动态玫瑰效果:

let angle = 0;
function animate() {
    ctx.clearRect(-200, -200, 400, 400);
    drawRose(5, Math.sin(angle) * 2 + 3, 'red');
    angle += 0.05;
    requestAnimationFrame(animate);
}
animate();

使用SVG绘制玫瑰

SVG也可实现玫瑰曲线,适合矢量图形场景:

js实现玫瑰

<svg width="400" height="400" viewBox="-200 -200 400 400">
    <path id="rose" fill="none" stroke="blue" stroke-width="1"/>
</svg>

<script>
    const svgPath = document.getElementById('rose');
    let pathData = '';
    const k = 3, a = 100;
    for (let theta = 0; theta < Math.PI * 8; theta += 0.05) {
        const r = a * Math.sin(k * theta);
        const x = r * Math.cos(theta);
        const y = r * Math.sin(theta);
        pathData += (theta === 0 ? 'M' : 'L') + x + ' ' + y + ' ';
    }
    svgPath.setAttribute('d', pathData);
</script>

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

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…