gpt4 book ai didi

javascript - Canvas ,使用正弦波沿方形路径为形状设置动画

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:32:44 25 4
gpt4 key购买 nike

我正在尝试根据设置的“半径”使一个简单的形状沿着方形路径进行动画处理。 Atm 我正在使用正弦波随时间设置位置,因此它基本上是沿着圆形路径设置动画。有没有办法使用数学来改变正弦波来制作动画方 block 。我知道还有其他方法可以做到这一点,但我有兴趣了解它背后的数学原理。

我有一个 fiddle 示例:

t = new Date().getTime()

r = 25

x = (r * Math.cos t * 0.005)
y = (r * Math.sin t * 0.005)

http://jsfiddle.net/Z5hrM/1/

最佳答案

我们可以做得比圆形或方形更好! x 和 y 的方程可以用指数 D 推广:

 x = (r^D * cos(theta))^(1/D) and y = (r^D * sin(theta))^(1/D)

当 D = 1 时,您会得到熟悉的圆方程。当 D = 0.5 时,您会得到钻石,当 D < 0.5 时,您会得到尖星。当 D > 1 时,你会得到越来越多的 block 状,而当 D -> 无穷大时,你会得到一个正方形。试试这个片段;随着动画的进行,您可以键入 D 的新值。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>animation problem</title>
<script type='text/javascript'>
function demo(){
var w = 400;
var ctx = document.getElementById("canvas").getContext("2d");
ctx.canvas.width = w;
ctx.canvas.height = w;
var r = w/4;
var theta = 0;

setInterval(function(){
ctx.canvas.width += 0; // clear the canvas
ctx.translate(w/2, w/2); // center it on (0,0)
var D = +document.getElementById("exponent").value;

var xSign = Math.cos(theta) < 0 ? -1 : 1; // Handle all quadrants this way
var ySign = Math.sin(theta) < 0 ? -1 : 1;
var x = xSign*Math.pow( Math.pow(r, D)*Math.abs(Math.cos(theta)), 1/D );
var y = ySign*Math.pow( Math.pow(r, D)*Math.abs(Math.sin(theta)), 1/D );
ctx.fillStyle = "blue";
ctx.arc( x, y, 20, 0, 6.2832, false );
ctx.fill();

theta += Math.PI/100;
}, 20);
}
</script>
</head>
<body onload='demo()'>
<input id='exponent' type=text value='1'\>
<br />
<canvas id='canvas'></canvas>
</body>
</html>

关于javascript - Canvas ,使用正弦波沿方形路径为形状设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24085310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com