我正在尝试在 HTML5 画布上绘制一个多彩的阿基米德螺旋线。
我的最终目标是对录音进行数据可视化,这将是一种静态的螺旋时间线。每种颜色代表录音中的一个事件。
我在网上查了很多天,但找不到真正符合我目标的东西。我习惯了 PHP,但不习惯 JS。我得到了在我的脚本中绘制螺旋的基本源代码。
关键是我从 json 数组中获取每种颜色的十六进制值和像素长度。
每个彩色部分应紧跟在螺旋之后,没有阴影效果。
我不知道如何获取最后一个彩色部分的结束位置以开始绘制新的颜色部分。以下代码的结果使所有颜色叠加。
谢谢你的帮助 !
这是我的 JS 代码:
var lengthOfColors = ["29.47965973","45.35332267","70.29765013"];
var colorCodes = ["#000","#807f29","#c0c0c0"]; // the real arrays are much longers
var c = document.getElementById('c');
var context = c.getContext("2d");
var centerx = context.canvas.width / 2;
var centery = context.canvas.height / 2;
$('#draw').click(function()
{
a = parseFloat($('#a').val());
b = parseFloat($('#b').val()); //The user can define Cosinus and Sinus
context.clearRect(0, 0, 600, 600);
context.beginPath();
context.moveTo(centerx, centery);
for (var beg = 0, end = lengthOfColors.length; beg < end; beg++)
{
for (i = 0; i < lengthOfColors[beg]; i++)
{
angle = 0.1 * i;//Angle of line rotation = 0.1
x = centerx + (a * angle) * Math.cos(angle);
y = centery + (b * angle) * Math.sin(angle);
context.lineTo(x, y);
}
context.strokeStyle = colorCodes[beg];
context.stroke();//draw the path
};
});
这是我的 HTML 代码:
<canvas id="c" width="600" height="600"></canvas>
<br/>
Cosinus: <input id="a" type="text" value='1'/>
<br/>
Sinus: <input id="b" type="text" value='1'/>
<br/>
<button id="draw">Draw</button>