powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Три точки на прямой
16 сообщений из 41, страница 2 из 2
Три точки на прямой
    #39479474
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наврал немного, одним сравнением не обойтись. 4 сравнения.
...
Рейтинг: 0 / 0
Три точки на прямой
    #39479515
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И теперь в студию зависимость длины программы от размерности задачи.
...
Рейтинг: 0 / 0
Три точки на прямой
    #39479533
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже не надо, проверки в цикле вроде.
...
Рейтинг: 0 / 0
Три точки на прямой
    #39479553
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достаточно одну размерность проверять, например Х, т.к. все точки на одной прямой.

Допустим B должна быть в середине, тогда проверяем 4 варианта: ACB, CAB, BAC, BCA. Если один из них, то переставить B в середину.

А можно просто отсортировать массив точек по Х.
...
Рейтинг: 0 / 0
Три точки на прямой
    #39479578
hclubmk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Три точки на прямой
    #39479602
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hclubmkтынц Там через площадь параллелограмма, т.е. векторное пр-ние, т.е. уже было. А вот про тольщину линии мы и забыли ...

Dima, дезавуируй заявление:Достаточно одну размерность проверять, например Х, т.к. все точки на одной прямой.

И напоследок: ТСу это всё наше так же надо, как и недавний цилиндр (кто помнит).
...
Рейтинг: 0 / 0
Три точки на прямой
    #39479613
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Dima, дезавуируй заявление:Достаточно одну размерность проверять, например Х, т.к. все точки на одной прямой.
Если точки на прямой и упорядочены, то каждая из координат меняется монотонно, т.е. возрастает или убывает.
т.е. если X A < X B < X C , то Y A < Y B < Y C или Y A > Y B > Y C
...
Рейтинг: 0 / 0
Три точки на прямой
    #39479626
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesесли (y1=y2=y3) или (x1-x2)/(y1-y2)=(x2-x3)/(y2-y3) то они лежат на 1 прямой.
А если все точки лежат на оси Абсцысс? )))
...
Рейтинг: 0 / 0
Три точки на прямой
    #39479807
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилзапиши это на GLSL
Ну ТС ничего не говорил про GLSL
А по факту
есть точки А(x1, y1), B(x2, y2), C(x3, y3)
Допустим B находитcя на прямой AC тогда расстояние AB+BC = AC
AC = sqrt((x3 - x1)^2 + (y3 - y1)^2)
AB = sqrt((x2 - x1)^2 + (y2 - y1)^2)
BC = sqrt((x3 - x2)^2 + (y3 - y2)^2)

Проверять надо по одному из вариантов:
1) сумму двух меньших чисел равна большей
2) AB+BC = AC или AB + АС = BC
Количество измерений ничего не изменяет
...
Рейтинг: 0 / 0
Три точки на прямой
    #39480008
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк ЕвгенийИзопропилзапиши это на GLSL
Ну ТС ничего не говорил про GLSL
А по факту
есть точки А(x1, y1), B(x2, y2), C(x3, y3)
Допустим B находитcя на прямой AC тогда расстояние AB+BC = AC
AC = sqrt((x3 - x1)^2 + (y3 - y1)^2)
AB = sqrt((x2 - x1)^2 + (y2 - y1)^2)
BC = sqrt((x3 - x2)^2 + (y3 - y2)^2)

Проверять надо по одному из вариантов:
1) сумму двух меньших чисел равна большей
2) AB+BC = AC или AB + АС = BC
Количество измерений ничего не изменяет
всё уже проверено до нас, решение с векторным произведением самое ходовое в графике
даже в общем случае легче проверить равенство модуля векторного произведения и произведения двух сторон
|a*b| ?= |a|*|b|
...
Рейтинг: 0 / 0
Три точки на прямой
    #39480572
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan) векторного произведения и произведения двух сторон
|a*b| ?= |a|*|b| скалярного, Cos=1, и сравнивать квадраты, чтоб без корня.

