我們可以做的不僅僅是圓形或方形!爲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時,你的形狀越來越塊,而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>
來源
2016-10-26 15:14:20
Rob