Search
Write a publication
Pull to refresh

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

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

Приятного аппетита!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.