как получить координаты x, y с определенного расстояния - PullRequest
0 голосов
/ 18 февраля 2012

так как я могу получить координаты x, y точки с определенного расстояния?

так

public static Location2D DistanceToXY(Location2D current, Directions dir, int steps) {
            ushort x = current.X;
            ushort y = current.Y;

            for (int i = 0; i < steps; i++) {
                switch (dir) {
                    case Directions.North:
                        y--;
                        break;
                    case Directions.South:
                        y++;
                        break;
                    case Directions.East:
                        x++;
                        break;
                    case Directions.West:
                        x--;
                        break;
                    case Directions.NorthWest:
                        x--;
                        y--;
                        break;
                    case Directions.SouthWest:
                        x--;
                        y++;
                        break;
                    case Directions.NorthEast:
                        x++;
                        y--;
                        break;
                    case Directions.SouthEast:
                        x++;
                        x++;
                        break;
                }
            }
            return new Location2D(x, y);
        }

то, что я делаю здесь, верно?

1 Ответ

0 голосов
/ 18 февраля 2012

Я предполагаю, что вы ищете общее решение.Как уже отмечали другие, вам нужно направление в качестве пропущенного ввода.В основном вы будете использовать направление и величину (в нашем случае 10) и конвертировать эти полярные координаты в декартовы.Затем вы добавляете получившиеся координаты вместе X + Xoffset = Xnew и Y + Yoffset = Ynew.

Подробности преобразования приведены здесь: http://www.mathsisfun.com/polar-cartesian-coordinates.html

Редактировать: послеРазместил свой код, ответ - нет.Случаи для NorthWest, SouthWest, NorthEast, SouthEast не верны.В этих случаях вы перемещаете 1,41 (приблизительно) пикселей.Вы не должны пытаться постепенно разгадать загадку.Используйте математическую полярную координату и суммируйте общее смещение, а затем округлите до ближайшего целого числа.

Вот упрощенный мод псевдокода для вашего решения:

public static Location2D DistanceToXY(Location2D current, Directions dir, int steps) {
        ushort x = current.X;
        ushort y = current.Y;

        switch (dir) {
            case Directions.North:
                y=y+steps;
                break;
            case Directions.South:
                y=y-steps;
                break;
            case Directions.East:
                x=x+steps;
                break;
            case Directions.West:
                x=x-steps;
                break;
            case Directions.NorthWest:
                float sqrt2 = 2 ^ 0.5
                x=x+int((sqrt2 * steps) + 0.5);
                y=y-int((sqrt2 * steps) + 0.5);
                break;
            case Directions.SouthWest:
                x=x-int((sqrt2 * steps) + 0.5);
                y=y-int((sqrt2 * steps) + 0.5);
                break;
            case Directions.NorthEast:
                x=x+int((sqrt2 * steps) + 0.5);
                y=y+int((sqrt2 * steps) + 0.5);
                break;
            case Directions.SouthEast:
                x=x-int((sqrt2 * steps) + 0.5);
                y=y+int((sqrt2 * steps) + 0.5);
                break;
        }
        return new Location2D(x, y);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...