Как стать автором
Обновить

Разрежь пирог! Или как нам поможет принтер на вечеринке

После многократных торжеств и вечеринок, на которых мне приходилось поедать пироги и торты не единолично или вдвоем, мне стало сильно некомфортно наугад разрезать эти самые пироги с тортами.
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

Приятного аппетита!
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.