Блоки кода, потому что он также пытается создать круг вокруг него, когда пространство рядом - PullRequest
1 голос
/ 22 июля 2011

Я разрабатываю небольшую программу, и для генерации координат я использую этот код:

public double[] GenerateNewCircle(int maxSize, int numberOfBalls, double centerx, double centery)
        {

            double[] position = null;

            double angle = 360 / 6;
            double angleRad = DegreeToRadian(incrementAngle);
            position = CalculatePosition(radiusX, radiusY, centerx, centery, angleRad);

            return position;
        }

public double[] CalculatePosition(double radiusX, double radiusY, double centerX, double centerY, double angle)
        {
            double[] position = new double[2];

            position[0] = Math.Cos(angle) * (radiusX + centerX)*1.5;
            position[1] = Math.Sin(angle)  * (radiusY + centerY)*1.5;

            return position;
        }

Чтобы проверить, не перекрывается ли или находится в той области, где я использовал это

bool circleIsAllowed(List<Circle> circles, Circle newCircle)
        {
            if (newCircle.x < 10 || newCircle.x > pictureBox1.Width)
                return false;
            if (newCircle.y < 9 || newCircle.y > pictureBox1.Height)
                return false;

            foreach (Circle it in circles)
            {
                double aX = Math.Pow(it.x - newCircle.x, 2);
                double aY = Math.Pow(it.y - newCircle.y, 2);
                double Dif = Math.Abs(aX - aY);
                double ra1 = it.r / 2;
                double ra2 = it.r / 2;

                double raDif = Math.Pow(ra1 + ra2, 2);
                if ((raDif + 1) > Dif) return false;             
            }
            return true; // no existing circle overlaps
        }

У меня сейчас две проблемы

  1. Он блокирует, потому что пытается создать вокруг него круг, когда рядом находится пробел.

  2. Как я могу увеличить расстояние между кругами? Они слишком близко.

Этот круг должен нарисовать круг (вокруг него)

Это изображение:

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Чтобы вычислить расстояние между двумя центрами окружностей, вы должны применить теорему Пифагора :

a 2 + b 2 = c 2 .

Это прекрасно работает, если у нас есть круги (с эллипсами вам нужно будет вычислять их радиус вдоль связи между их центрами, которая включает в себя некоторую пазуху ивычисления косинуса).

double aX = Math.Pow(it.x - newCircle.x, 2);
double aY = Math.Pow(it.y - newCircle.y, 2);
if ((aX + aY) <= Math.Pow(it.r + newCircle.r, 2)) {
    return false;
}
1 голос
/ 22 июля 2011

Ошибка во втором блоке кода.Попробуйте это:

double aX = Math.Pow(it.x - newCircle.x, 2);
double aY = Math.Pow(it.y - newCircle.y, 2);
double distance = Math.Pow(aX + aY, 0.5); // distance between circles centers

double ra1 = it.r / 2;
double ra2 = it.r / 2;
// is it.r diameter? if so, then ok, else div by 2 is useless

double circlesDistance = 10; // distance between circles (not centers)

if (distance < ra1 + ra2 + circlesDistance)
{
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...