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

Рекомендуемые сообщения

1 минуту назад, mumut сказал:

 

  Скрыть контент


	float Get3dDistance(float myCoordsX, float myCoordsY, float myCoordsZ, 
                        float enCoordsX, float enCoordsY, float enCoordsZ)
	{
		return sqrt(pow(double(enCoordsX - myCoordsX), 2.0) +
					pow(double(enCoordsY - myCoordsY), 2.0) +
					pow(double(enCoordsZ - myCoordsZ), 2.0));
	}

 

 

Длина вектора в трёхмерном пространстве. Две точки и у каждой по 3 координаты, ну тут в коде всё уже написано :D
Ну, а  Pow это возведение в степень , в данном случае в квадрат

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Senpai сказал:

Не думаю, что будет что-то подходящее. Тут лучше самому подумать. Вот 32750 это π . тогда 32750/π мы получаем какое-то число . если на него поделить число из игры, то получим значение в радианах

Если 32750 это число пи тогда зачем 32750 делить на 32750 ?

Ссылка на комментарий
Поделиться на другие сайты

37 минут назад, mumut сказал:

Если 32750 это число пи тогда зачем 32750 делить на 32750 ?

Возьмём число из игры. Обозначим его "K".

 

K/π=F=32750/3,14=10424,6 это константа будет.

F это хз, как обозначить, но по логике должно быть так.(это отношение половины круга в игровых значениях к половине круга в радианах.)

Если прочитать из игры какое-то значение и разделить на F, то ты получишь угол в радианах.

S -угол в радианах

K/F=S

А если взять угол в радианах и умножить на F ,то получишь игровые значения

S*F=K

 

Изменено пользователем Senpai
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

В 24.03.2019 в 17:57, mumut сказал:

"от -32750 до +32750" а по Y "от -16385 до +16385"

Вопрос эти значения игровые?

Или ты их получаешь из своего кода? 

Ссылка на комментарий
Поделиться на другие сайты

20 часов назад, Senpai сказал:

Возьмём число из игры

Можешь помочь решить мою проблему. Она состоит в том что камера не поворачивается по Y. По твоей формуле я сделал чучуть поменял функцию вот так:

Спойлер

void CalcAngle_Test(float *myCoords, float * enCoords, float *angles)
{
	float delta[3] = { (myCoords[0] - enCoords[0]), (myCoords[1] - enCoords[1]), (myCoords[2] - enCoords[2]) };
	float hyp = sqrt(delta[0] * delta[0] + delta[1] * delta[1]);
	angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14"
	angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14"

	if (delta[0] >= 0.0)
	{
		angles[1] += 32760.0f;
	}
}

 

 

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, mumut сказал:

мою проблему.

Сам пишешь:

 

В 25.03.2019 в 05:38, mumut сказал:

Поворот камеры в игре типа 4 байт.Поэтому такие значения. Так сделал разработчик.

При этом рассчитываешь во float

    angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14"
    angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14"

тебе нужно сначала рассчитать углы в радианах и только потом умножать на коэффициенты для перевода в игровые (4-байтные) значения.

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Garik66 сказал:

тебе нужно сначала рассчитать углы в радианах

Так я не могу понять как найти и рассчитать этот самый угол на который надо повернуть камеру.

5 минут назад, Garik66 сказал:

При этом рассчитываешь во float

Да но потом я перевожу в 4 байта. Если бы я не переводил то скорее всего у меня прицел поворачивал в какую то не понятную сторону а у меня не поворачивает только по Y координате

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, mumut сказал:

Так я не могу понять как найти и рассчитать этот самый угол

Нарисуй 

Спойлер

image.thumb.png.798982b05657666a695f5bee02f24665.png

и вспомни (загугли) тригонометрию.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, mumut сказал:

angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14"
angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14"

везде должно быть 10427.8f

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, Senpai сказал:

везде должно быть 10427.8f

А почему, просто же диапазон Y равен от -16385 до +16385. Да даже когда я ставил 10427.8f ничего не изменялось вообще.

Изменено пользователем mumut
Ссылка на комментарий
Поделиться на другие сайты

16 минут назад, mumut сказал:

А почему, просто же диапазон Y равен от -16385 до +16385. 

Т.к. единица измерения та же.
А значения записываешь, как 4 байта ?(читать тоже надо, как 4 байта)

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, mumut сказал:

Что читать ? координаты в типе float а поворот в типе 4 байта.

Я про углы говорю. Читаешь 4 байта, переводишь в float, делаешь вычисления ,а потом переводишь обратно и записываешь 4 байта.

Ну ты понял ;D

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, Senpai сказал:

Я про углы говорю. Читаешь 4 байта

Самое интересное что в проекте нет строчки прочтения поворота камеры.

Ну ты понял ;D

Ссылка на комментарий
Поделиться на другие сайты

26 минут назад, Senpai сказал:

Читаешь 4 байта, переводишь в float, делаешь вычисления ,а потом переводишь обратно и записываешь 4 байта.

angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14"
angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14"

То есть в angles[0] и angles[1] значение которое надо добавить в текущему повороту а не записать в поворот камеры или нет ?

Ссылка на комментарий
Поделиться на другие сайты

 

2 часа назад, mumut сказал:

angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14"
angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14"

То есть в angles[0] и angles[1] значение которое надо добавить в текущему повороту а не записать в поворот камеры или нет ?

Спойлер

f2jrqyugathrdarh.jpg 

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, Senpai сказал:

 

12 часов назад, mumut сказал:

angles[0] = (float)(asinf(delta[2] / hyp) * 5215.5f); // как я понял это значение записывается в Y поворот "16385/3.14"
angles[1] = (float)(atanf(delta[1] / delta[0]) * 10427.8f); // а это значение записывается в X поворот "32750/3.14"

То есть в angles[0] и angles[1] значение которое надо добавить в текущему повороту а не записать в поворот камеры или нет ?

  Показать контент

f2jrqyugathrdarh.jpg 

 

 

 

Прости что спросил просто я уже поплыл с этим аимботом.

Ссылка на комментарий
Поделиться на другие сайты

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

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.