Рисование пути между двумя точками - PullRequest
6 голосов
/ 22 ноября 2010

Я работаю над сенсорной игрой, и у меня возникают проблемы с прорисовкой пути, по которому прошел пользователь.Я пытаюсь имитировать что-то вроде этих приложений http://www.youtube.com/watch?v=G3CECr6mT1Q или http://www.youtube.com/watch?v=r34-_0wrVC4

Я делаю это в XNA / C #.

Моя проблема : У меня есть набор точек, которые определяют, что пользователи касаются пути.Я не был уверен, как можно получить стилизованную линию между всеми этими точками, поэтому я подумал: «Эй, я просто получу действительно маленькое изображение, которое является« линией », и нарисую его в каждом месте между путевыми точками и поверну его соответственноЯ не уверен, если это лучшее решение или нет.

Но я застрял, потому что я не знал, как получить все координаты между этими двумя точками. У меня есть две точки, я могуполучить вектор от первого до второго и т. д., но я не могу понять, правильно ли математика.

Любые предложения или помощь? Спасибо!

Ответы [ 3 ]

5 голосов
/ 23 ноября 2010

Чтобы вычислить промежуточную точку между двумя точками, найдите вектор направления от одной точки к другой и расстояние между точками. Масштабируйте расстояние с коэффициентом t между 0 и 1, где t = 0 соответствует первой точке. T = 0.5 - это половина между ними, а t = 1 соответствует второй точке. Затем масштабируйте вектор направления на это значение и добавьте его к исходной точке.

Vector2 IntermediatePoint(Vector2 p0, Vector2 p1, float t)
{
    Vector2 delta = p1 - p0;

    float distance = delta.Length();

    if (distance == 0.0f)
    {
        return p0;
    }
    else
    {
        Vector2 direction = delta / distance;

        return p0 + direction * (distance * t);
    }
}

Если вы вычисляете несколько точек между p0 и p1, вы должны рассчитывать расстояние и направление только один раз.

Вы также можете использовать XNA RoundLine для соединения ваших точек.

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

1 голос
/ 23 ноября 2010
pointA = waypointsToDraw.ElementAt(i);
pointB = waypointsToDraw.ElementAt(i + 1);
deltaVector = pointB - pointA;
distance = deltaVector.Length();
direction = deltaVector / distance;
for (int z = 1; z < distance; z++)
{
    newPoint = pointA + direction * (distance * (z/distance));
    //this is the newPoint - it will be every point/pixel between pointA and pointB. Put drawing code here

}

Примеры кода выше.PointA и pointB - это две конечные точки, newPoint будет каждой точкой между ними

0 голосов
/ 22 ноября 2010

Проверьте образец на http://create.msdn.com/en-US/education/catalog/sample/primitives для получения подробной информации о том, как рисовать простые "Примитивы", включая линию.

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