我有两种通过bresenham / midpoint算法创建实心圆的方法。 但第二种方式看起来远比第一种方式好。
我想创建第二个结果,但是第一个结果 一。我想用第一种方式做到这一点因为我需要一个正确的公式来计算目前的距离:
function calcDistance (pos,pos2,range){
var x1 = pos.hasOwnProperty('x') ? pos.x : pos[0],
y1 = pos.hasOwnProperty('y') ? pos.y : pos[1],
x2 = pos2.hasOwnProperty('x') ? pos2.x : pos2[0],
y2 = pos2.hasOwnProperty('y') ? pos2.y : pos2[1];
return Math.pow((x1-x2),2) + Math.pow((y1-y2),2) - Math.pow(range, 2)
};
中的第二种方法
答案 0 :(得分:1)
当距离为<= 0
时,不是绘制点,而是在距离为<= radius*radius*zoom
时绘制点:
编辑:应用缩放系数(8.0/radius)
function drawCircle(x0, y0, radius){
var range = radius*radius*zoom*(8.0/radius); // calculate the range once
for(var x = 0; x < imageWidth/zoom; x++){
for(var y = 0; y < imageHeight/zoom; y++){
if(calcDistance([x0,y0],[x*zoom,y*zoom],radius*zoom) <= range){
context.fillRect(x*zoom,y*zoom,zoom,zoom);
}
}
}
}