2013-05-15 2 views
1

Я хотел бы рассчитать, находится ли точка вблизи диагонали прямоугольника. Прямоугольник представляет собой две точки (мин. И макс.). Теперь у меня есть третий пункт, и я хотел бы проверить, находится ли он рядом с диагональю.Точка близко к диагонали

if (minBound < pointVector2 && pointVector2 < maxBound) { 
    CheckIfIsNearTheDiagonal(50, true); 
} 

minBound и maxBound являются пограничными пунктами (Vector2)

Я хотел бы проверить, насколько точка pointVector2 от (специфического) по диагонали. Расстояние сравнивается с аргументом maxDistance и return if находится в диапазоне вокруг диагонали.

bool CheckIfIsNearTheDiagonal(float maxDistance, bool isLeftDownToRightUp){ 
    // Somehow count distance 
    return distance < maxDistance 
} 

Есть ли какой-либо простой способ, или я должен рассчитать общую форму уравнения линии и расстояние между точкой и линией?

+0

Похоже, вы уже описали простой способ. – mbeckish

+0

Хорошо, если это самый простой способ. = ( – wolen

+0

Вот еще один способ: изобразите треугольник от угла прямоугольника до рассматриваемой точки до точки по диагонали, на которую измеряется расстояние. Вы знаете длину одной стороны (гипотенуза треугольника, которая это линия от угла до точки, о которой идет речь). Используйте точечный продукт, чтобы получить длину линии от угла до другой точки на диагонали. Теперь, когда у вас есть две стороны треугольника, используйте теорему Пифагора, чтобы получить длина 3-й стороны. Эта конечная длина - это расстояние, которое вы ищете. – mbeckish

ответ

1

Это дает расстояние от точки p0 и линией, проходящей в p1 и p2:

public double Distance(Point p1, Point p2, Point p0) 
    { 
     double m = (p2.Y - p1.Y)/(p2.X - p1.X); 
     double q = (p1.Y * p2.X - p2.Y * p1.X)/(p2.X - p1.X); 
     return Math.Abs((p0.Y - m * p0.X - q)/Math.Sqrt(1 + m * m)); 
    } 
Смежные вопросы