После многократных торжеств и вечеринок, на которых мне приходилось поедать пироги и торты не единолично или вдвоем, мне стало сильно некомфортно наугад разрезать эти самые пироги с тортами.
2, 4, 8 едоков еще как-то получали вполне равные куски. А вот 3, 5, 6, 7, 9 и больше могли получить сильно разные или равные, но бешено изрубленные кусочки.
И вот я подумал, что если у меня есть компьютер и принтер под рукой (на пикник я обычно с тортиком не прихожу), то домочадцы, сослуживцы и гости моей домашней вечеринки могут получить очень симпатичные дольки праздника. Вот так и пришла в голову идейка написать простейший скрипт и выдать его на всеобщее обозрение. Используя школьный курс геометрии, javascript и HTML5, я сочинил вот это:
Работающий пример на страничке http://btr71.narod.ru/cut_the_cake.html
Приятного аппетита!
2, 4, 8 едоков еще как-то получали вполне равные куски. А вот 3, 5, 6, 7, 9 и больше могли получить сильно разные или равные, но бешено изрубленные кусочки.
И вот я подумал, что если у меня есть компьютер и принтер под рукой (на пикник я обычно с тортиком не прихожу), то домочадцы, сослуживцы и гости моей домашней вечеринки могут получить очень симпатичные дольки праздника. Вот так и пришла в голову идейка написать простейший скрипт и выдать его на всеобщее обозрение. Используя школьный курс геометрии, javascript и HTML5, я сочинил вот это:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Cache-Control" content="private">
<meta http-equiv="Pragma" content="no-cache">
<title>Cut the Cake</title>
</head>
<body>
<fieldset>
<input type="text" id="NumCuts" alt="Number of Cuts" />
<input type="button" id="Cut" name="Cut" value="Cut!" onclick="CutTheCake()" />
</fieldset>
<canvas id="myCanvas" width="800" height="800" style="border:1px solid #0000FF;"></canvas>
<script type="text/javascript">
var cdoc=document.getElementById("myCanvas");
var ctx=cdoc.getContext("2d");
ctx.strokeStyle="#0000FF";
var Xc=400;
var Yc=400;
var radius=400;
function CutTheCake(){
var NumCuts=document.getElementById("NumCuts").value;
if (isNumber(NumCuts)) {
ctx.clearRect(0,0,2*radius,2*radius);
for (var i=0; i<NumCuts; i++) {
var Xi=Xc+Math.cos((3.14159265389793*2*i)/NumCuts)*radius;
var Yi=Yc+Math.sin((3.14159265389793*2*i)/NumCuts)*radius;
ctx.beginPath();
ctx.moveTo(Xc, Yc);
ctx.lineTo(Xi, Yi);
ctx.stroke();
}
var img=cdoc.toDataURL("image/png");
var nw=window.open("", "For printing", "toolbar=no,menubar=no,innerWidth=800,innerHeight=800");
nw.document.write('<img src="' + img +'"/>');
nw.print();
}
return false;
}
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
</script>
</body>
</html>
Работающий пример на страничке http://btr71.narod.ru/cut_the_cake.html
Приятного аппетита!