|
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 226
|
|
Как развернуть одну из координат угла09.09.2017, 13:44. Показов 7326. Ответов 27
Метки нет (Все метки)
Всем здравствуйте.
Такая проблема у меня появилась, я не могу сообразить как можно развернуть одно из полученных значений угла сущности. Как бы понятнее объяснить. Например у меня есть сущность: с позицией float pos[3] pos[0] = 200.0; pos[1] = 100.0; pos[2] = 0.0; и есть углы этой сущности float ang[3] (направление "взгляда") ang[0] = 100.0; ang[1] = 50.0; ang[2] = 10.0; Мне нужно развернуть одно из значений угла, например ang[2] в противоположную сторону. Как это можно сделать? Перепробовал разные варианты, всё не то. Один из вариантов - получаю из углов вектор направления. GetAngleVectors(ang, vecDir, NULL_VECTOR, NULL_VECTOR); и делаю этот вектор негативным (*-1) NegateVector(vecDir); после получаю уже из негативного вектора углы float fwd[3] GetAngleVectors(vecDir, fwd, NULL_VECTOR, NULL_VECTOR) к сожалению результат не тот. Кто с таким сталкивался, отпишитесь пожалуйста. Может кто что придумал. Точно такая-же, но нерешенная тема есть здесь У меня просьба, пожалуйста без предложений кватернионов, матриц поворота, углов Эйлера и т.д.
0
|
|
| 09.09.2017, 13:44 | |
|
Ответы с готовыми решениями:
27
Как развернуть систему координат формы Как закрыть одну форму, и развернуть другую Как свернуть две формы в одну иконку в трей и развернуть |
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||
| 12.09.2017, 15:46 | |||
![]() Шарнирный замок вроде есть только у углов Эйлера. А тут по кратчайшей дуге все крутит как угодно.
0
|
|||
|
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 226
|
||
| 12.09.2017, 17:04 [ТС] | ||
|
Кликните здесь для просмотра всего текста
GetVectorAngles Function
Returns angles from a vector. void GetVectorAngles(const float vec[3], float angle[3]) Parameters const float[3] vec Vector. float[3] angle Angle buffer. сама функция вектор в углы Кликните здесь для просмотра всего текста
GetAngleVectors Function
Returns vectors in the direction of an angle. void GetAngleVectors(const float angle[3], float fwd[3], float right[3], float up[3]) Parameters const float[3] angle Angle. float[3] fwd Forward vector buffer or NULL_VECTOR. float[3] right Right vector buffer or NULL_VECTOR. float[3] up Up vector buffer or NULL_VECTOR.
0
|
||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 12.09.2017, 19:00 | |
|
В гугле “Тело функции”
0
|
|
|
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 226
|
|
| 13.09.2017, 14:23 [ТС] | |
|
Excalibur921,
Вроде нормальный вопрос задал. Попросил же не писать сюда кватернионы и т.д. нет пишешь. Я думал может быть бот - вроде нет. Если есть желание поумничать - создай ты свою тему и умничай там. Ни малейшего дельного совета я пока не получил от тебя, более того, ты саму суть моего вопроса уводишь в сторону. Пойми, ну нет у меня столько времени "жевать сопли" как у тебя. Мне помощь нужна, а не твоё умничание. В общем - постарайся больше не писать мне. Не засирай мне мою тему. Igor3D, Я приеду домой, покажу сам кусок кода. По памяти я не напишу. Там ничего особенного нет, варианты я перепробовал уже все что можно. Если на словах - то выглядит это так: 1. навожу прицел на Дрона (сущность это ENT entity), при нажатии на клавишу вызова - проверка на соответствие, передаю координаты(позицию и углы) игрока в глобал. переменную. 2. запускаю функцию подъёма и разворота Дрона в направлении углов игрока(углы беру из глобальной переменной) подъём Дрона вектором скорости, чтоб не трясло его. 3. в функции подъёма и разворота сравниваю все текущие 3 угла Дрона с углами игрока, приращением ко всем 3 углам с определенной частотой. 4. если разворот закончен и Дрон поднялся на определенную высоту - запускаю след функцию- движение Дрона к позиции игрока (позиция игрока из глоб. переменной) движение так же вектором скорости. 5. и .т.д. Всегда, при малейшей попытке развернуть угол начинаются ошибки, крутит Дрона как попало. Всё отлично только при одном условии - Дрон смотрит точно в направлении взгляда вызвавшего его игрока. Там никакие 180 град не мешают, с любого угла отрабатывает прекрасно. Код простейший. Возможно я ошибаюсь при передаче координат и углов в функцию разворота, и где то происходит конфликт параметров внутри функции с полученными. Но навряд-ли. И та-же просьба, пожалуйста, не пиши про кватернионы. Я не просто так в начале об этом просил. Здесь ответ только по сути моего вопроса. Я, ребятки, создам отдельную тему если мне понадобятся кватернионы, матрицы и тому подобное. Там можно будет поумничать и пофилосовствовать. Добавлено через 7 минут Excalibur921, Кстати, у тебя свои наработки есть? Где можно посмотреть на твои работы?
0
|
|
| 13.09.2017, 15:05 | |
|
tonline_kms65, цитирование для краткости опускаю, примеров кода не нужно. Ну что, надо разбираться с Вашей "матчастью".
Какая бы система/API не была - вряд ли она будет использовать какие-то "свои" углы. Думаю что это обычные углы Эйлера в градусах. Первым делом это надо проверить. Задайте вращение только по одной из оси и посмотрите, напр 1) angles = { 0, 0, 0 }; 2) angles = { 0, 45, 0 }; 3) angles = { 0, 90, 0 }; В рез-те дрон должен поворачиваться вокруг Y
0
|
|
|
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 226
|
||
| 13.09.2017, 18:18 [ТС] | ||
|
float _angle[3] = {0.0, 90.0, 0.0}; //на 90 градусов по Y (_angle[1]) то естественно что Дрон повернется именно на 90 градусов, и именно по координате Y. Разница в том что здесь заданно статичное значение, а я просто прибавляю ко всем 3 координатам значения, пока эти углы не выровняются со значениями углов игрока. За счет этого и происходит поворот Дрона теле-портом каждый тик на это самое приращение. Я понимаю так - ориентация координат угла Дрона здесь (при статическом объявлении) зависит от углов центра карты(мира). Я вместо координат углов центра карты, пытаюсь использовать координаты углов камеры игрока(которые зависимы от координат центра карты). Я представляю себе это как то так. Возможно здесь и есть моя ошибка. Добавлено через 12 минут Возможно что это "Углы Эйлера", но у меня Дрон поворачивается одновременно по всем 3 осям. Поэтому не могу ничего определенного сказать.
0
|
||
| 14.09.2017, 13:35 | ||||||||
|
Поэтому Вам нужно найти тот порядок что установлен в Вашем API - из документации (наводки "Euler angles order", "Rotation order") или экспериментально, печатая в консоль. Сам доворот в принципе делается так (псевдокод для оси Y):
Добавлено через 6 минут
0
|
||||||||
|
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 226
|
|
| 15.09.2017, 12:09 [ТС] | |
|
Всё, готово. Разобрался. Помогли на буржуйском сайте. Оказалось все не просто, а очень просто.
Вот всё что требовалось, 3 строчки кода: Кликните здесь для просмотра всего текста
client_angle[1] += 180.0; //переворачиваю координату Y угла камеры игрока
if(client_angle[1] < -180.0) client_angle[1] += 360.0; if(client_angle[1] > 180.0) client_angle[1] -= 360.0; а дальше сравниваю углы и выравниваю их как обычно. Координаты X и Z можно, по идее, закрепить, сделать статичными. Но т.к. Дрон имеет физические свойства - думаю не стоит т.к. он может цепляться за стены, землю, углы естественно меняются. На видео это хорошо видно. В общем задачка решена, одно из направлений углы камеры игрока развернуты. Получается - это не "углы Эйлера", это какие-то "просто углы". Что больше всего нравится - нет практически никаких расчетов. Ни синусов, ни косинусов, ни прочей белиберды. Для сетевой игры это то что нужно. На видео вызываю 2 созданных Дрона. Отрабатывает просто безукоризненно. Есть кое-какие недоработки конечно, но основная задача выполнена, всё остальное, понятно, уже мелочи. https://youtu.be/90aPtpC5bBs
0
|
|
| 15.09.2017, 12:09 | |
|
Как сделать точку отсчёта координат угла от центра и использовать Box2D? Вот есть кнопочки: свернуть, развернуть, закрыть. Как скрыть кнопку развернуть? прототипирование алгоритма вычисления координат/угла поворота Задача на нахождение угла при известных точках в 2D системе координат
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования?
Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная.
Где разрыв
. . .
|
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно»
Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
|
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую:
Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
|
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий?
Да, такие данные есть, и они хорошо описаны и в российской,. . .
|
|
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу:
https:/ / github. com/ altbodhi/ ReConMan
По итогу пришел к мысли, что DU не дружат с существующими технологиями.
От сериализации до отображения в реляционную. . .
|
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
|
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
|
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2.
Задача: контроль уникальности строк в. . .
|