Определить лежит ли точка на дуге заданной тремя точками в 3D
От: igas Беларусь  
Дата: 22.10.14 13:29
Оценка:
Дуга задана тремя точками в трёхмерном пространстве, помогите определить лежит ли заданная точка на этой дуге.
Буду благодарен любой помощи
Re: Определить лежит ли точка на дуге заданной тремя точками
От: LuciferSaratov Россия  
Дата: 22.10.14 14:04
Оценка:
Здравствуйте, igas, Вы писали:

I>Дуга задана тремя точками в трёхмерном пространстве, помогите определить лежит ли заданная точка на этой дуге.

I>Буду благодарен любой помощи

1) строим плоскость, проходящую через эти точки
2) если заданная точка плоскости не принадлежит, то ответ отрицательный
3) вводим какую-нибудь декартову систему координат на плоскости, переводим координаты всех точек в нее, таким образом сводя задачу к двумерной
4) строим уравнение окружности, проходящей через три точки
5) если заданная точка окружности не принадлежит, то ответ отрицательный
6) вводим полярную систему координат с центром, совпадающим с центром окружности, переводим координаты крайних точек дуги и заданной точки в нее
7) если угловая координата заданной точки попадает в отрезок, заданный угловыми координатами крайних точек дуги, то ответ положительный, иначе отрицательный
Отредактировано 22.10.2014 14:06 LuciferSaratov . Предыдущая версия . Еще …
Отредактировано 22.10.2014 14:05 LuciferSaratov . Предыдущая версия .
Re[2]: Определить лежит ли точка на дуге заданной тремя точками
От: cures Россия cures.narod.ru
Дата: 22.10.14 15:02
Оценка:
Здравствуйте, LuciferSaratov, Вы писали:

I>>Дуга задана тремя точками в трёхмерном пространстве, помогите определить лежит ли заданная точка на этой дуге.


LS>1) строим плоскость, проходящую через эти точки

LS>2) если заданная точка плоскости не принадлежит, то ответ отрицательный
LS>3) вводим какую-нибудь декартову систему координат на плоскости, переводим координаты всех точек в нее, таким образом сводя задачу к двумерной
LS>4) строим уравнение окружности, проходящей через три точки
LS>5) если заданная точка окружности не принадлежит, то ответ отрицательный
LS>6) вводим полярную систему координат с центром, совпадающим с центром окружности, переводим координаты крайних точек дуги и заданной точки в нее
LS>7) если угловая координата заданной точки попадает в отрезок, заданный угловыми координатами крайних точек дуги, то ответ положительный, иначе отрицательный

Начиная с пункта 3 сложновато, не проще ли: строим центр окружности как точку пересечения этой плоскости с срединными перпендикулярами к двум парам исходных точек, сравниваем расстояние до этого центра от проверяемой точки и от одной из искомых. Если равны — то точка лежит и на сфере и на плоскости, то есть на нужной окружности, если не равны — не лежит.
Можно в символьном виде записать проверяемое равенство, там что-нибудь может сократиться, вычисления упростятся (можно будет явно координаты центра не искать).
Re[3]: Определить лежит ли точка на дуге заданной тремя точками
От: LuciferSaratov Россия  
Дата: 22.10.14 15:21
Оценка:
Здравствуйте, cures, Вы писали:

C>Начиная с пункта 3 сложновато, не проще ли: строим центр окружности как точку пересечения этой плоскости с срединными перпендикулярами к двум парам исходных точек,


если вычисления делать с трехмерными координатами, то в общем-то можно просто рассчитать точку пересечения срединных перпендикуляров, она автоматически получится принадлежащей плоскости этой дуги.
однако искать точку пересечения двух прямых в трехмерном пространстве это та еще морока.
скорее всего автору топика это нужно для расчетов в программе, а там будут практически неизбежны неточности вычислений.
и вычислив эти срединные перпендикуляры может оказаться, что они не пересекаются вообще — из-за неточности операций с плавающей точкой.
это нужно будет как-то учитывать при расчетах.
в этом отношении перевод всего в координаты на плоскости даст более стабильный результат — срединные перпендикуляры в плоскости точно пересекутся.

