मैं जितना संभव हो सके सर्कल में ज्यादा हेक्सागोन लगाने का प्रयास ढूंढ रहा हूं। अब तक का सबसे अच्छा परिणाम प्राप्त हुआ है जो केंद्र से हेक्सागोन को एक गोलाकार आकार में उत्पन्न कर रहा है।हेक्सागोन के साथ सर्कल भरना
लेकिन मैं अधिकतम षट्भुज हलकों गलत है, विशेष रूप से हिस्सा है जहाँ मैं Math.ceil()
और Math.Floor
कार्यों का उपयोग नीचे/ऊपर कुछ मान दौर को पाने के लिए मेरी गणना के बारे में सोचो।
Math.ceil()
का उपयोग करते समय हेक्सागोन कभी-कभी सर्कल को ओवरलैप कर रहे होते हैं।
दूसरी तरफ Math.floor()
का उपयोग करते समय, यह कभी-कभी हेक्सागोन के अंतिम चक्र और सर्कल की सीमा के बीच बहुत अधिक जगह छोड़ देता है।
var c_el = document.getElementById("myCanvas");
var ctx = c_el.getContext("2d");
var canvas_width = c_el.clientWidth;
var canvas_height = c_el.clientHeight;
var PI=Math.PI;
var PI2=PI*2;
var hexCircle = {
\t r: 110, /// radius
\t pos: {
\t \t x: (canvas_width/2),
\t \t y: (canvas_height/2)
\t }
};
var hexagon = {
\t r: 20,
\t pos:{
\t \t x: 0,
\t \t y: 0
\t },
\t space: 1
};
drawHexCircle(hexCircle, hexagon);
function drawHexCircle(hc, hex) {
\t drawCircle(hc);
\t var hcr = Math.ceil(Math.sqrt(3) * (hc.r/2));
var hr = Math.ceil((Math.sqrt(3) * (hex.r/2))) + hexagon.space; // hexRadius
\t var circles = Math.ceil((hcr/hr)/2);
drawHex(hc.pos.x , hc.pos.y, hex.r); //center hex ///
\t for (var i = 1; i<=circles; i++) {
\t \t for (var j = 0; j<6; j++) {
\t \t \t var currentX = hc.pos.x+Math.cos(j*PI2/6)*hr*2*i;
\t \t \t var currentY = hc.pos.y+Math.sin(j*PI2/6)*hr*2*i;
\t \t \t drawHex(currentX,currentY, hex.r);
\t \t \t for (var k = 1; k<i; k++) {
\t \t \t \t var newX = currentX + Math.cos((j*PI2/6+PI2/3))*hr*2*k;
\t \t \t \t var newY = currentY + Math.sin((j*PI2/6+PI2/3))*hr*2*k;
\t \t \t \t drawHex(newX,newY, hex.r);
\t \t \t }
\t \t }
\t }
}
function drawHex(x, y, r){
ctx.beginPath();
ctx.moveTo(x,y-r);
for (var i = 0; i<=6; i++) {
ctx.lineTo(x+Math.cos((i*PI2/6-PI2/4))*r,y+Math.sin((i*PI2/6-PI2/4))*r);
}
ctx.closePath();
ctx.stroke();
}
function drawCircle(circle){
\t ctx.beginPath();
\t ctx.arc(circle.pos.x, circle.pos.y, circle.r, 0, 2 * Math.PI);
\t ctx.closePath();
\t ctx.stroke();
}
<canvas id="myCanvas" width="350" height="350" style="border:1px solid #d3d3d3;">