Отодвинуть точку от другой точки - PullRequest
0 голосов
/ 09 марта 2012

Я работаю над моделированием, где один объект A следует за объектом B, а объект B убегает.

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

Допустим, у меня есть экран 100x100.

Вот мой метод, представляющий метод следования.

public MutableDouble2D MovePointTowards(Double2D pointA, Double2D pointB, double distance)
{

    MutableDouble2D vector = new MutableDouble2D();
    vector.x = pointB.x - pointA.x;
    vector.y = pointB.y - pointA.y;

    double length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);

    MutableDouble2D unitVector = new MutableDouble2D();
    unitVector.x = vector.x / length;
    unitVector.y = vector.y / length;

    MutableDouble2D newPoint = new MutableDouble2D();
    newPoint.x = pointA.x + unitVector.x * distance;
    newPoint.y = pointA.y + unitVector.y * distance;

    return newPoint;
}

Не могли бы вы, ребята, помочь мне в разработке?убежать 'действие?Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

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

while( true )
{
  lionPos = moveTowards( goatPos, lionPos, d );
  goatPos = someFunction();
}

Если d - константа, то лев преследует козу с постоянной скоростью. Если вы хотите, чтобы козел сбежал с постоянной скоростью, тогда someFunction - это не что иное, как

moveTowards( goatPos, lionPos, d );

Опять же, изменение d изменит скорость. Если вы установите скорость, зависящую от расстояния, вы сможете увидеть интересные симуляции. Попробуйте поставить постоянное значение для Льва, но (1 / R ^ 2) для Козы. Тогда Лев догонит, когда он далеко, но как только он подойдет достаточно близко, Козел убежит быстрее.

Если вы хотите, чтобы Козел разумно убегал от Льва (необязательно прямо в противоположном направлении), есть некоторая интересная литература на этот счет. Одна аккуратная дискуссия: здесь .

0 голосов
/ 09 марта 2012

Это будет почти то, что у вас уже есть, вместо того, чтобы сместить точку А, чтобы получить новую точку, просто сместите точку Б на тот же вектор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...