> сравниваем расстояние до этого центра от проверяемой точки и от одной из искомых. Если равны — то точка лежит и на сфере и на плоскости, то есть на нужной окружности, если не равны — не лежит.

C>Можно в символьном виде записать проверяемое равенство, там что-нибудь может сократиться, вычисления упростятся (можно будет явно координаты центра не искать).

к такому решению нужно еще придумать какой-то прием, который позволит проверить принадлежность именно дуге, а не только окружности.
очевидный путь — это сравнение угловых координат точек, а для этого нужно вычислять центр.
Re[2]: Определить лежит ли точка на дуге заданной тремя точк
От: igas Беларусь  
Дата: 23.10.14 06:28
Оценка:
Здравствуйте, LuciferSaratov, Вы писали:

LS>Здравствуйте, igas, Вы писали:


I>>Дуга задана тремя точками в трёхмерном пространстве, помогите определить лежит ли заданная точка на этой дуге.

I>>Буду благодарен любой помощи

LS>1) строим плоскость, проходящую через эти точки

LS>2) если заданная точка плоскости не принадлежит, то ответ отрицательный
LS>3) вводим какую-нибудь декартову систему координат на плоскости, переводим координаты всех точек в нее, таким образом сводя задачу к двумерной
LS>4) строим уравнение окружности, проходящей через три точки
LS>5) если заданная точка окружности не принадлежит, то ответ отрицательный
LS>6) вводим полярную систему координат с центром, совпадающим с центром окружности, переводим координаты крайних точек дуги и заданной точки в нее
LS>7) если угловая координата заданной точки попадает в отрезок, заданный угловыми координатами крайних точек дуги, то ответ положительный, иначе отрицательный

В принципе, мой первоначальный вариант был по-похожему плану, но я закопался в вычислениях поэтому и попросил помощи, может проще что-то есть. Да, вы верно предположили, мне это нужно вычислять в программе на C++, поэтому нужно учесть погрешность чисел с плавающей запятой и скорость вычисления.
Отредактировано 23.10.2014 9:15 igas . Предыдущая версия . Еще …
Отредактировано 23.10.2014 7:05 igas . Предыдущая версия .
Re[4]: Определить лежит ли точка на дуге заданной тремя точками
От: cures Россия cures.narod.ru
Дата: 23.10.14 12:22
Оценка:
Здравствуйте, LuciferSaratov, Вы писали:

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

LS>однако искать точку пересечения двух прямых в трехмерном пространстве это та еще морока.

Зачем прямых? Срединные перпендикуляры в трёхмерном пространстве — это плоскости, плюс исходная плоскость, получается линейная система из трёх уравнений.

LS>скорее всего автору топика это нужно для расчетов в программе, а там будут практически неизбежны неточности вычислений.


Про это ничего не сказано, если исходные координаты целочисленные, то всё считается в целых числах (возможно, длинных), а если исходные в плавучке, то можно считать расстояние от целевой точки до окружности и определяться с критериями допуска.

LS>и вычислив эти срединные перпендикуляры может оказаться, что они не пересекаются вообще — из-за неточности операций с плавающей точкой.

LS>это нужно будет как-то учитывать при расчетах.

Если плоскости не пересекутся, то они параллельны, тогда исходные 3 точки не определяют окружность, и задача некорректна. Но тогда и Вашим методом уравнение не построится
Погрешности надо учитывать, конечно.

LS>в этом отношении перевод всего в координаты на плоскости даст более стабильный результат — срединные перпендикуляры в плоскости точно пересекутся.


Тоже не факт Из-за погрешностей от замены координат, если исходная дуга — почти прямая, то прямые могут либо вообще не пересечься, либо пересечься в произвольной точке, очень далёкой от центра окружности. Как с этим бороться — непонятно, нужно чёткое ТЗ.

