在http://ancient-clock.stornge.com,我有打算在表盘针的角度上进行伪布朗运动,每次迭代将时钟顺时针移动一度,逆时针移动一度,或者不移动这个立即的。应该是做分形的“醉醺醺的”。
请注意,如果您加载页面,“令人震惊的醉酒”/“随机行走”图像会在屏幕外开始,但通常会在屏幕上错开。
那是问题 1。问题 2 是图表的各个部分都设置在 (0, 0) 并且我调用 ANCIENT_CLOCK.context.setTransform(1, 0, 0, 1, 0, 0); 重新开始,但手上还是散落的现身。
代码是:
var ANCIENT_CLOCK = {};
ANCIENT_CLOCK.dial_angle = 45;
ANCIENT_CLOCK.draw_clock = function()
{
ANCIENT_CLOCK.context.setTransform(1, 0, 0, 1, 0, 0);
ANCIENT_CLOCK.context.translate(100, 100);
var height_ratio = ANCIENT_CLOCK.clock_face.height /
jQuery(window).height();
var width_ratio = ANCIENT_CLOCK.clock_face.width /
jQuery(window).width();
var ratio = null;
if (height_ratio < width_ratio)
{
ratio = width_ratio;
}
else
{
ratio = height_ratio;
}
ratio = Math.max(1, 1 / ratio);
ANCIENT_CLOCK.context.scale(ratio, ratio);
ANCIENT_CLOCK.rendered_time = new Date();
ANCIENT_CLOCK.context.drawImage(ANCIENT_CLOCK.clock_face, 0, 0);
ANCIENT_CLOCK.context.setTransform(1, 0, 0, 1, 0, 0);
ANCIENT_CLOCK.context.translate(0, 0);
ANCIENT_CLOCK.hour_angle = ((ANCIENT_CLOCK.rendered_time
.getTime() % (86400 * 1000 / 24)) / (( 86400 * 1000 / 24) * Math.PI));
ANCIENT_CLOCK.context.setTransform(1, 0, 0, 1, 0, 0);
ANCIENT_CLOCK.context.translate(100, 100);
ANCIENT_CLOCK.context.rotate(2 * Math.PI * ANCIENT_CLOCK.hour_angle);
ANCIENT_CLOCK.context.drawImage(ANCIENT_CLOCK.hour_hand, 0, 0);
ANCIENT_CLOCK.context.setTransform(1, 0, 0, 1, 0, 0);
ANCIENT_CLOCK.context.translate(0, 0);
ANCIENT_CLOCK.minute_angle = ((ANCIENT_CLOCK.rendered_time
.getTime() % (86400 * 1000 * 60)) /
(86400 * 1000 * 60));
ANCIENT_CLOCK.context.rotate(2 * Math.PI *
ANCIENT_CLOCK.minute_angle);
ANCIENT_CLOCK.context.drawImage(ANCIENT_CLOCK.minute_hand, 0, 0);
ANCIENT_CLOCK.context.setTransform(1, 0, 0, 1, 0, 0);
ANCIENT_CLOCK.context.translate(0, 0);
ANCIENT_CLOCK.second_angle = (ANCIENT_CLOCK.rendered_time
.getTime() % 86400 * 1000 * 3600) / (86400 * 1000 * 3600);
ANCIENT_CLOCK.context.drawImage(ANCIENT_CLOCK.second_hand, 1000, 300);
ANCIENT_CLOCK.context.setTransform(1, 0, 0, 1, 0, 0);
if (ANCIENT_CLOCK.dial_angle < 1)
{
if (Math.random() < .5)
{
ANCIENT_CLOCK.dial_angle += 1;
}
}
else if (ANCIENT_CLOCK.dial_angle > 90)
{
if (Math.random() > .5)
{
ANCIENT_CLOCK.dial_angle -= 1;
}
}
else
{
if (Math.random() < 1 / 3)
{
ANCIENT_CLOCK.dial_angle += 1;
}
else if (Math.random() < .5)
{
ANCIENT_CLOCK.dial_angle -= 1;
}
}
ANCIENT_CLOCK.context.setTransform(1, 0, 0, 1, 0, 0);
ANCIENT_CLOCK.context.translate(0, 0);
ANCIENT_CLOCK.context.rotate((ANCIENT_CLOCK.dial_angle / 90) *
(Math.PI / 4) + Math.PI / 8);
ANCIENT_CLOCK.context.drawImage(ANCIENT_CLOCK.dial_hand, 100,
100);
ANCIENT_CLOCK.context.setTransform(1, 0, 0, 1, 0, 0);
}