Рассчитать путь между двумя точками на экране в Android - PullRequest
2 голосов
/ 03 марта 2011

Сначала проблема казалась мне очень простой, но теперь я застрял.

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

@Override
    public void run() {
        Canvas c;
        while (run) {
            c = null;
            try {
                c = panel.getHolder().lockCanvas(null);
                  synchronized (panel.getHolder()) {

                    panel.updateImageCoordinates();
                    panel.onDraw(c);


                }
            } finally {
                if (c != null) {
                    panel.getHolder().unlockCanvasAndPost(c);
                }
            }
        }

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

 public class Coordinates {
        private int x = 0;
        private int y = 0;
        private int speedX=0;
        private int speedY=0;
}

Например, моя первая точка -5; -30, и мне нужно добраться до второй точки 50.50.Расчет следующих координат для рисования изображения производится по updateImageCoordinates ().Моя проблема в том, что я не знаю, как рассчитать speedX и speedY, чтобы добраться из точки A в точку B по прямой.В основном для каждого выполнения updateImageCoorindates () мне нужно сделать:

image.currentX= image.currentX+speedX;
image.currentY= image.currentY+speedY
//Check if I reached the B point. if so, move to next point.

Я не знаю, основываясь на знании координат, как я могу рассчитать скорость по направлениям x и Y.

Я прилагаю изображение для иллюстрации.Любая помощь приветствуется.enter image description here

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Я не уверен, если я ясно понял ваш вопрос ...

Если вы ищете функцию, которая переведет PointA в точку на линии AB.

Строка, содержащая обаточки будут иметь уравнение:

-30 = -5 * a + b и 50 = 50 * a + b, поэтому b = -250/11 a = 16/11

, чтобы найти следующийВы должны:

проверить, находится ли x следующей точки слева (-1) или справа (+1) от точки назначения

и рассчитать следующую точку по:

image.currentX= image.currentX+((-1 or +1)*movement_speed);
image.currentY= image.currentY+16/11*(-1 or +1)*movement_speed + (-250/11)
0 голосов
/ 03 марта 2011

Вы найдете API-демоверсии для анимации полезными, я думаю. В частности, ознакомьтесь с Custom Evaluator .

...