Я пытаюсь создать три точки изменяющихся радиусов на холсте, которые НЕ касаются друг друга или перекрывают друг друга. Я использую 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 меньше или равна сумме радиусов. Но опять же, похоже, это не работает. Я также console.logging, если они перекрываются или нет (OVERLAP vs NO OVERLAP), и он всегда регистрирует NO OVERLAP.
Человек, вы - решение, имеет гораздо больше смысла. Как я могу научиться думать так? это – AustriaNotAustralia
Не волнуйтесь, мне потребовалось много времени, чтобы добраться туда: D Все, что вам нужно, это практика. –