Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 4 1 2 3 ... ПоследняяПоследняя
Показано с 1 по 10 из 31
  1. #1
    Аватар для XrenoTeHb
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.05.2021
    Сообщений
    18
    Репутация:
    0 ±

    Поворот фишки относительно стола

    Привет. Нужна помощь с небольшой задачей, а то что-то я уже запутался.

    Как правильно получить координаты полей (а точнее их смещений) относительно позиции стола где он установлен? Из особенностей только то, что стол может быть установлен в любой точке карты и повернут на любую позицию относительно координаты Z.

    Если простым языком, то мне нужно получить смещения для точек указанных оранжевым цветом относительно позиции стола (x, y, z) и чтобы они не зависели от поворота стола по оси Z.

  2. #2
    Аватар для LINKINPARK
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.01.2014
    Сообщений
    27
    Репутация:
    10 ±
    Первое что пришло в голову это:
    разместить стол в мап эдиторе на нулевых координатах с углом поворота 0. Расставить фишки на нужных местах и записать эти данные в массив.
    далее повернуть стол на один градус и выставить фишки, тем самым узнаем на какую величину нужно корректировать позиции при смещении угла поворота
    пример
    координаты фишки в массиве от нулевых координат = X 2.540, Y 1.4600, величина смещения на 1 градус X 0.331 для Y -0.166

    создаем стол на координатах X 1242.612 Y 1548.233 угол поворота Angle 13.1565 к этим данным прибавляем данные из массива с корректировкой угла поворота

    все числа естественно из головы.

    возможно даже и крутить на 1 градус не нужно, просто

    PHP код:
    2.540 из массива
    X стола 1242.612
    нужная координата X 
    1242.612 + (2.540 floatsin (угол поворота стола 13.1565degrees));

    =  1.4600 из массива
    Y стола 1548.233
    нужная координата Y 
    1548.233 + (1.4600 floatcos (угол поворота стола 13.1565degrees)); 
    Последний раз редактировалось LINKINPARK; 22.05.2021 в 14:08.

  3. #3
    Аватар для XrenoTeHb
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.05.2021
    Сообщений
    18
    Репутация:
    0 ±
    Цитата Сообщение от LINKINPARK Посмотреть сообщение
    Первое что пришло в голову это:
    разместить стол в мап эдиторе на нулевых координатах с углом поворота 0. Расставить фишки на нужных местах и записать эти данные в массив.
    далее повернуть стол на один градус и выставить фишки, тем самым узнаем на какую величину нужно корректировать позиции при смещении угла поворота
    пример
    координаты фишки в массиве от нулевых координат = X 2.540, Y 1.4600, величина смещения на 1 градус X 0.331 для Y -0.166

    создаем стол на координатах X 1242.612 Y 1548.233 угол поворота Angle 13.1565 к этим данным прибавляем данные из массива с корректировкой угла поворота

    все числа естественно из головы.

    возможно даже и крутить на 1 градус не нужно, просто

    PHP код:
    2.540 из массива
    X стола 1242.612
    нужная координата X 
    1242.612 + (2.540 floatsin (угол поворота стола 13.1565degrees));

    =  1.4600 из массива
    Y стола 1548.233
    нужная координата Y 
    1548.233 + (1.4600 floatcos (угол поворота стола 13.1565degrees)); 
    я пытался таким способом, но что-то ничего не вышло, все равно багалось, попробую еще раз, конечно

  4. #4
    Аватар для tnc
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.09.2019
    Сообщений
    121
    Репутация:
    26 ±
    Тебе нужно получить оффсеты всех ячеек на столе. Предположительно связав их. Т.е: переходы должны быть связаны между собой (индексами в массиве).

  5. #5
    Аватар для XrenoTeHb
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.05.2021
    Сообщений
    18
    Репутация:
    0 ±
    Ничего не выходит.
    Позиция 0 с поворотом 0: x: 0.06, y: 0.56;
    Позиция 0 с поворотом в 1 градус по Z: x: 0.04, y: 0.58.

    Стол находится на позиции: 0.0, 0.0, 5.0.
    При любом смещении по Z формула уже выдает не верные значения. Даже для 1 градуса.

  6. #6
    Аватар для LINKINPARK
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.01.2014
    Сообщений
    27
    Репутация:
    10 ±
    Цитата Сообщение от XrenoTeHb Посмотреть сообщение
    Ничего не выходит.
    Позиция 0 с поворотом 0: x: 0.06, y: 0.56;
    Позиция 0 с поворотом в 1 градус по Z: x: 0.04, y: 0.58.

    Стол находится на позиции: 0.0, 0.0, 5.0.
    При любом смещении по Z формула уже выдает не верные значения. Даже для 1 градуса.
    Не мало важно что:
    Примечание В GTA:SA система координат инвертирована по оси Y, из-за чего угол 90° считается западным направлением, а 270° (-90°) - восточным
    .

  7. #7
    Аватар для LINKINPARK
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.01.2014
    Сообщений
    27
    Репутация:
    10 ±
    На Вики наткнулся на AttachObjectToObject, и ничего мудрить не нужно.

  8. Пользователь сказал cпасибо:
    oukibt (22.05.2021)
  9. #8
    Аватар для XrenoTeHb
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.05.2021
    Сообщений
    18
    Репутация:
    0 ±
    Цитата Сообщение от LINKINPARK Посмотреть сообщение
    На Вики наткнулся на AttachObjectToObject, и ничего мудрить не нужно.
    Оу, а ведь реально, а я и забыл про нее, гы. Спасибо.

  10. #9
    Аватар для XrenoTeHb
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.05.2021
    Сообщений
    18
    Репутация:
    0 ±
    К сожалению оффсеты полученные для AttachObjectToObject так же зависят от угла поворота стола и при малейшем изменении угла с 0 на другой - уже фишки стоят не там где надо.

  11. #10
    Аватар для LINKINPARK
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.01.2014
    Сообщений
    27
    Репутация:
    10 ±
    Цитата Сообщение от XrenoTeHb Посмотреть сообщение
    К сожалению оффсеты полученные для AttachObjectToObject так же зависят от угла поворота стола и при малейшем изменении угла с 0 на другой - уже фишки стоят не там где надо.
    попробуй так
    PHP код:
    new 
        
    Float0.0//позиция стола X
        
    Float0.0//позиция стола Y
        
    FloatRot 0.0//угол стола
        
    FloatOffsetX 0.06
        
    FloatOffsetY 0.56
    ;
    //нужные оффсеты X Y для AttachObjectToObject
    OffsetX floatsin (Rotdegrees
    OffsetY floatsin (Rotdegrees)
    //или координаты X Y для CreateObject
    + (OffsetX floatsin (Rotdegrees)
    + (OffsetY floatsin (Rotdegrees

    в AttachObjectToObject параметр SyncRotation = 1?
    Правильное описание проделанной работы.
      Открыть/закрыть
    Доброго времени суток! Вот что было проделано:
    01. Система красивого интро при коннекте на сервер
    02. Система регистрации аккаунта
    03. Система автошколы
    04. Система личных сообщений
    05. Система бизнесов
    06. Система складов
    07. Система магазин 24/7
    08. Система домов
    09. Система админки 10уровней
    10. Система PayDay
    11. Система сообщений
    12. Система гонок
    13. Система фракций
    14. Система Складов
    15. Система телефона
    16. Система рюкзака
    17. Система пау
    18. Система пиу
    19. Система бах-бах
    20. Система бдыщ

 

 
Страница 1 из 4 1 2 3 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •