-
Постов
10 396 -
Зарегистрирован
-
Посещение
-
Победитель дней
417
Тип контента
Профили
Форумы
Баг Трекер
Предложения
Список изменений
Загрузки
Блоги
Магазин
Галерея
Запись Комментарии, опубликованные Electr0
-
-
Return Value
Dot product of the two vectors.
но зачем мне один float, когда координата состоит из 3 float'ов
-
скорее всего GetVectorAngles возращает не то что мы думаем
-
Calculates the dot product of two vectors это не дает позицию из трех точек в пространстве
-
-
3 часа назад, KOllapsE сказал:
Я вот что подумал: а зачем вообще узнавать, где этот конец вектора АС? Мб можно по вектору АС на расстояние 181,984718 сразу перемещать второй объект? Если нельзя так, то ещё вариант:
Есть вектор АВ - от первого объекта ко второму. Копируем его и оставляем как был (два вектора в одном, так сказать). Далее получаем вектор АС изменением углов одного вектора АВ на сколько нужно. Есть два вектора - АВ от первого объекта ко второму и АС - от первого объекта к точке, где должен оказаться второй. Вычитаем из АС вектор АВ функцией "Subtracts a vector from another vector". ВС = АС - АВ. После этого используем функцию "Calculates the dot product of two vectors" для векторов АС и ВС - получаем ту самую точку С, куда надо переместить второй объект!!!
а как создать вектор АС если я не знаю точку эту
-
завтра попробую иначе
-
пробовал, но там искажение какое-то появляется, в общем длинна конца другая совсем, и сам угол не правильный.
-
4 минуты назад, KOllapsE сказал:
Есть же выравнивание в стройке и оно работает (по X, Y, или Z)
там не то ><, там просто присваивает указанную ось от объекта по которому выравниваем, а в нашем случае надо как-то узнать позицию конца вектора под углом 90 град, понятия не имею как ее узнать
-
6 минут назад, KOllapsE сказал:42 минуты назад, KOllapsE сказал:
fTempVecAng:: 0.074962 253.020523 90.00000
После этого надо переместить вектор с длиной 181,9847189 и градусами 0.074962 253.020523 90.00000 так, чтобы он исходил из точки А. Его конец и будет точкой, куда надо переместить второй объект, чтобы второй объект повернулся относительно первого на 90 градусов
если бы я еще знал как это правильно сделать
-
Цитата
КОРЕНЬ(53,144775^2+174,051757^2+0,238098^2)=181,9847189
это что ? типа длинна вектора?, а это не равно дистанции между объектом А и объектом Б?
-
давай проще, вот смотри я имею угол вектора между точками А и Б, так, я должен прибавить к ним угол на который будем поворачивать, допустим 90 градусов, окей из fTempVecAng:: 0.074962 253.020523 0.000000 стало fTempVecAng:: 0.074962 343.020523 0.000000, дальше я не понял..
-
до сих пор не вижу объяснение что за чем там считается
-
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
-
//--------------------------------------------------------- // 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; }Накопал в архивах, вот это функция получения позиции перед игроком учитывая его взгляд. По идее это как-то можно эксплуатировать, завтра попробую
-
ну, вот я создал вектор из точки А (первый предмет в цикле помеченных ) до точки Б (следующий после первого)
Получилось вот что:
Объект А:
[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Дальше нужно как-то повернуть вектор на нужные нам углы, и узнать конечную точку повернутого вектора, это и есть будущая позиция после поворота
-
-
-
Ладно берем стек помеченных предметов, беру первый помещенный в качестве отправной точки.
Я знаю как сделать вектор между позициями центров предметов, а дальше не знаю, как я понял я должен каким-то образом повернуть этот вектор на величину равную углу на который будем поворачивать, дальше узнать положение крайней точки вектора в пространстве. Насчет rotate yaw, тоже есть вопрос ведь те объекты которые близко к точке поворота их нужно больше поворачивать чём те что дальше (не факт но что-то такое возможно есть) и это все для каждого предмета по отдельности. Каждый раз относительно первого предмета.
-
Блин сложно
, учитывая что объектов сотни, и их нужно вокруг чего-то поворачивать
-
-
Это не говорит мне на каком принципе это можно сделать), без разницы сложно это или нет, мне просто нужен способ хотя-бы из математики чтоб понять как сохранить относительную позицию и углы друг от друга но при этом повернуть эту группу в пространстве
-
4 часа назад, KOllapsE сказал:
У меня есть идея, как это реализовать, и я могу графически пошагово это показать, чтобы было удобнее понимать и работать. Но она основана на том же принципе "нулевых" точек, что я описывал в теме про модификацию "Захватить/Отпустить" для быстрого и ровного соединения объектов типа параллелепипеда:
Если идея про "нулевые" точки не бред в плане осуществления и не будет шибко грузить сервер, то, используя их, можно производить массовые повороты с сохранением положения осей объектов друг относительно друга. Получится, что предложение от 3LoU_BaNaN про удобное перемещение убежищ будет осуществлено, только работать будет через функцию пометки, для которой не надо будет по 30 раз в секунду пересчитывать всё. Менее удобно, конечно, но всё же.
Честно говоря не уверен что такой метод будет реализован, проблема в том что, я пока не вижу как это будет работать, пока что это слишком сложно и замудренно, игроки даже групповые действия не освоили
-
Это один из методов того как строить вроде, а мы говорим о том как сохранить целостность при массовых поворотах
-
3 минуты назад, KOllapsE сказал:
Ну да, перемещать большие группы объектов из конкретного слота или после пометки можно включив в настройках первый пункт, тут Electr0 прав. Там неудобство только в невозможности поворота всех объектов вокруг одной точки, они каждый вокруг своей оси вращаются. А так все три причины решаются пометкой и переносом, просто менее удобно и более долго, но на то есть технические причины (даже если был бы осуществлён правильный поворот, это ещё сильнее бы увеличило нагрузку).
я пытался реализовать но не получается, объекты разлетаются друг от друга, хз если кто бы предоставил формулу


Поворот группы предметов по вертикали как одного
в °• Mega Survival
Опубликовано
Вектор не равен позиции на координатной плоскости