|
|
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
Наврал немного, одним сравнением не обойтись. 4 сравнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 09:41 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
И теперь в студию зависимость длины программы от размерности задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 10:48 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
Уже не надо, проверки в цикле вроде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 11:15 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
Достаточно одну размерность проверять, например Х, т.к. все точки на одной прямой. Допустим B должна быть в середине, тогда проверяем 4 варианта: ACB, CAB, BAC, BCA. Если один из них, то переставить B в середину. А можно просто отсортировать массив точек по Х. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 11:38 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
hclubmkтынц Там через площадь параллелограмма, т.е. векторное пр-ние, т.е. уже было. А вот про тольщину линии мы и забыли ... Dima, дезавуируй заявление:Достаточно одну размерность проверять, например Х, т.к. все точки на одной прямой. И напоследок: ТСу это всё наше так же надо, как и недавний цилиндр (кто помнит). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 12:36 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
exp98Dima, дезавуируй заявление:Достаточно одну размерность проверять, например Х, т.к. все точки на одной прямой. Если точки на прямой и упорядочены, то каждая из координат меняется монотонно, т.е. возрастает или убывает. т.е. если X A < X B < X C , то Y A < Y B < Y C или Y A > Y B > Y C ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 12:48 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
Roman Mejtesесли (y1=y2=y3) или (x1-x2)/(y1-y2)=(x2-x3)/(y2-y3) то они лежат на 1 прямой. А если все точки лежат на оси Абсцысс? ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 13:02 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
Изопропилзапиши это на 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 Количество измерений ничего не изменяет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 15:59 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
Шавлюк ЕвгенийИзопропилзапиши это на 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| ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2017, 22:30 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) векторного произведения и произведения двух сторон |a*b| ?= |a|*|b| скалярного, Cos=1, и сравнивать квадраты, чтоб без корня. Заданы точки А, В, С. Расстояние до прямой АВ вычисляется столь же просто, разница лишь вычислит-х затратах. i - номер координаты в N-мерном пр-ве Д - дельта (единая или несколько разных) = минимально допустимая дискретизация точек Х - пересеч. прямой АВ и перпендикуляра из С - её вычисляем, подставляем в формулы, и вуаля: Код: plaintext 1. В знаменателе - квадрат длины |ВА| В числителе квадрат скалярного произв-я АС и АВ Направление любого из векторов не имеет значения. if( |CX|^2 <= Д) делаем вывод о совпадении точек С и Х, т.е С лежит на прямой АВ. Из ухищрений: Используем квадрат расстояния, чтобы не извлекать корень. Чтобы не делить, сравниваем произведения: |CX|^2 * знаменатель <= Д * знаменатель одновременно с этим заменяем деление умножением, и избегаем деления на 0. Вдруг Знаменатель <= Д, значит точки совпадают. Тогда интерпретируем ответ на своё усмотрение, хотя если формально, то через них всегда проходит прямая. И кстати, если сравнить с 3Д векторным произв-ем. Там вычисляем площадь параллелограмма и смотрим она 0 или нет, а здесь смотрим непосредственно расстояние до прямой. Но треугольник может быть очень вытянутым и тогда площадь буде большой, а растояние до прямой будет на порядки меньше, и тогда "в лоб" может оказаться точнее. С другой стороны, когда |CX|^2 <= Д, то на самом деле |CX| <= sqrt(D), т.е. сильно длиннее. P/s Ну вот, свой вариант я довёл до конца. Квадратное уравнение свелось к линейному, необходимость в sqrt() исчезла. Всё можно вывести, и через косинус угла, но чем научнее, тем магичнее, и аналог точки Х явно либо неявно всё равно присутствует. В результате не знаю, есть ли для 321-измерений вариант лучше лобового и понятнее для школьника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 17:33 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
exp98, ну да, скалярного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 19:37 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
Приходится заниматься исправительно-трудовыми работами: 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 - это и проверять. Надеюсь, что теперь всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2017, 20:15 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
exp98CX= CB= (4, -3) CX= CB= (0, -3) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2017, 20:17 |
|
||
|
Три точки на прямой
|
|||
|---|---|---|---|
|
#18+
RMagistr2015Подскажите пожалуйста, как определить, лежат ли три точки на прямой ? надо провести прямую через любые две точки ( определить k и c в формуле kx + c = 0 по двум точкам) и затем определить, удовлетворяет ли тебя точка этому уравнению ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2017, 08:18 |
|
||
|
|

start [/forum/search_topic.php?author=pms&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
143ms |
get topic data: |
7ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 407ms |
| total: | 636ms |

| 0 / 0 |