C>> сравниваем расстояние до этого центра от проверяемой точки и от одной из искомых. Если равны — то точка лежит и на сфере и на плоскости, то есть на нужной окружности, если не равны — не лежит.


LS>к такому решению нужно еще придумать какой-то прием, который позволит проверить принадлежность именно дуге, а не только окружности.

LS>очевидный путь — это сравнение угловых координат точек, а для этого нужно вычислять центр.

Про дугу не заметил, да. Но там не сказано, что дуга должна быть между точками, да и что значит между — ещё надо определять, ТС этого не сделал, и, наверное, пока об этом не думал. Можно попробовать через сонаправленность векторных произведений, если действительно нужно.
Re[5]: Определить лежит ли точка на дуге заданной тремя точками
От: LuciferSaratov Россия  
Дата: 23.10.14 15:35
Оценка:
Здравствуйте, cures, Вы писали:

LS>>однако искать точку пересечения двух прямых в трехмерном пространстве это та еще морока.


C>Зачем прямых? Срединные перпендикуляры в трёхмерном пространстве — это плоскости, плюс исходная плоскость, получается линейная система из трёх уравнений.


да, верно. считал срединные перпендикуляры по привычке прямыми : )

C>Тоже не факт Из-за погрешностей от замены координат, если исходная дуга — почти прямая, то прямые могут либо вообще не пересечься, либо пересечься в произвольной точке, очень далёкой от центра окружности. Как с этим бороться — непонятно, нужно чёткое ТЗ.


ну это по сути вырождение дуги в прямую, окружность с центром в бесконечности.
скорее всего будет допустимым проверить принадлежность точки отрезку.

C>Про дугу не заметил, да. Но там не сказано, что дуга должна быть между точками, да и что значит между — ещё надо определять, ТС этого не сделал, и, наверное, пока об этом не думал.


похоже на недостаточно формализованную практически нужную фичу в чем-то вроде графического редактора.

C>Можно попробовать через сонаправленность векторных произведений, если действительно нужно.


я тоже об этом думал, но сходу для меня неочевидно, получится ли так.
Re[6]: Определить лежит ли точка на дуге заданной тремя точками
От: igas Беларусь  
Дата: 24.10.14 07:37
Оценка:
Здравствуйте, LuciferSaratov, Вы писали:

LS>Здравствуйте, cures, Вы писали:


C>>Про дугу не заметил, да. Но там не сказано, что дуга должна быть между точками, да и что значит между — ещё надо определять, ТС этого не сделал, и, наверное, пока об этом не думал.


LS>похоже на недостаточно формализованную практически нужную фичу в чем-то вроде графического редактора.


Дуга окружности задана тремя точками, соответственно одна из них начало дуги, одна из них — точка через которую дуга проходит и ещё одна — конец дуги. Да и это нужно определить.
Re[7]: Определить лежит ли точка на дуге заданной тремя точками
От: cures Россия cures.narod.ru
Дата: 24.10.14 23:12
Оценка:
Здравствуйте, igas, Вы писали:

I>Дуга окружности задана тремя точками, соответственно одна из них начало дуги, одна из них — точка через которую дуга проходит и ещё одна — конец дуги. Да и это нужно определить.


Известно ли, которая из них — начало, которая — конец, и которая — промежуточная? Никакие две из этих точек не совпадают? В чём изначально заданы координаты? Какие допуски?
Зачем скорость вычисления? Предполагается, что будет мало дуг, и для каждой много проверяемых точек? Или много и дуг, и точек? Может ли дуга быть больше развёрнутого угла?

Это базовые вопросы для постановки ТЗ, без знания изначальной задачи на них не ответишь.
А так задача почти тривиальна, линейная система, сравнение двух (квадратов) расстояний, плюс поиграться с направленностями. Переход к углам — атан2, не очень дешёвая операция, да и с углами потом отдельные разборки, чтобы понять, кто между кем. Если дуга — (почти) прямая, то с точностью этих углов отдельная проблема.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.