当前位置:首页 > JavaScript

js实现心形线

2026-01-31 15:03:23JavaScript

使用Canvas绘制心形线

在JavaScript中,可以通过Canvas API绘制心形线(Cardioid)。以下是基于极坐标方程的完整实现代码:

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

const ctx = canvas.getContext('2d');
ctx.translate(200, 200);
ctx.scale(1, -1); // 翻转Y轴

// 心形线参数方程
function heart(t) {
    return {
        x: 16 * Math.pow(Math.sin(t), 3),
        y: 13 * Math.cos(t) - 5 * Math.cos(2*t) - 2 * Math.cos(3*t) - Math.cos(4*t)
    };
}

ctx.beginPath();
for (let t = 0; t < 2 * Math.PI; t += 0.01) {
    const point = heart(t);
    ctx.lineTo(point.x * 10, point.y * 10); // 放大10倍
}
ctx.closePath();

ctx.fillStyle = 'red';
ctx.fill();

使用SVG绘制动态心形

通过SVG和JavaScript结合可以创建动态效果:

const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.setAttribute("width", "400");
svg.setAttribute("height", "400");
document.body.appendChild(svg);

const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
svg.appendChild(path);

function updateHeart(scale) {
    let d = "";
    for (let t = 0; t < 2 * Math.PI; t += 0.1) {
        const x = 16 * Math.pow(Math.sin(t), 3) * scale;
        const y = (13 * Math.cos(t) - 5 * Math.cos(2*t) - 2 * Math.cos(3*t) - Math.cos(4*t)) * scale;
        d += (t === 0 ? "M" : "L") + (x + 200) + "," + (200 - y);
    }
    path.setAttribute("d", d + "Z");
    path.setAttribute("fill", "pink");
    path.setAttribute("stroke", "red");
}

let scale = 1;
setInterval(() => {
    scale = 0.8 + 0.2 * Math.sin(Date.now() / 500);
    updateHeart(scale);
}, 20);

数学参数方程说明

心形线的常用参数方程有以下两种形式:

js实现心形线

笛卡尔坐标系方程: [ (x^2+y^2-1)^3-x^2y^3=0 ]

极坐标方程: [ r = a(1 - \cosθ) ]

js实现心形线

代码中使用的参数方程是经过优化的心形曲线方程: [ \begin{cases} x = 16\sin^3θ \ y = 13\cosθ - 5\cos2θ - 2\cos3θ - \cos4θ \end{cases} ]

实现注意事项

绘制时需要处理坐标系转换,浏览器中Y轴默认向下为正方向,通常需要翻转Y轴。

对于动画效果,可以通过requestAnimationFrame实现平滑过渡,而不是使用setInterval。

心形线参数中的系数可以调整以获得不同形状的心形,例如修改Y轴方程中的13,5,2,1等系数会改变心形的胖瘦程度。

标签: js心形线
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现论坛

js实现论坛

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

js实现百叶窗

js实现百叶窗

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

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…