Переместить точку в другую в c # - PullRequest
2 голосов
/ 16 января 2011

Я хотел бы переместить некоторую точку a в двумерном пространстве поиска в другую точку b с некоторым шагом (_config.StepSize = 0.03).

Point a = agent.Location;
Point b = agentToMoveToward.Location;

//---    important        
double diff = (b.X - a.X) + (b.Y - a.Y);
double euclideanNorm = Math.Sqrt(Math.Pow((b.X - a.X), 2) + Math.Pow((b.Y - a.Y), 2));
double offset = _config.StepSize * ( diff / euclideanNorm );

agent.NextLocation = new Point(a.X + offset, a.Y + offset);
//---

Это правильно?

1 Ответ

10 голосов
/ 16 января 2011

Предполагая, что вы хотите переместить одну точку в направлении другой точки и предполагая, что ваш размер шага имеет единицы измерения расстояния, тогда нет, ваш расчет неверен.

Правильная формула:

  • nextLocation = a + UnitVector(a, b) * stepSize

В C #, используя простой класс Point и библиотеку Math, это выглядит следующим образом:

public Point MovePointTowards(Point a, Point b, double distance)
{
    var vector = new Point(b.X - a.X, b.Y - a.Y);
    var length = Math.Sqrt(vector.X * vector.X + vector.Y * vector.Y);
    var unitVector = new Point(vector.X / length, vector.Y / length);
    return new Point(a.X + unitVector.X * distance, a.Y + unitVector.Y * distance);
}

Редактировать: Обновлен код в соответствии с предложением TrevorSeniors в комментариях

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