Страница 2 из 3

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 09 фев 2018, 20:57
NOVA
Cr0c писал(а):Известны 5 точек го1, 4 точки го2 и все углы из го2?

Эм нет. Из точек известно только. GO1 (0,0,0) И одна из любых точек пересечения. Как душе угодно берём за единицу любую точку. Известны все углы у всех ГО и векторов. Кстати векторов с углами можно сделать больше, потому что как вещают СМИ 4-ёх векторов недостаточно для определения местоположения второго ГО. Осталось найти всё остальное.

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 09 фев 2018, 21:13
Cr0c
Не подумай, что я придираюсь...
Поименуй точки (A, B, C, D, G1, G2)
Сделай список известных точек, углов (по правилам точка-вершина-точка) и расстояний.
Про вычисление G2 я понял.

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 09 фев 2018, 21:33
NOVA
Ок завтра. Сдаюсь пока. Может Ваша смена будет дежурить.

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 10 фев 2018, 03:05
Yaro
По скольким осям идет вращение фигуры?

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 10 фев 2018, 08:44
Cr0c
Yaro писал(а):По скольким осям идет вращение фигуры?

Не важно, там точка вращения.

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 10 фев 2018, 13:19
NOVA
Вобщем опять.
Есть два GO (GO0 и GO1) Известно положение первого GO в 3d пространстве (0,0,0). Из этих GO исходит по 4 вектора вектора направления бесконечной длины. Известны направления всех векторов и углы между ними. Неизвестны все точки пересечения кроме одной. LP = GO0+LeftVector0.normalized. Найти любое положение GO1 при котором все соответствующие вектора пересекаются. На изображении готовый результат. На старте задачи ни один вектор не пересекается кроме LeftVector0 и LeftVector1 в точке LP. Причём мы знаем вектор LP-GO0 (берём за единицу), но не знаем вектор LP-GO1.
Скрытый текст:
Изображение

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

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 10 фев 2018, 14:09
Cr0c
Углы у go1 и go2 идентичны?

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 10 фев 2018, 15:13
NOVA
Нет. Они все разные. Прямых углов нет.

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 10 фев 2018, 15:37
Cr0c
NOVA писал(а):Раньше я это делал поэтапно динамически - это долгий некрасивый процесс

10 итераций - 1/1024 от шага в лучшем случае и 1/256 в худшем - при первом шаге 90 градусов. Та самая "артиллерийская вилка", не помню другого названия.
Кроме этих данных у go2 ничего не известно, только углы между векторами?
Подумаю, пара идей есть, но обещать не буду.

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 10 фев 2018, 15:49
NOVA
да. Я сейчас картинки дорисую, объясню в чём проблема динамического метода.

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 10 фев 2018, 16:11
NOVA
Вобщем вот. Допустим я без труда сделал так, чтобы левые и правые вектора попарно пересекались. Это не сложно. Далее, надо сделать так чтобы для начала пересеклись верхние вектора, и левый с правым остались пересечёнными. Кроссвектор показывает расстояние между верхними лучами. MidPoint = LeftPoint+(RightPoint-LeftPoint)*0.5f. Иначе говоря середина между левой и правой точкой. MoveVector=MidPoint-GO1.
Скрытый текст:
Изображение

Что вы думаете? Здесь три степени свободы в перемещениях для того, чтобы словить пересечение верхнего вектора.
1 вариант. Вращать вокруг MidPoint по вектору RightPoint-LeftPoint, пока верхние вектора не пересекутся (определяя нехитрым алгоритмом в какую сторону крутить).
2 вариант. Двигать по вектору GO0-MidPoint, то есть вправо-лево. В данном случае влево, потому что лучи сужаются слева.
3 вариант. Двигать по вектору MoveVector назад вперёд.
Я выбрал третий вариант, дабы максимально разнести GO друг от друга.
Но во втором и третьем варианте при движении левые и правые вектора перестают пересекаться.
Скрытый текст:
Изображение

Приходится доводить их движением вокруг левой и правой точки. Тогда опять верхний вектор не пересекается.
Вобщем туда сюда прыг скок.
Для полного решения нужен 5-тый и шестой вектор, но они получаются только после выравнивания по четырём. 5-тый веткор - вектор максимального разноса. 6-й вектор - вектор окончательной коррекции. То есть может так получиться, что у пятых векторов даже кроссвектор не находится. Вернее он с другой стороны.

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 12 фев 2018, 18:52
NOVA
Вобщем много погуглив, становится ясно, что нужно, но возникает куча вопросов.
Уравнение для LeftVector0 должно строится по двум точкам (получить хотя бы уравнение прямой).
Ок. Первая точка 0.0.0, вторая точка. 0.0.1
Результат в калькуляторе.
Скрытый текст:
Изображение

Всё бы нормально, но что такое t? Временной континуум в сферическом вакууме? Смысл системы гласит. При любом z x=0,y=0.
Ладно поехали дальше.
Уравнение для RightVector0 не имеет второй точки и поэтому должно плясать на угловых коэффициентах.
А вот вменяемое уравнение с угловыми коэффициентами в 3d пространстве я толком не нашёл. К чему считаются эти угловые коэффициенты? В 2d - это тангенс угла к оси X
Такое ощущение, что всё надо выводить через t. И о мама родная. По-любому перенос из системы координат одного объекта в другой. И в итоге найти углы поворота и смещения между координатными системами двух ГО. Да точно.

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 16 фев 2018, 07:30
Cr0c
Что-то не получается у меня вывести формулу расчета (((

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 16 фев 2018, 17:39
NOVA
Cr0c писал(а):Что-то не получается у меня вывести формулу расчета (((

Никто не говорил, что это легко. Тут бы хоть с кватернионами до конца разобраться и вечно всё нормировать надо. Но формула должна быть. Эти вещи проделывают другим методом.
Надо просто приравнять снос позиции и поворот в кватернионах второй системы координат из которой выходят все вектора. То ест у всех векторов должен быть один поворот. И пересекаются они все с соответствующими векторами в другой системе.
То есть соответствующие X,y,z этих векторов попарно равны. Так -то можно вывести одно через другое и приравнять всё к сносу и повороту в кватернионах. А и не забыть, что точка пересечения одного вектора известна. Например (-1,0,1) Уравнение луча приобретает простецкий вид.
Я пока что застрял на получении перпендикулярного вектора. У меня по известной формуле почему-то выводятся разные вектора за фрейм.
float px = y0 * z1 - z0 * y1;
float py = z0 * x1 - x0 * z1;
float pz = x0 * y1 - y0 * x1;

//CrossVectornormalized
Debug.Log(new Vector3(px, py, pz).normalized);
Эти вектора противоположны по направлению. Так то можно это легко победить SQRT (py^2). Но надо понять почему так происходит.

Re: Уравнение луча в пространстве и на плоскости?

СообщениеДобавлено: 17 фев 2018, 07:16
Cr0c
NOVA писал(а):То есть соответствующие X,y,z этих векторов попарно равны.

Тэк-с, не понял. Второй объект на таком же угле к той плоскости, что и первый?