Определение, находится ли точка внутри круга на карте изометрии c - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь найти способ проверить, находится ли определенная точка внутри или снаружи круга на карте изометрии c. В настоящее время я использую следующий метод для рисования круга:

    public static List<Coords> GetBrushCircleCoords(int x0, int y0, int radius)
    {
        List<Coords> coords = new List<Coords>();
        int x = radius;
        int y = 0;
        int err = 0;

        while (x >= y)
        {
            coords.Add(new Coords(x0 + x, y0 + y));
            coords.Add(new Coords(x0 + y, y0 + x));
            coords.Add(new Coords(x0 - y, y0 + x));
            coords.Add(new Coords(x0 - x, y0 + y));
            coords.Add(new Coords(x0 - x, y0 - y));
            coords.Add(new Coords(x0 - y, y0 - x));
            coords.Add(new Coords(x0 + y, y0 - x));
            coords.Add(new Coords(x0 + x, y0 - y));

            y += 1;
            err += 1 + 2 * y;
            if (2 * (err - x) + 1 > 0)
            {
                x -= 1;
                err += 1 - 2 * x;
            }
        }
        return coords;
    }

И подход, который я пытаюсь определить, находится ли точка внутри круга, в основном принимает желаемую точку, определите ее расстояние до центр и проверка, если он больше, чем радиус, с помощью следующего метода:

    public static int GetDistance(Coords _from, Coords _to)
    {
        return Math.Max(Math.Abs(_from.X - _to.X), Math.Abs(_from.Y - _to.Y));
    }

Однако, кажется, метод GetDistance не лучший способ рассчитать это, так как рассчитанное им расстояние довольно короче, чем один используется на GetBrushCircleCoords. Как правильно определить, находится ли определенная точка внутри / снаружи этого круга?

1 Ответ

0 голосов
/ 12 апреля 2020

На евклидовой плоскости функция расстояния (метри c) задается теоремой Пифагора. Так что GetDistance не должна выглядеть примерно так:

public static double GetDistance(Coords from, Coords to)
{
    //a^2 + b^2 = c^2
    var a = from.X - to.X;
    var b = from.Y - to.Y;
    var c = Math.Sqrt(a*a+b*b);
    return c;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...