当前位置:首页 > 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心形线
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现倒计时

js实现倒计时

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

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js实现跳转

js实现跳转

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

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-contain…