Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
 Аватар для tonline_kms65
-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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.09.2017, 13:44
Ответы с готовыми решениями:

Как развернуть систему координат формы
Как развернуть систему координат формы? чтоб отсчёт шел с нижнего угла а не с верхнего

Как закрыть одну форму, и развернуть другую
Ребята, не пойму почему после выбора radioButton, я хочу закрыть окно и открыть форму с окнами, но происходить иное: опускается окно...

Как свернуть две формы в одну иконку в трей и развернуть
И так думаю всё понятно по названию темы но еще раз скажу у меня две формы при сворачивании одной должна свернуться другая, но Private Sub...

27
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
12.09.2017, 15:46
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Igor3D Посмотреть сообщение
напр зажигалку или пачку сигарет.
Не курю..
Цитата Сообщение от Igor3D Посмотреть сообщение
плоскости стола (вокруг Y).
У меня у стола вверх идет Z..

Шарнирный замок вроде есть только у углов Эйлера. А тут по кратчайшей дуге все крутит как угодно.
0
 Аватар для tonline_kms65
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 226
12.09.2017, 17:04  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
Покажите как Вы переводите вектор в углы (тело GetAngleVectors)
сама функция углы в вектор
Кликните здесь для просмотра всего текста
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
 Аватар для tonline_kms65
-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
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,080
Записей в блоге: 2
13.09.2017, 15:05
tonline_kms65, цитирование для краткости опускаю, примеров кода не нужно. Ну что, надо разбираться с Вашей "матчастью".

Какая бы система/API не была - вряд ли она будет использовать какие-то "свои" углы. Думаю что это обычные углы Эйлера в градусах. Первым делом это надо проверить. Задайте вращение только по одной из оси и посмотрите, напр

1) angles = { 0, 0, 0 };
2) angles = { 0, 45, 0 };
3) angles = { 0, 90, 0 };

В рез-те дрон должен поворачиваться вокруг Y

Не по теме:

Цитата Сообщение от tonline_kms65 Посмотреть сообщение
Я, ребятки,
Еще одно "ребятки" или "тыкнете" - и я Вам больше не отвечу

0
 Аватар для tonline_kms65
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 226
13.09.2017, 18:18  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
1) angles = { 0, 0, 0 };
2) angles = { 0, 45, 0 };
3) angles = { 0, 90, 0 };
В рез-те дрон должен поворачиваться вокруг Y
Если объявить переменную таким образом
float _angle[3] = {0.0, 90.0, 0.0}; //на 90 градусов по Y (_angle[1])
то естественно что Дрон повернется именно на 90 градусов, и именно по координате Y.
Разница в том что здесь заданно статичное значение, а я просто прибавляю ко всем 3 координатам значения, пока эти углы не выровняются со значениями углов игрока. За счет этого и происходит поворот Дрона теле-портом каждый тик на это самое приращение.

Я понимаю так - ориентация координат угла Дрона здесь (при статическом объявлении) зависит от углов центра карты(мира).
Я вместо координат углов центра карты, пытаюсь использовать координаты углов камеры игрока(которые зависимы от координат центра карты). Я представляю себе это как то так. Возможно здесь и есть моя ошибка.

Добавлено через 12 минут
Возможно что это "Углы Эйлера", но у меня Дрон поворачивается одновременно по всем 3 осям. Поэтому не могу ничего определенного сказать.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,080
Записей в блоге: 2
14.09.2017, 13:35
Цитата Сообщение от tonline_kms65 Посмотреть сообщение
Разница в том что здесь заданно статичное значение, а я просто прибавляю ко всем 3 координатам значения, пока эти углы не выровняются со значениями углов игрока. За счет этого и происходит поворот Дрона теле-портом каждый тик на это самое приращение.
Это нормально, "просто сложение" для углов Эйлера работать НЕ будет, именно за это их и не любят. ОБЯЗАТЕЛЬНО есть еще "порядок применения" этих углов. Напр порядок XYZ, т.е. сначала вращаем по X, затем по Y и последним по Z. При вращении (0, 90, 0) все как доктор прописал. А вот при вращении хотя бы (45, 90, 0) уже неразбериха - ведь первое вращение меняет оси Y и Z, и второй поворот выполняется уже вокруг повернутого Y.

Поэтому Вам нужно найти тот порядок что установлен в Вашем API - из документации (наводки "Euler angles order", "Rotation order") или экспериментально, печатая в консоль.

Сам доворот в принципе делается так (псевдокод для оси Y):

C++
1
2
3
4
5
6
7
Vec3 forward, up, right;  // вектора что вернула ф-ция API
...
Vec3 view = drone.position - camera.position;  // вектор взгляда ("от камеры")
Vec3 prj = (view - up * dot(up, view)).normalized();   // проекция взгляда на плоскость вращения
float deltaAngle = acos(dot(prj, forward)) * 180 / PI;   // угол между текущим forward и желаемым
if (dot(up, cross(forward. prj)) < 0)   // знак угла
  deltaAngle  = -deltaAngle;
Полученный deltaAngle в градусах - то что надо прибавить к angle[1]. Однако "просто так" это будет работать только если вращение по Y последнее (или единственное). Чтобы учесть все вращения - выясните порядок углов. Пока все

Добавлено через 6 минут
Цитата Сообщение от Igor3D Посмотреть сообщение
со значениями углов игрока
- углы игрока (камеры) ну никакого отношения к довороту дрона не имеют - ну разве что Вы захотите взять forward камеры вместо вектора дрон - камера.
0
 Аватар для tonline_kms65
-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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.09.2017, 12:09

Как сделать точку отсчёта координат угла от центра и использовать Box2D?
Здравствуйте. Под действием гравитации летит квадрат, изначально повёрнутый под углом в 55 градусов, после столкновения с землёй он...

Вот есть кнопочки: свернуть, развернуть, закрыть. Как скрыть кнопку развернуть?
Вот есть кнопочки: свернуть, развернуть, закрыть. Как скрыть кнопку развернуть? Что кнопки свирнуть и закрыть оставались на местах....

прототипирование алгоритма вычисления координат/угла поворота
Не нашел отдельной ветки на форуме. Ищу помощи в решении задачи моделирования алгоритма вычисления координат и угла поворота по данным силы...

Задача на нахождение угла при известных точках в 2D системе координат
Вот собственно наглядный рисуночек приложен. Помогите пожалуйста.

Из какого угла picturebox выходят оси координат и какая где из них?
запутался из какого угла оси координат изображения выходят и какая где из них? picturebox


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
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. Задача: контроль уникальности строк в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru