nemec21 писал(а):Или бедкоды кидаем?)
Твою реализацию можно посмотреть через Lysis
Почему гов... бедкод-то?
Беру прямую с Z = 1.0, если она коллинеарны с исходным вектором, то беру прямую с X = 1.0. С помощью векторного произведения нахожу нормаль плоскости. Далее векторным произведением нахожу третий перпендикуляр - нормаль плоскости "ось горизонтального поворота".
1. Сначала выполняется горизонтальный поворот: вычисляю первый базис (случайное число + проекция на ось поворота), второй вычисляю по формуле с нормалью, нормализую, третий базис вычисляю векторным произведением первого и второго (он пригодится для новой оси вертикального поворота, так как вектор по горизонту мы поворачиваем "вместе с вертикальной плоскостью").
Далее вычисляю повернутый вектор через два базиса (поворот в плоскости), используя матрицу поворота + проекции.
2. Теперь выполняется вертикальный поворот: нахожу нормаль (ось вертикального вращения) через векторное произведение получившегося вектора и третьего базиса. Нормализую. Далее всё так, как и в первом повороте: беру два базиса для поворота в плоскости и поворачиваю. (Третий базис нужен только для сохранения прямой для последующего вертикального поворота, на картинке отображена эта прямая фиолетовым цветом).
Сразу трёхмерный поворот не знаю как выполнить, если есть алгоритм более легкий, выполняющий функционал - я очень заинтересован в том, чтобы его
увидеть и
изучить!
UPD: Или хотя бы теоретическую часть его прочитать #без_гугл_в_помощь
У вас нет необходимых прав для просмотра вложений в этом сообщении.