2013-03-14 4 views
0

Если строка определена двумя точками (A, B), как я могу определить, есть ли другая точка (C) в этой строке или нет, то WPF имеет встроенную функцию, поскольку Im использует пути для представления строк или у меня есть для записи функции. Если последнее верно, любая помощь будет оценена, спасибо.Как определить, является ли точка частью строки?

ответ

2

Три точки являются колинейными, если угол, который они образуют, составляет 180 градусов. Или, по-другому, наклон линий AB, AC и BC равен всем.

Решая для склонов: [AB].y/[AB].x = [AC].y/[AC].x дает следующую удобную функцию:

bool AreCollinear(Point A, Point B, Point C) 
{ 
    double slopesDelta = (A.y - B.y) * (A.x - C.x) - (A.y - C.y) * (A.x - B.x); 
    double tolerance = 1e-6;    // substitute for your own tolerance 
    return tolerance > Math.Abs(slopesDelta); 
} 
+0

Благодаря вашей звезды. –

+1

@StewartStoakes Конечно, вы не сделали бы * точного * сравнения, поскольку это более или менее всегда терпит неудачу из-за ошибок округления. Вместо сравнения «a == b» вы можете, например, проверить, является ли абсолютное значение разницы левой руки и правого члена меньше некоторого небольшого значения: «Math.Abs ​​(a - b) <1e-6 '. – Clemens

+0

@Clemens - _absolute_ly действительная точка;) Я обновил код, чтобы отразить это! –

Смежные вопросы