XNA - проверьте, находится ли Vector2 внутри прямоугольника - PullRequest
1 голос
/ 21 января 2012

Какой лучший способ проверить, находится ли Vector2 внутри прямоугольника?

myRect.contains (myVector2) не работает, потому что он ожидает точку или прямоугольник.

Я знаюЯ мог бы привести Вектор2 к Точке или даже к Прямоугольнику с размером 1/1, но я не уверен в производительности.

Какие у вас впечатления?

Ответы [ 2 ]

4 голосов
/ 21 января 2012

Одна из перегруженных версий Contains для структуры Rectangle, принимает координаты X и Y.

Rectangle rect = new Rectangle(-5, -5, 10, 10);
Vector2 myVector2 = Vector2.Zero;

rect.Contains((int)myVector2.X, (int)myVector2.Y)

Я предполагаю, что вы говорите о myVector2, представляющем точку, а нерасстояние или направление.

1 голос
/ 21 января 2012

Несмотря на то, что может быть дополнительное время выполнения при приведении в соответствие с созданием точки, подобной Point (myVector2.X, myVector2.Y), последствия, скорее всего, слишком малы, чтобы вы их когда-либо заметили (как правило, следует избегать преждевременной оптимизации)

Пойдите с тем, что выглядит чистым и простым в обслуживании. Если бы это был я, я бы просто создал новую точку в вызове метода ...

Вы также можете написать метод расширения.

    public static Point Origin(this Vector2 v)
    {
        //original proposal
        //return new Point( (int)v.X, (int)v.Y );

        //better! does correctly round the values
        return new Point( Convert.ToInt32(v.X), convert.ToInt32(v.Y));
    }

Тогда вы могли бы сделать что-то вроде этого rect.Contains(vec.Origin)

Что-то следует помнить, хотя: этот метод на самом деле не будет проверять, содержится ли вектор в прямоугольнике, он будет только проверять, есть ли источник. Помните, что вектор - это направление и величина.

...