Заданы точки А, В, С.
Расстояние до прямой АВ вычисляется столь же просто, разница лишь вычислит-х затратах.

i - номер координаты в N-мерном пр-ве
Д - дельта (единая или несколько разных) = минимально допустимая дискретизация точек
Х - пересеч. прямой АВ и перпендикуляра из С - её вычисляем, подставляем в формулы, и вуаля:
Код: plaintext
1.
|CX|^2 = ( Sum(Ci - Ai)*(Bi - Ai) )^2  / Sum( (Bi - Ai)^2 )

В знаменателе - квадрат длины |ВА|
В числителе квадрат скалярного произв-я АС и АВ
Направление любого из векторов не имеет значения.

if( |CX|^2 <= Д) делаем вывод о совпадении точек С и Х, т.е С лежит на прямой АВ.

Из ухищрений:
Используем квадрат расстояния, чтобы не извлекать корень.
Чтобы не делить, сравниваем произведения:
|CX|^2 * знаменатель <= Д * знаменатель
одновременно с этим заменяем деление умножением, и избегаем деления на 0.

Вдруг Знаменатель <= Д, значит точки совпадают.
Тогда интерпретируем ответ на своё усмотрение, хотя если формально, то через них всегда проходит прямая.

И кстати, если сравнить с 3Д векторным произв-ем. Там вычисляем площадь параллелограмма и смотрим она 0 или нет, а здесь смотрим непосредственно расстояние до прямой. Но треугольник может быть очень вытянутым и тогда площадь буде большой, а растояние до прямой будет на порядки меньше, и тогда "в лоб" может оказаться точнее.
С другой стороны, когда |CX|^2 <= Д, то на самом деле |CX| <= sqrt(D), т.е. сильно длиннее.

P/s Ну вот, свой вариант я довёл до конца. Квадратное уравнение свелось к линейному, необходимость в sqrt() исчезла. Всё можно вывести, и через косинус угла, но чем научнее, тем магичнее, и аналог точки Х явно либо неявно всё равно присутствует. В результате не знаю, есть ли для 321-измерений вариант лучше лобового и понятнее для школьника.
...
Рейтинг: 0 / 0
Три точки на прямой
    #39480647
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98,

ну да, скалярного
...
Рейтинг: 0 / 0
Три точки на прямой
    #39480953
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приходится заниматься исправительно-трудовыми работами:
exp98Заданы точки А, В, С.
Расстояние до прямой АВ вычисляется столь же просто,
Оказалось, в прошлый раз я остановился на полпути.
Короче, при услувиях, озвученных выше, запись в векторной форме:
CX= AB*t - AC
где t= (AB, AC) / |AB|^2В координатной форме:
|CX|^2= SUM( ABi * t - ACi)^2 А дальше можно с ухищрениями - перенести знаменатель во избежание деления и т.д.
Для порверки брал известный труг-к (5, 4, 3), с координатами
AB= (4, 0)
AC= (4, 3) - гипотенуза
CX= CB= (4, -3)
Справедливости ради стоит сказать, что вариант через квадрат косинуса выигрывает в скорости на порядок:
авторCos( alfa) ^2= ( (AB, AC) )^2 / |AB|^2 / |AC|^2 (сравнить с формулой для t)
Если точки на прямой, то Cos=1 - это и проверять.
Надеюсь, что теперь всё.
...
Рейтинг: 0 / 0
Три точки на прямой
    #39480954
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98CX= CB= (4, -3) CX= CB= (0, -3)
...
Рейтинг: 0 / 0
Три точки на прямой
    #39481429
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015Подскажите пожалуйста, как определить, лежат ли три точки на прямой ?

надо провести прямую через любые две точки ( определить k и c в формуле kx + c = 0 по двум точкам) и затем определить, удовлетворяет ли тебя точка этому уравнению
...
Рейтинг: 0 / 0
Три точки на прямой
    #39482194
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да собственно про векторное произведение уже проговорили. Это - конечная точка в вопросе.
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Три точки на прямой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]