我试图在画布上创建不同半径的三个点,它们不会相互接触或重叠。我正在为圈子使用Jquery和Raphael。但是,当我运行该程序时,它们有时会重叠/触摸,但我无法在代码中找到逻辑错误。我的代码中的错误在哪里?
$(document).ready(function() {
var canvasx = 1450;
var canvasy = 743;
var paper = Raphael(0, 0, canvasx, canvasy);
var circles = new Array;
var colorarray = new Array("black", "red", "blue");
var circleoffsetx = canvasx/4;
var circleoffsety = canvasy/4;
var iterations = 3;
var circleoverlap = false;
for (var i = 0; i < iterations; i++) {
var circlecolor = colorarray[Math.floor(Math.random() * colorarray.length)];
var circlex = Math.floor((Math.random() * canvasx/2) + circleoffsetx);
var circley = Math.floor((Math.random() * canvasy/2) + circleoffsety);
var circleradius = Math.floor((Math.random() * 75) + 25);
if (circles.length > 0) {
for (var j = 0; j < circles.length; j++) {
var allcirclex = circles[j[0]];
var allcircley = circles[j[1]];
var allcircleradius = circles[j[2]];
var radiussum = circleradius + allcircleradius;
if (Math.abs(circlex - allcirclex) <= radiussum || Math.abs(circley - allcircley) <= radiussum) {
iterations++;
circleoverlap = true;
console.log("OVERLAP");
break;
}
}
if (circleoverlap === false) {
circles.push(paper.circle(circlex, circley, circleradius).attr({"stroke": circlecolor, "stroke-width": 3}));
circles[i] = [circlex, circley, circleradius];
console.log("NO OVERLAP");
}
}
if (circles.length < 1) {
circles.push(paper.circle(circlex, circley, circleradius).attr({"stroke": circlecolor, "stroke-width": 3}));
circles[i] = [circlex, circley, circleradius];
}
console.log(circles[0]);
}
});
所以我创建一个圆,它保存的X,Y,在二维阵列(圆)半径,然后想看看新的圈子会触及/重叠现有的通过,如果距离看到在圆x,y之间小于或等于半径之和。但再一次,它似乎并不奏效。我也是console.logging,如果它们重叠或不重叠(OVERLAP vs NO OVERLAP)并且它总是记录NO OVERLAP。
男人,你的解决方案更有意义。我怎么能学会这样想?它 – AustriaNotAustralia
别担心,我花了很长时间才能到达那里:D所有你需要的是练习。 –