Определение третьей точки треугольника
Это небольшая часть более сложной задачи, связанной с геометрией, которой я сейчас занимаюсь.
Вопрос вроде простой, но что-то "не думается".

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

Лучший ответ:
Смысл такой: в трехмерном пространстве есть 2 вершины с известными координатами
В трехмерном пространстве не определить однозначно у тебя бесконечное множество решений, которые образуют конус



Просмотров: 3 523

GeneralElConsul #1 - 5 лет назад (отредактировано ) 0
У третьей точки просто координата X первой точки и координата Y второй. Или наоборот.
Isstrebitel #2 - 5 лет назад 0
GeneralElConsul, в трехмерном пространстве?
Это вроде в двухмерном, а у меня трехмерное, да ещё и неизвестно, как повернут треугольник.
LVenger #3 - 5 лет назад (отредактировано ) 2
Так тут два условия уже с начала - гипотенуза это или катет, то есть если катет, то ты должен либо проверять координаты сразу или брать какое-то исходное направление и по нему определять.
Просто я в координатах шарю, ты можешь зная координаты высчитать дирекционный угол(в твоём случае это угол отсчит по часовой стрелки от направления(отрезка) до направления по оси Y по крайней мере так должно быть)
а вот дальше, надо думать, так как тебе надо так связать реальные и дирекционный углы, чтобы те были во первых каждый реальный не более 90 градусов, узнав угол и дирекционный угол можно легко узнать расстояния и координаты
Формулу тебе сразу прямо не напишу, но на мысль я тебя постарался навести
я геодезист да-да а кто это вообще такой , у нас дофига всякой геометрической состовляющей в работе, сначала сделай для 2-х измерений как я в своём совете, потом развивай формулу до 3-его измерения
Mihahail #4 - 5 лет назад (отредактировано ) 2
На отрезке(определяемом двумя точками) можно построить бесконечное множество треугольников. Причем у всех у них вершина при прямом угле будет лежать на окружности, у которой данный отрезок - диаметр.
Точнее не на окружности, а на сфере, раз тут три-дэ
условие на координаты вершины соотвественно [(x1+x2)/2 - x]^2 + [ (y1+y2)/2 - y ]^2 + [ (z1+z2)/2 - z ]^2 == ( [ x1 - x2 ]^2 + [ y1 - y2 ]^2 + [ z1 - z2 ]^2 )/2
Но тебе ведь не это нужно, ты наверно не указал всё, что тебе нужно в вопросе.
П4ела #5 - 5 лет назад (отредактировано ) 0
Слишком мало данных. Нужна длина еще одной стороны. Так же желательно узнать в какой вершине угол 90* (т.е. нужно знать, что катеты, а что гипотенуза).
Из этих 2-х вершин можно построить огромное количество прямоугольных треугольников.

Mihahail, отрезок может быть не только гипотенузой-диаметром но и одним из 2-х катетов, что увеличивает и без того бесконечное число треугольников =)
GeneralElConsul #6 - 5 лет назад (отредактировано ) 2
Это вроде в двухмерном, а у меня трехмерное, да ещё и неизвестно, как повернут треугольник.
Ок, не увидел.
Принцип схожий: у третий точки должна быть одна из координат первой точки, а две остальные второй точки, или наоборот. Например, у тебя есть A(x1,y1,z3) и B(x2, y2 , z3). Чтобы получился прямоугольный треугольник, берем C(x1, y1, z2) или (x2, y1, z2) и т.д.
Проверил в Максе.
Mihahail #7 - 5 лет назад (отредактировано ) 2
А просто какая-нибудь вершина, чтоб был прямой угол, опираюийся на отрезок как на гипотенузу, то бери точку, у которой максимальная(или минимальная) z координата, из неё берешь x и y, а z берешь из другой точки.
GeneralElConsul, опередил)
П4ела, ну лол, если это катет, то просто делаем к нему перпендикулярный вектор любой длины(и "исходящий" из любого из двух концов отрезка). Т.е. тогда вершина лежит на одной из двух параллельных плоскостей, перпендикулярных отрезку. Условие: x(x1-x2)+y(y1-y2)+z(z1-z2) == [ x1 - x2 ]^2 + [ y1 - y2 ]^2 + [ z1 - z2 ]^2 или c обратным знаком в одной из сторон равенства. Из простых соображений, что вектор r - (r1-r2) лежит в нужной плоскости а значит его скалярное произведение на вектор отрезка(r1-r2) будет ноль.
Тогда получается, кстати, что множество допустимых вершин - это что-то вроде TIE-fighter'a(сфера, зажатая муж двух плоскостей).
Да, как я уже сказал, кто-то не дописал вопрос.
LVenger #8 - 5 лет назад 0
хм, ну тогда ему сначала надо рассмотреть в плоскости Ox к примеру, имея как GeneralElConsul, написал общий Y из =((x2-x1)+(y2-y1))^2 , где у нас y2 = y1 =0 тогда так же делаешь и с 3 точки, находишь точные координаты(среднее) потом для z...
alexprey #9 - 5 лет назад (отредактировано ) 0

