相关live-javascript/jsbin:http: //jsbin.com/ekuyam/2/edit
我基本上只是在相对于画布中心的六边形中生成点,然后在六边形的每个点上绘制圆圈,但仔细观察这些圆圈并没有正确对齐,除非你使用大圆圈,否则它实际上并不可见。
当我使用小圆圈时,它们似乎非常准确地放置在画布上,如下所示:
但是通过使用更大的圆圈(有点像放大)进行仔细检查,发现数学中存在一些不准确之处,这可以从这里不需要的空间/区域看出:
线条应该完美对齐,但我得到了一些不需要的空间。为什么会这样,我该如何修改?
代码:
function hexagon(w, h, p) {
var points = 6;
var width = w;
var height = h;
var angle = ((2 * Math.PI) / points);
var hexagon = [];
for (i = 0; i < points; i++) {
hexagon.push({
x: width * Math.sin(angle * i) + p.x,
y: height * Math.cos(angle * i) + p.y
})
}
return hexagon
}
var stage = new Kinetic.Stage({
container: "container",
width: 600,
height: 600
});
var layer = new Kinetic.Layer();
var group = new Kinetic.Group({x: 600/2, y: 600/2, draggable: false});
var radius = 1000;
var s = new Kinetic.Circle({
radius: radius,
stroke: 'black',
strokeWidth: 1,
draggable: true
});
group.add(s);
var hex_points = hexagon(radius, radius, {x: 600/2, y: 600/2});
for (p in hex_points) {
var s = new Kinetic.Circle({
radius: radius,
stroke: 'black',
strokeWidth: 1,
draggable: true
});
s.setPosition({x: hex_points[p].x - 600/2, y: hex_points[p].y - 600/2})
group.add(s);
}
layer.add(group);
stage.add(layer);