Перейти к содержанию

Electr0

Администраторы
  • Постов

    10 396
  • Зарегистрирован

  • Посещение

  • Победитель дней

    417

Запись Комментарии, опубликованные Electr0

  1. 3 часа назад, KOllapsE сказал:

    Я вот что подумал: а зачем вообще узнавать, где этот конец вектора АС? Мб можно по вектору АС на расстояние 181,984718 сразу перемещать второй объект? Если нельзя так, то ещё вариант:

     

    Есть вектор АВ - от первого объекта ко второму. Копируем его и оставляем как был (два вектора в одном, так сказать). Далее получаем вектор АС изменением углов одного вектора АВ на сколько нужно. Есть два вектора - АВ от первого объекта ко второму и АС - от первого объекта к точке, где должен оказаться второй. Вычитаем из АС вектор АВ функцией "Subtracts a vector from another vector". ВС = АС - АВ. После этого используем функцию "Calculates the dot product of two vectors" для векторов АС и ВС - получаем ту самую точку С, куда надо переместить второй объект!!!

     

    Снимок2.JPG

    а как создать вектор АС если я не знаю точку эту

  2. 4 минуты назад, KOllapsE сказал:

    Есть же выравнивание в стройке и оно работает (по X, Y, или Z)

    там не то ><, там просто присваивает указанную ось от объекта по которому выравниваем, а в нашем случае надо как-то узнать позицию конца вектора под углом 90 град, понятия не имею как ее узнать

  3. 6 минут назад, KOllapsE сказал:
    42 минуты назад, KOllapsE сказал:

    fTempVecAng:: 0.074962 253.020523 90.00000

    После этого надо переместить вектор с длиной 181,9847189 и градусами 0.074962 253.020523 90.00000 так, чтобы он исходил из точки А. Его конец и будет точкой, куда надо переместить второй объект, чтобы второй объект повернулся относительно первого на 90 градусов

    если бы я еще знал как это правильно сделать

  4. давай проще, вот смотри я имею угол вектора между точками А и Б, так, я должен прибавить к ним угол на который будем поворачивать, допустим 90 градусов, окей из fTempVecAng:: 0.074962 253.020523 0.000000 стало fTempVecAng:: 0.074962 343.020523 0.000000, дальше я не понял..

  5. 8 минут назад, KOllapsE сказал:

    Создать повёрнутый вектор, например, fTempVecAng:: 0.074962 253.020523 90.000000 у которого будет длина такая же как у этого fTempVec:: -53.144775 -174.051757 -0.23809.

    КОРЕНЬ(53,144775^2+174,051757^2+0,238098^2)=181,9847189

    Если всё ок, то так и можно поворачивать

    P.S. и поместить этот вектор ту да же, откуда первый был [FS] Позиция: 2696.005126 4924.954589 -976.147644

    эм поясни что за чем D

  6. //---------------------------------------------------------
    // get position just in front of you
    // and the angles you are facing in horizontal
    //---------------------------------------------------------
    GetClientFrontLocationData( client, Float:position[3], Float:angles[3], Float:distance = 50.0 )
    {
    	new player = GetPlayerIndex( client );
    
    	decl Float:_origin[3], Float:_angles[3];
    	GetClientAbsOrigin( player, _origin );
    	GetClientEyeAngles( player, _angles );
    
    	decl Float:direction[3];
    	GetAngleVectors( _angles, direction, NULL_VECTOR, NULL_VECTOR );
    	
    	position[0] = _origin[0] + direction[0] * distance;
    	position[1] = _origin[1] + direction[1] * distance;
    	position[2] = _origin[2];
    	
    	angles[0] = 0.0;
    	angles[1] = _angles[1];
    	angles[2] = 0.0;
    }

    Накопал в архивах, вот это функция получения позиции перед игроком учитывая его взгляд. По идее это как-то можно эксплуатировать, завтра попробую

  7. ну, вот я создал вектор из точки А (первый предмет в цикле помеченных ) до точки Б (следующий после первого)

    Получилось вот что:

    Объект А:
    [FS] Углы: 360.842529 270.000000 0.000000
    [FS] Позиция: 2696.005126 4924.954589 -976.147644

    Объект Б:
    [FS] Углы: 360.716156 0.000000 0.000000
    [FS] Позиция: 2642.860351 4750.902832 -976.385742
    Вектор между точками А и б  (функция MakeVectorFromPoints. там просто вычитание позиции А из Б):
    fTempVec:: -53.144775 -174.051757 -0.238098

    Угол из вектора между этими точками ( функция GetVectorAngles):
    fTempVecAng:: 0.074962 253.020523 0.000000

     

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

  8. Ладно берем стек помеченных предметов, беру первый помещенный в качестве отправной точки. 

     

    Я знаю как сделать вектор между позициями центров предметов, а дальше не знаю, как я понял я должен каким-то образом повернуть этот вектор на величину равную углу на который будем поворачивать, дальше узнать положение крайней точки вектора в пространстве. Насчет rotate yaw, тоже есть вопрос ведь те объекты которые близко к точке поворота их нужно больше поворачивать чём те что дальше (не факт но что-то такое возможно есть) и это все для каждого предмета по отдельности. Каждый раз относительно первого предмета. 

  9. Это не говорит мне на каком принципе это можно сделать), без разницы сложно это или нет, мне просто нужен способ хотя-бы из математики чтоб понять как сохранить относительную позицию и углы друг от друга но при этом повернуть эту группу в пространстве

  10. 4 часа назад, KOllapsE сказал:

    У меня есть идея, как это реализовать, и я могу графически пошагово это показать, чтобы было удобнее понимать и работать. Но она основана на том же принципе "нулевых" точек, что я описывал в теме про модификацию "Захватить/Отпустить" для быстрого и ровного соединения объектов типа параллелепипеда:

     

                    Если идея про "нулевые" точки не бред в плане осуществления и не будет шибко грузить сервер, то, используя их, можно производить массовые повороты с сохранением положения осей объектов друг относительно друга. Получится, что предложение от 3LoU_BaNaN про удобное перемещение убежищ будет осуществлено, только работать будет через функцию пометки, для которой не надо будет по 30 раз в секунду пересчитывать всё. Менее удобно, конечно, но всё же.
     

    Честно говоря не уверен что такой метод будет реализован, проблема в том что, я пока не вижу как это будет работать, пока что это слишком сложно и замудренно, игроки даже групповые действия не освоили 

  11. 3 минуты назад, KOllapsE сказал:

    Ну да, перемещать большие группы объектов из конкретного слота или после пометки можно включив в настройках первый пункт, тут Electr0 прав. Там неудобство только в невозможности поворота всех объектов вокруг одной точки, они каждый вокруг своей оси вращаются. А так все три причины решаются пометкой и переносом, просто менее удобно и более долго, но на то есть технические причины (даже если был бы осуществлён правильный поворот, это ещё сильнее бы увеличило нагрузку).

    я пытался реализовать но не получается, объекты разлетаются друг от друга, хз если кто бы предоставил формулу

×
×
  • Создать...