Как определить принадлежность точк отрезку прямой?
От: Harry  
Дата: 11.05.01 15:43
Оценка:
Прямая задана двумя точками.
Re: Как определить принадлежность точк отрезку прямой?
От: Alex Jenter Россия CintaNotes
Дата: 12.05.01 00:02
Оценка:
H>Прямая задана двумя точками.

Пусть это точки (x1,y1) и (x2,y2).
Уравнение прямой, проходящей через
две заданные точки:

y — y1 x — x1
------ = ------
y2- y1 x2- x1

Тогда подставляем проверяемую точку
в уравнение вместо (x,y) и проверяем
равенство.
Если оно выполняется, значит точка
лежит на прямой.

Алекс
Re[2]: Как определить принадлежность точк отрезку прямой?
От: Harry  
Дата: 12.05.01 05:43
Оценка:
Здравствуйте Alex Jenter, вы писали:


H>>Прямая задана двумя точками.


AJ>Пусть это точки (x1,y1) и (x2,y2).

AJ>Уравнение прямой, проходящей через
AJ>две заданные точки:

AJ> y — y1 x — x1

AJ> ------ = ------
AJ> y2- y1 x2- x1

AJ>Тогда подставляем проверяемую точку

AJ>в уравнение вместо (x,y) и проверяем
AJ>равенство.
AJ>Если оно выполняется, значит точка
AJ>лежит на прямой.

AJ>Алекс


Спасибо Алекс, только это принадлежность прямой вообще, а для отрезка надо проверить еще нахождение точки на отрезке используя координаты х крайних точек.

Еще раз спасибо. Игорь.
Re[3]: Как определить принадлежность точк отрезку прямой?
От: Барташевич Андрей Игоревич  
Дата: 14.05.01 08:32
Оценка:
Здравствуйте Harry, вы писали:

H>Здравствуйте Alex Jenter, вы писали:



H>>>Прямая задана двумя точками.


AJ>>Пусть это точки (x1,y1) и (x2,y2).

AJ>>Уравнение прямой, проходящей через
AJ>>две заданные точки:

AJ>> y — y1 x — x1

AJ>> ------ = ------
AJ>> y2- y1 x2- x1

AJ>>Тогда подставляем проверяемую точку

AJ>>в уравнение вместо (x,y) и проверяем
AJ>>равенство.
AJ>>Если оно выполняется, значит точка
AJ>>лежит на прямой.

AJ>>Алекс


H>Спасибо Алекс, только это принадлежность прямой вообще, а для отрезка надо проверить еще нахождение точки на отрезке используя координаты х крайних точек.


H>Еще раз спасибо. Игорь.

После проверки на принадлежность прямой проверьте величину первой или второй составляющей уравнения. Если отношение (y-y1)/(y2-y1) или (x-x1)/(x2-x1) принадлежит [0...1], то точка находится на отрезке.(Это легко выводится из параметрического уравнения прямой)
Re[4]: Как определить принадлежность точк отрезку прямой?
От: Merle Австрия http://rsdn.ru
Дата: 15.05.01 10:36
Оценка:
Здравствуйте Барташевич Андрей Игоревич, вы писали:

БАИ>Здравствуйте Harry, вы писали:


H>>Здравствуйте Alex Jenter, вы писали:



H>>>>Прямая задана двумя точками.


AJ>>>Пусть это точки (x1,y1) и (x2,y2).

AJ>>>Уравнение прямой, проходящей через
AJ>>>две заданные точки:

[skip]

Помоему есть способ гораздо проще и изящнее: ;))
Если сумма расстояний от первой точки до искомой и от искомой точки до второй равна, с некоторой погрешностью, расстоянию от первой точки до второй, то искомая точка как раз и лежит между первой и второй... Расстояние между двумя точками считается как
SQRT(X2*X2+Y2*Y2)-SQRT(X1*X1+Y1*Y1)
Мы уже победили, просто это еще не так заметно...
Re[5]: Как определить принадлежность точк отрезку прямой?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 18.07.01 17:21
Оценка:
M>Помоему есть способ гораздо проще и изящнее: ;))
M>Если сумма расстояний от первой точки до искомой и от искомой точки до второй равна, с некоторой погрешностью, расстоянию от первой точки до второй, то искомая точка как раз и лежит между первой и второй... Расстояние между двумя точками считается как
M>SQRT(X2*X2+Y2*Y2)-SQRT(X1*X1+Y1*Y1)
способ действительно лучше так как в нём нет деления ато прямая у тебя вертикальная а ты делишь на x2-x1 :)
и на Pentiumax без лишних if-ов быстрее будет
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: Как определить принадлежность точк отрезку прямой?
От: Alex Ostapenko Россия  
Дата: 19.07.01 06:47
Оценка:
Здравствуйте Merle, вы писали:

