0
가 어떻게 캔버스가최적화 캔버스 애니메이션 (사인 곡선)
var canvas = document.getElementById("sinewave");
var points = {};
var counter = 0;
var intensity = 0;
function f(x, intensity) {
return intensity * Math.sin(0.25 * x) + 100;
}
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.strokeStyle = '#fff';
ctx.lineWidth = 2;
var x = 0,
y = f(0,0);
var timeout = setInterval(function() {
if(counter < 400) {
ctx.beginPath();
ctx.moveTo(x, y);
x += 1;
y = f(x, intensity);
points[x] = y;
ctx.lineTo(x, y);
ctx.stroke();
if (x > 1000) {
clearInterval(timeout);
}
} else {
ctx.clearRect(0, 0, 400, 200);
ctx.beginPath();
points[x] = y;
x += 1;
y = f(x, intensity);
for(var i = 0; i < 400; i++) {
ctx.lineTo(i, points[i + counter - 400]);
}
ctx.stroke();
}
counter++;
}, 5);
}
AMAZING! 감사합니다. 방정식을 통해 함수의 높이를 제한하는 방법을 제안해도 친절합니까? 그래도 100000의 강도로 캔버스 높이보다 높지는 않습니다. – Leg0
여러분을 환영합니다! 최대/최소 사인 값은 1.00 및 -1.00입니다. 따라서 f()에서 뒤로 작업 : minIntensity = 100 및 maxIntensity = canvas.height-100. 이 최소값/최대 값 이외의 값을 사용하려면 밝기 값을 스케일해야합니다 (x 값이 계산 당 1 픽셀 씩 증가하기 때문에 웨이브가 왜곡됩니다). – markE