Как поворачивать в нужном порядке?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как поворачивать в нужном порядке?

Сообщение Zimaell 02 июл 2023, 19:52

ситуация следующая - делается поиск пути, точка А ищет путь к точке В, для этого она вычисляет изначальное направление, к примеру точка А находится вверху слева а точка В находится внизу справа, соответственно получается вектор (1f, 0 -1f).
если же эта точка недоступна (перекрыта каким-то препятствием) то нужно искать другие направления, и конечно же лучше искать оптимальные, то есть в данной ситуации от нынешнего направления нужно по вернуть на 45 градусов потом -45, далее 90 и -90 и т.д.
подскажите каким образом это осуществить?
я пробовал так
Синтаксис:
Используется csharp
private Quaternion[] ArrayDirRot = new Quaternion[8]{
        Quaternion.Euler(0f, 0f, 0f),
        Quaternion.Euler(0f, 45f, 0f),
        Quaternion.Euler(0f, -45f, 0f),
        Quaternion.Euler(0f, 90f, 0f),
        Quaternion.Euler(0f, -90f, 0f),
        Quaternion.Euler(0f, 135f, 0f),
        Quaternion.Euler(0f, -135f, 0f),
        Quaternion.Euler(0f, 180f, 0f)
        };
Vector3 dir = new Vector(1f, 0 -1f);
for(int i = 0; i < ArrayDirRot.Length; ++i){
     dirRot = ArrayDirRot[i] * dir;
     searchPoint = pointStart + dirRot;

но это не работает, даже не пойму как оно "крутит"...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как поворачивать в нужном порядке?

Сообщение waruiyume 02 июл 2023, 22:31

Если уж и так захардкодили, то захардкодили бы направления.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как поворачивать в нужном порядке?

Сообщение Zimaell 02 июл 2023, 23:19

waruiyume писал(а):Если уж и так захардкодили, то захардкодили бы направления.

не ну можно конечно и статически под все варианты написать, только около 100 строчек будет...
я вот и интересуюсь как данную задачу решить наиболее простым способом, думаю такое решение есть, только я еще на него не наткнулся...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как поворачивать в нужном порядке?

Сообщение Alkos26Rus 03 июл 2023, 10:52

А откуда ты взял этот код? Может ты его не правильно подстроил. Или это твой код, просто непонятна логика кода и он не полный еще, что в итоге то он делает?

Синтаксис:
Используется csharp
++i

Почему ++i а не i++? Может я чего то не знаю

Синтаксис:
Используется csharp
dirRot = ArrayDirRot[i] * dir;

Если ты направление умножаешь на поворот то результат будет поворот(Quaternion)

Синтаксис:
Используется csharp
searchPoint = pointStart + dirRot;

Поэтому непонятно как ты позицию с поворотом складываешь? Или searchPoint, pointStart это повороты?
Ну и дальше какая логика? Почему скрипт обрезан? Что он делает вобще?
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Как поворачивать в нужном порядке?

Сообщение Zimaell 03 июл 2023, 15:10

Alkos26Rus писал(а):А откуда ты взял этот код? Может ты его не правильно подстроил. Или это твой код, просто непонятна логика кода и он не полный еще, что в итоге то он делает?

Синтаксис:
Используется csharp
++i

Почему ++i а не i++? Может я чего то не знаю

Синтаксис:
Используется csharp
dirRot = ArrayDirRot[i] * dir;

Если ты направление умножаешь на поворот то результат будет поворот(Quaternion)

Синтаксис:
Используется csharp
searchPoint = pointStart + dirRot;

Поэтому непонятно как ты позицию с поворотом складываешь? Или searchPoint, pointStart это повороты?
Ну и дальше какая логика? Почему скрипт обрезан? Что он делает вобще?


1. логика скрипта - поиск кратчайшего пути, если путь недоступен то следующий кратчайший...
2. по форумам копался и наткнулся на пример поворота направления, плюс своё нахимичил. (да нерабочее, да бредово, откинул эту идею...)
3. ++i а не i++, я так всегда делаю, по этому поводу читал дискуссии - мол ++i быстрее выполняется, вот я так всегда и делаю, но это мелочи, микросекунды и т.д., просто привычка...
4. задачу в итоге решил путём закидывания в словарь направления и дистанции до цели, далее сортировка, полученный результат - нужная последовательность направлений.

в общем решено...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как поворачивать в нужном порядке?

Сообщение waruiyume 03 июл 2023, 16:05

++i и i++ не одно и то же
++i- в первой итерации i будет равен 1
i++- в первой итерации i будет равен 0
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как поворачивать в нужном порядке?

Сообщение Zimaell 03 июл 2023, 17:04

waruiyume писал(а):++i и i++ не одно и то же
++i- в первой итерации i будет равен 1
i++- в первой итерации i будет равен 0

да ну...
вот для теста
Синтаксис:
Используется csharp
private void Start(){
        for(int i = 0; i < 10; ++i){
            Debug.Log(i);
            }
        Debug.Log("----------------------");
        for(int i = 0; i < 10; i++){
            Debug.Log(i);
            }
        }

у меня выдаёт
Синтаксис:
Используется csharp
0
1
2
....
----------------------
0
1
2
....

это одно и то же, проверьте....
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как поворачивать в нужном порядке?

Сообщение Alkos26Rus 03 июл 2023, 17:14

Zimaell писал(а):
waruiyume писал(а):++i и i++ не одно и то же
++i- в первой итерации i будет равен 1
i++- в первой итерации i будет равен 0

да ну...
вот для теста
Синтаксис:
Используется csharp
private void Start(){
        for(int i = 0; i < 10; ++i){
            Debug.Log(i);
            }
        Debug.Log("----------------------");
        for(int i = 0; i < 10; i++){
            Debug.Log(i);
            }
        }

у меня выдаёт
Синтаксис:
Используется csharp
0
1
2
....
----------------------
0
1
2
....

проверьте....

Често говоря до этого не использовал ++i, но посмотрел информацию и там все объясняется. ++i выдает значение после изменения, а i++ выдает перед изменением, поэтому и медленнее т.к временная переменная создается. Поэтому и в случае когда мы берем i для ссылки на элемент(ArrayDirRot[i]), то нужно пользовать i++, иначе перебор будет не с начала. Надо конечно проверить, но сомневаюсь что будет одинаково.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Как поворачивать в нужном порядке?

Сообщение waruiyume 03 июл 2023, 17:30

С ++i таки лохонулся, я почему-то всегда думал, что последняя инструкция в for выполняется после итерации.
Результат, о котором я говорил действительно может быть, если написать так "for (int i = 0; ++i < 10;)", но обычно так не делают.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как поворачивать в нужном порядке?

Сообщение Saltant 03 июл 2023, 17:49

Zimaell писал(а):ситуация следующая - делается поиск пути, точка А ищет путь к точке В, для этого она вычисляет изначальное направление, к примеру точка А находится вверху слева а точка В находится внизу справа, соответственно получается вектор (1f, 0 -1f).
если же эта точка недоступна (перекрыта каким-то препятствием) то нужно искать другие направления, и конечно же лучше искать оптимальные, то есть в данной ситуации от нынешнего направления нужно по вернуть на 45 градусов потом -45, далее 90 и -90 и т.д.
подскажите каким образом это осуществить?
я пробовал так
Синтаксис:
Используется csharp
private Quaternion[] ArrayDirRot = new Quaternion[8]{
        Quaternion.Euler(0f, 0f, 0f),
        Quaternion.Euler(0f, 45f, 0f),
        Quaternion.Euler(0f, -45f, 0f),
        Quaternion.Euler(0f, 90f, 0f),
        Quaternion.Euler(0f, -90f, 0f),
        Quaternion.Euler(0f, 135f, 0f),
        Quaternion.Euler(0f, -135f, 0f),
        Quaternion.Euler(0f, 180f, 0f)
        };
Vector3 dir = new Vector(1f, 0 -1f);
for(int i = 0; i < ArrayDirRot.Length; ++i){
     dirRot = ArrayDirRot[i] * dir;
     searchPoint = pointStart + dirRot;

но это не работает, даже не пойму как оно "крутит"...

Привет! Я вижу, что у тебя есть проблема с определением направлений при поиске оптимального пути. Могу помочь разобраться.

В коде, который ты предоставил, используется массив кватернионов ArrayDirRot, чтобы определить восемь возможных направлений. Затем происходит итерация по этому массиву, и каждое направление поворачивается относительно начального направления dir. Однако, есть несколько проблем в твоем коде.

В строке Vector3 dir = new Vector(1f, 0 -1f); у тебя ошибка в конструкторе Vector. Он должен быть Vector3, а не Vector.

Неправильное вычисление нового направления. Вместо этого код выполняет поворот текущего направления на определенный угол. Для правильного вычисления нового направления нужно использовать единичные векторы (например, Vector3.forward, Vector3.right, Vector3.up) и поворачивать их с помощью кватернионов.

Вот исправленный код, который должен работать для поиска оптимальных направлений:
Синтаксис:
Используется csharp
Quaternion[] arrayDirRot = new Quaternion[8]
{
    Quaternion.Euler(0f, 0f, 0f),
    Quaternion.Euler(0f, 45f, 0f),
    Quaternion.Euler(0f, -45f, 0f),
    Quaternion.Euler(0f, 90f, 0f),
    Quaternion.Euler(0f, -90f, 0f),
    Quaternion.Euler(0f, 135f, 0f),
    Quaternion.Euler(0f, -135f, 0f),
    Quaternion.Euler(0f, 180f, 0f)
};

Vector3 dir = new Vector3(1f, 0f, -1f); // Изменил конструктор Vector на Vector3
Vector3[] searchPoints = new Vector3[arrayDirRot.Length];

for (int i = 0; i < arrayDirRot.Length; ++i)
{
    Vector3 rotatedDir = arrayDirRot[i] * dir;
    Vector3 searchPoint = pointStart + rotatedDir;
    searchPoints[i] = searchPoint;
}

// Дальше можно использовать полученные searchPoints для поиска пути к точке B.
 

Надеюсь, это поможет! Если у тебя возникнут еще вопросы, не стесняйся задавать.

Скрытый текст:
Если чо, это ChatGPT ответил. Используй его, если найдешь с ним общий язык, форум тебе больше не нужен
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Как поворачивать в нужном порядке?

Сообщение Zimaell 03 июл 2023, 21:12

Saltant писал(а):
Скрытый текст:
Если чо, это ChatGPT ответил. Используй его, если найдешь с ним общий язык, форум тебе больше не нужен


думаю это самый полезный совет...
нет я конечно слышал неоднократно о нём, но не думал что он и коды легко так пишет, проверил.... и да, если правильно поставить вопрос то даёт то что нужно.
всё поражаюсь до чего дошло человечество, гениально, поражает, но в то же время и пугает....
еще раз спасибо... :D
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как поворачивать в нужном порядке?

Сообщение Saltant 04 июл 2023, 02:14

Zimaell писал(а):
Saltant писал(а):
Скрытый текст:
Если чо, это ChatGPT ответил. Используй его, если найдешь с ним общий язык, форум тебе больше не нужен


думаю это самый полезный совет...
нет я конечно слышал неоднократно о нём, но не думал что он и коды легко так пишет, проверил.... и да, если правильно поставить вопрос то даёт то что нужно.
всё поражаюсь до чего дошло человечество, гениально, поражает, но в то же время и пугает....
еще раз спасибо... :D

Он хорошо пишет код если ты сам понимаешь что он тебе по итогу выдает, потому что он не может читать твои мысли а ты в тексте не всегда можешь ему четко их сформулировать. По этому приходится договариваться. В остальном, это очень крутой помощник заменяющий гугл и любые другие форумы, экономит тонну времени. Вчера я например шейдеры с ним вместе писал, все получилось, хотя я в шейдерах практически нулёвый, но бот не подвел. Сегодня например создавали с ним генерацию кода из рантайма для сборки юнити, тоже все получилось, хоть и головняк сильный был с Mono.Cecil.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Как поворачивать в нужном порядке?

Сообщение Zimaell 04 июл 2023, 08:17

Saltant писал(а):Он хорошо пишет код если ты сам понимаешь что он тебе по итогу выдает, потому что он не может читать твои мысли а ты в тексте не всегда можешь ему четко их сформулировать. По этому приходится договариваться. В остальном, это очень крутой помощник заменяющий гугл и любые другие форумы, экономит тонну времени. Вчера я например шейдеры с ним вместе писал, все получилось, хотя я в шейдерах практически нулёвый, но бот не подвел. Сегодня например создавали с ним генерацию кода из рантайма для сборки юнити, тоже все получилось, хоть и головняк сильный был с Mono.Cecil.

из того что я уже с ним потестил могу сказать следующее - он меня лучше понимает чем многие на форумах :))
какие-бы вопросы не задавал, всё отвечает с первого раза и расписывает до деталей.
Жалею только что я раньше не начал ним пользоваться, реально полезная штука, просто думал что этот чат как миджорни и дипфек, так для развекухи, хотя мид сейчас тоже уже используют профи, да и в фотошопе нейрики уже творят чудеса, в общем правильной дорогой идёт товарищи :-bd
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Как поворачивать в нужном порядке?

Сообщение Saltant 04 июл 2023, 14:52

Zimaell писал(а):...просто думал что это так для развекухи

Дада для развлекухи, так сильно развлекаются что пропали все адекватные вакансии на джуниор программистов =))
Порог входа в профессию повысился ощутимо. Те кто не сможет адаптироваться, пойдет работать на завод, за станок.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2236
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Как поворачивать в нужном порядке?

Сообщение Tolking 04 июл 2023, 18:21

Конечно это из-за нейросетей! Это не из-за 3 лет бомбежки курсами от скилфэктори и рекламы "Все в ИТ тут много денег!!!"

Вот мне интриресно, если форумы умрут, на чем нейросети учиться будут?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 21