M>Помоему есть способ гораздо проще и изящнее: ;))

M>Если сумма расстояний от первой точки до искомой и от искомой точки до второй равна, с некоторой погрешностью, расстоянию от первой точки до второй, то искомая точка как раз и лежит между первой и второй... Расстояние между двумя точками считается как
M>SQRT(X2*X2+Y2*Y2)-SQRT(X1*X1+Y1*Y1)

Проще — возможно (хотя сомнительно), и уж точно не изящнее. Заметим, что делить в первом способе совсем не обязательно. Все замечательно сводится к сложению, умножению и проверке знака. Это уж всяко точнее и проще, чем вычисление корня.
Re[6]: Как определить принадлежность точк отрезку прямой?
От: Gambler  
Дата: 26.10.01 13:10
Оценка:
Здравствуйте Alex Ostapenko, Вы писали:

AO>Проще — возможно (хотя сомнительно), и уж точно не изящнее. Заметим, что делить в первом способе совсем не обязательно. Все замечательно сводится к сложению, умножению и проверке знака. Это уж всяко точнее и проще, чем вычисление корня.


Кстати нужно не забыть обработать корректно случаи вертикального или горизонтального отрезка, а то нехорошо может получится.
-------------------------------------------------------------------

Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
Re[5]: Как определить принадлежность точк отрезку прямой?
От: Alexander Shargin Россия RSDN.ru
Дата: 26.10.01 14:37
Оценка:
Здравствуйте Merle, Вы писали:

M>Если сумма расстояний от первой точки до искомой и от искомой точки до второй равна, с некоторой погрешностью, расстоянию от первой точки до второй, то искомая точка как раз и лежит между первой и второй... Расстояние между двумя точками считается как

M>SQRT(X2*X2+Y2*Y2)-SQRT(X1*X1+Y1*Y1)

Ну-ну... Пусть (x1,y1)=(0,1), а (x2,y2)=(1,0). Подставляем в эту формулу и имеем:
sqrt(1*1+0*0)-sqrt(0*0+1*1) = 0
То есть эти две точки совпадают. :))

Правильная формула:
R = SQRT((x1-x2)^2 + (y1-y2)^2)

Стало быть, проверяем равенство R1+R2=R. Кстати, если возвести это равенство в квадрат, то можно избавиться от вычисления одного их трёх корней. А если возвести его в квадрат 2 раза, можно избавиться от всех остальных корней, но придётся наложить дополнительное условие:
4*r1*r2 = (r-r1-r2)^2, и при этом r-r1-r2>=0
Здесь r,r1,r2 имеют смысл R=sqrt(r), R1=sqrt(r1), R2=sqrt(r2). Так что если корни не нравятся, то нет проблем...
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re: Как определить принадлежность точк отрезку прямой?
От: Povsh Россия  
Дата: 29.10.01 13:22
Оценка:
Здравствуйте Harry, Вы писали:

H>Прямая задана двумя точками.


А можно уточнить, точку которую вы хотите проверить не являтся ли точкой пересечения двух отрезков (по уравнению прямых)? Если да, то достаточно просто проверить, попадает ли точка в описывающие прямоугольники двух отрезков (естественно увеличив их на некую величину точности).
С Уважением, Повшедный Андрей.
Re[6]: Как определить принадлежность точк отрезку прямой?
От: Gambler  
Дата: 29.10.01 15:31
Оценка:
Вот как это выглядит на VB


Уравнение прямой. Координаты X,Y — точка принадлежность
которой надо проверить.

Offset — величина допустимой погрешности


Y — Y1 X — X1
--------- = ----------
Y2 — Y1 X2 — X1

Private Function IsSegmentHasPoint( ByVal X As Single, ByVal Y As Single, _
ByVal X1 As Single, ByVal Y1 As Single, _
ByVal X2 As Single, ByVal Y2 As Single, _
ByVal Offset As Single ) As Boolean


Dim arg1 As Single, arg2 As Single
Dim bRes As Boolean, f As Boolean

f = False

'Horz-Line case
If X1 = X2 Then
f = True
arg1 = X1 — X
End If

'Vert-Line case
If Y1 = Y2 Then
f = True
arg1 = Y1 — Y
End If


If f = True Then

If Abs(arg1) > Offset Then
bRes = False
Else
bRes = True
End If

IsSegmentHasPoint = bRes
Exit Function

End If


'Line Has Point
arg1 = (Y — Y1) / (Y2 — Y1)
arg2 = (X — X1) / (X2 — X1)

arg1 = arg2 — arg1

If Abs(arg1) > Offset Then
IsSegmentHasPoint = False
Exit Function
End If

'Segment Has Point
If X >= X1 And X <= X2 Then
IsSegmentHasPoint = True
Else
IsSegmentHasPoint = False
End If

End Function
-------------------------------------------------------------------

Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.