Смысл такой: в трехмерном пространстве есть 2 вершины с известными координатами
В трехмерном пространстве не определить однозначно у тебя бесконечное множество решений, которые образуют конус
Mihahail #10 - 5 лет назад (отредактировано ) 0
alexprey, конус? о_О
GeneralElConsul #11 - 5 лет назад (отредактировано ) 0
Решение нашел интуитивно, но немного подумал, могу объяснить почему так.
» смотреть сюда
Начнем с 2D: Система координат Декартовая - углы между осями прямые. Берем точку C(x1, y2).
1.Рисуем прямую со стороны первой точки: мы фиксируем x=x1, y - любое. Получается, любые значения не ездят по бокам по оси X, но зато летят вверх по оси Y. Получается прямая направленная строго от Ox под прямым углом, параллельная Oy.
2.То же самое со второй точкой: x - любое, фиксируем y=y2. Прямая направленная строго от Oy под прямым углом, параллельная Ox.
У нас такая система координат, что между Ox и Oy - прямой угол. Тогда и между прямыми тоже прямой угол.
3D: Берем C(x1, y1, z2).
1.Глядим со стороны первой точки: она знает, что её координаты x и y одолжила точка С. Что у неё за z - ей по барабану, главное чтобы долг x и y вернула. Так что x=x1 и y=y1 - фиксированное, z - без разницы какое. Имеем штырь, уходящий вверх.
2.Глядим со стороны второй точки. фиксируем z=z3, x и y - любые. Примерно так строят крышy в майнкрафте - фиксируют высоту и кладут по всей горизонтальной плоскости Oxy. Имеем фанеру с прямоугольной тенью на земле.
Ровно по той же причине, что и прошлом примере(только тут плоскость-прямая), растущий из земли вверх штырь пробивает фанеру-НЛО под прямым углом.
П4ела #12 - 5 лет назад 0
Mihahail, dic.academic.ru/pictures/es/274581.jpg
GeneralElConsul, ты нашел 1 треугольник из возможных.
GeneralElConsul #13 - 5 лет назад 0
GeneralElConsul, ты нашел 1 треугольник из возможных.
Дык, перебор всех комбинаций.
Может не самый лучший способ для установки, прмоугольный ли триангл, но просто для установления третьей точки прямоугольного треугольника - хорошо подходит.
Mihahail #14 - 5 лет назад (отредактировано ) 0
П4ела, так а при чем тут..?
GeneralElConsul, есть способ ещё проще, как мне кажется. Натягиваем на отрезок прямоугольный параллелепипед(надеюсь, правильно написал), так чтобы отрезок был диагональю.
Если себе всё хорошенько представить, то видно, что любая вершина(кроме исходных двух) будет искомой точкой.
угол D1AB - прямой
П4ела #15 - 5 лет назад (отредактировано ) 0
alexprey, конус? о_О
Mihahail #16 - 5 лет назад 0
П4ела, ну так а при чем тут конус, если ответ - сфера+2 пл-ти?
alexprey #17 - 5 лет назад 0
Mihahail, вращение прямоугольного треугольника дает конус
А мне что-то подсказывает, что ТС делает что-то не правильно и поэтому ему надо рассказать задачу по глобальнее, тогда мб и будет смысл что-то придумать
Mihahail #18 - 5 лет назад 0
alexprey, я знаю что вращение прямогольного треугольника вокруг катета дает конус. Я спрашиваю, при чем тут это?))
alexprey #19 - 5 лет назад 1
Mihahail, ну вдруг поможет.