python画旋转六边形_Canvas 彩虹六边形旋转

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

(function() {

var lastTime = 0;

var vendors = ['ms', 'moz', 'webkit', 'o'];

for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {

window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];

window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];

}

if (!window.requestAnimationFrame)

window.requestAnimationFrame = function(callback, element) {

var currTime = new Date().getTime();

var timeToCall = Math.max(0, 16 - (currTime - lastTime));

var id = window.setTimeout(function() {

callback(currTime + timeToCall);

},

timeToCall);

lastTime = currTime + timeToCall;

return id;

};

if (!window.cancelAnimationFrame)

window.cancelAnimationFrame = function(id) {

clearTimeout(id);

};

}());

// ends requestAnimationFrame polyfill

var rad = (Math.PI / 180);

var R = 50;

var H = Math.sqrt(3) * R;

var W = 2 * R;

var S = 3 / 2 * R;

var a = 0;

var A = 60;

var n = 60;

var h = 0;

var speed = 6;

var stopped = true;

var level = 0;

var c = document.getElementById("c");

var ctx = c.getContext("2d");

var cw = c.width = 500,

cX = cw / 2;

var ch = c.height = 500,

cY = ch / 2;

/*function marker(x,y){

ctx.beginPath();

ctx.arc(x,y,3,0,2*Math.PI);

ctx.stroke();

}

*/

function drawHex(X, Y, a) {

ctx.fillStyle = "hsl(" + a + ",100%,50%)";

ctx.beginPath();

for (var i = 0; i < 6; i++) {

var x = X + ~~(R * .8) * Math.cos(rad * (i * 60 + a));

var y = Y + ~~(R * .8) * Math.sin(rad * (i * 60 + a));

ctx.lineTo(x, y);

}

ctx.closePath();

ctx.fill();

//marker(X,Y)

}

function buildRy(A) {

var hexRy = [];

// 0.

hexRy[0] = {

x: cX,

y: cY,

a: A,

level: 0

}

// 1

for (i = 30; i < 360; i += 60) {

A = (A < 300) ? A += n : 0;

var x = cX + H * Math.cos(i * rad);

var y = cY + H * Math.sin(i * rad);

hexRy[hexRy.length] = {

x: x,

y: y,

a: A,

level: 1

}

}

// 2

var pRy2 = [];

for (i = 30; i < 360; i += 60) {

var c = pRy2.length;

pRy2[c] = {}

pRy2[c].x = cX + 2 * H * Math.cos(i * rad);

pRy2[c].y = cY + 2 * H * Math.sin(i * rad);

}

for (i = 0; i < pRy2.length; i++) {

var k = (i - 1 >= 0) ? i - 1 : pRy2.length - 1

A = (A < 300) ? A += n : 0;

var c = hexRy.length;

hexRy[c] = {

x: pRy2[k].x,

y: pRy2[k].y,

a: A,

level: 2

}

A = (A < 300) ? A += n : 0;

var x = (pRy2[k].x - pRy2[i].x) / 2 + pRy2[i].x;

var y = (pRy2[k].y - pRy2[i].y) / 2 + pRy2[i].y;

hexRy[c + 1] = {

x: x,

y: y,

a: A,

level: 2

}

}

return hexRy;

}

function Draw() {

ctx.clearRect(0, 0, cw, ch)

a += speed;

for (i = 0; i < hexRy.length; i++) {

if (a <= 180 && hexRy[i].level == level) {

drawHex(hexRy[i].x, hexRy[i].y, hexRy[i].a + a);

} else {

drawHex(hexRy[i].x, hexRy[i].y, 0);

}

if (a == 180) {

if (level == 3) {

level = 0;

} else {

level++;

}

a = 0;

}

}

requestId = window.requestAnimationFrame(Draw);

}

function start() {

A = 0, a = 0;

hexRy = buildRy(A);

requestId = window.requestAnimationFrame(Draw);

stopped = false;

}

function stopAnim() {

hexRy = [];

if (requestId) {

window.cancelAnimationFrame(requestId);

}

stopped = true;

}

window.addEventListener("load", start, false);

c.addEventListener("click", function() {

(stopped == true) ? start(): stopAnim();

}, false);


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部