HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 06.07.2019, 12:00
Stiopko
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами: 4319022

Репутация: 113
По умолчанию

Цитата:
Сообщение от ALF  

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

object one[x y z]
object two[x y z]
как мне высчитать ротацию по всем трём координатам?
Ну по x и y вот, но это походу не то

C++:





Код:
// pos позиция обекта к которому нужно повернутся
// posTo сам обект
float
angle
=
atan2
(
(
pos
[
0
]
-
posTo
[
0
]
)
,
(
posTo
[
1
]
-
pos
[
1
]
)
)
+
M_PI
;
 
Ответить с цитированием

  #2  
Старый 06.07.2019, 12:48
ALF
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами: 4472205

Репутация: 163
По умолчанию

Цитата:
Сообщение от Stiopko  

Ну по x и y вот, но это походу не то

C++:





Код:
// pos позиция обекта к которому нужно повернутся
// posTo сам обект
float
angle
=
atan2
(
(
pos
[
0
]
-
posTo
[
0
]
)
,
(
posTo
[
1
]
-
pos
[
1
]
)
)
+
M_PI
;

это не то
 
Ответить с цитированием

  #3  
Старый 06.07.2019, 13:12
ALF
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами: 4472205

Репутация: 163
По умолчанию

это всё не то.

объясняю понятней, вот функция которая создаёт объект, ротация там меняется по трём переменным(вектор, x, y, z)

C++:





Код:
BOOL
Create
(
WORD nId
,
int
nModel
,
CVector position
,
CVector rotation
,
float
fDrawDistance
)
{
return
(
(
BOOL
(
__thiscall
*
)
(
stObjectPool
*
,
WORD
,
int
,
CVector
,
CVector
,
float
)
)
(
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0xF470
)
)
(
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
,
nId
,
nModel
,
position
,
rotation
,
fDrawDistance
)
;
}


у меня есть координаты моего созданного объекта и координаты того вокруг чего он должен вращаться.

вопрос, как мне из этих двух координат высчитать ротация и повернуть объект в сторону моих координат?
 
Ответить с цитированием

  #4  
Старый 06.07.2019, 13:37
Stiopko
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами: 4319022

Репутация: 113
По умолчанию

Цитата:
Сообщение от ALF  

это всё не то.

объясняю понятней, вот функция которая создаёт объект, ротация там меняется по трём переменным(вектор, x, y, z)

C++:





Код:
BOOL
Create
(
WORD nId
,
int
nModel
,
CVector position
,
CVector rotation
,
float
fDrawDistance
)
{
return
(
(
BOOL
(
__thiscall
*
)
(
stObjectPool
*
,
WORD
,
int
,
CVector
,
CVector
,
float
)
)
(
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0xF470
)
)
(
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
,
nId
,
nModel
,
position
,
rotation
,
fDrawDistance
)
;
}


у меня есть координаты моего созданного объекта и координаты того вокруг чего он должен вращаться.
вопрос, как мне из этих двух координат высчитать ротация и повернуть объект в сторону моих координат?
Смотри тебе нужно вот это Кватеринион, но я это еще в школе не проходил поэтому хз
 
Ответить с цитированием

  #5  
Старый 06.07.2019, 14:32
Roger571
Познающий
Регистрация: 22.07.2015
Сообщений: 58
С нами: 5689694

Репутация: 68
По умолчанию

Цитата:
Сообщение от ALF  

это всё не то.
Не особо понимаю с похмелья что тебе требуется в итоге, но попробуй

Вычисляешь угол между объектами с помощью atan2 и переводишь в кватернион.

Цитата:
Сообщение от Спойлер  


C++:





Код:
void
QuaternionFromAngle
(
float
*
fQuaternion
,
float
fAngle
)
{
fAngle
=
DEGTORAD
(
fAngle
)
;
float
fMatrix
[
3
]
[
3
]
,
c
=
cos
(
fAngle
)
,
s
=
sin
(
fAngle
)
;
// QuaternionRotateZ
fMatrix
[
0
]
[
0
]
=
c
;
fMatrix
[
0
]
[
1
]
=
s
;
fMatrix
[
0
]
[
2
]
=
0.0
;
fMatrix
[
1
]
[
0
]
=
-
s
;
fMatrix
[
1
]
[
1
]
=
c
;
fMatrix
[
1
]
[
2
]
=
0.0
;
fMatrix
[
2
]
[
0
]
=
0.0
;
fMatrix
[
2
]
[
1
]
=
0.0
;
fMatrix
[
2
]
[
2
]
=
1.0
;
// GetQuaternionFromMatrix
fQuaternion
[
0
]
=
sqrt
(
Max
(
(
float
)
0
,
1.0f
+
fMatrix
[
0
]
[
0
]
+
fMatrix
[
1
]
[
1
]
+
fMatrix
[
2
]
[
2
]
)
)
*
0.5f
;
fQuaternion
[
1
]
=
sqrt
(
Max
(
(
float
)
0
,
1.0f
+
fMatrix
[
0
]
[
0
]
-
fMatrix
[
1
]
[
1
]
-
fMatrix
[
2
]
[
2
]
)
)
*
0.5f
;
fQuaternion
[
2
]
=
sqrt
(
Max
(
(
float
)
0
,
1.0f
-
fMatrix
[
0
]
[
0
]
+
fMatrix
[
1
]
[
1
]
-
fMatrix
[
2
]
[
2
]
)
)
*
0.5f
;
fQuaternion
[
3
]
=
sqrt
(
Max
(
(
float
)
0
,
1.0f
-
fMatrix
[
0
]
[
0
]
-
fMatrix
[
1
]
[
1
]
+
fMatrix
[
2
]
[
2
]
)
)
*
0.5f
;
fQuaternion
[
1
]
=
static_cast

(
_copysign
(
fQuaternion
[
1
]
,
fMatrix
[
2
]
[
1
]
-
fMatrix
[
1
]
[
2
]
)
)
;
fQuaternion
[
2
]
=
static_cast

(
_copysign
(
fQuaternion
[
2
]
,
fMatrix
[
0
]
[
2
]
-
fMatrix
[
2
]
[
0
]
)
)
;
fQuaternion
[
3
]
=
static_cast

(
_copysign
(
fQuaternion
[
3
]
,
fMatrix
[
1
]
[
0
]
-
fMatrix
[
0
]
[
1
]
)
)
;
}


Пробуй, вроде должно работать
 
Ответить с цитированием

  #6  
Старый 06.07.2019, 14:05
Akionka
Постоянный
Регистрация: 02.02.2018
Сообщений: 740
С нами: 4355743

Репутация: 163


По умолчанию

Подскажите, если кто-нибудь знает, как работает это? Какие адреса чистит, где их можно узнать итд.
 
Ответить с цитированием

  #7  
Старый 06.07.2019, 19:12
astap_
Постоянный
Регистрация: 05.03.2014
Сообщений: 626
С нами: 6415078

Репутация: 163


По умолчанию

Цитата:
Сообщение от Akionka  

Подскажите, если кто-нибудь знает, как работает это? Какие адреса чистит, где их можно узнать итд.
обычный игнор входящего RPC_SCRREMOVEBUILDINGFORPLAYER
 
Ответить с цитированием

  #8  
Старый 06.07.2019, 16:42
ishi
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами: 6483143

Репутация: 93
По умолчанию

Есть функция для поиска последовательности строчных символов:







C++:





[CODE]
int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
new
char
[
strlen
(
what
)
+
1
]
;
yo
=
(
char
*
)
temp
;
char
*
tempptr
=
static_cast

(
where_
)
;
while
(
iterator



Она копирует из области поиска по n байт длиною равной длине искомого, добавляет на конец 0 и сравнивает. И так, пока не кончится буфер.

Однако, я её раз 10 наверное прогнал по циклу вызвов с одинаковыми параметрами, и примерно 33-39 из 100 вызовов она возвращает ошибку(-1). Лично я тут не вижу ошибки в логике, но результат говорит об обратном.

Помогите понять, где косяк, плиз.
 
Ответить с цитированием

  #9  
Старый 06.07.2019, 17:19
rraggerr
Познавший АНТИЧАТ
Регистрация: 16.03.2017
Сообщений: 1,626
С нами: 4821087

Репутация: 133


По умолчанию

[QUOTE="ishi"]

Есть функция для поиска последовательности строчных символов:







C++:





[CODE]
int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
new
char
[
strlen
(
what
)
+
1
]
;
yo
=
(
char
*
)
temp
;
char
*
tempptr
=
static_cast

(
where_
)
;
while
(
iterator
 
Ответить с цитированием

  #10  
Старый 06.07.2019, 19:47
ishi
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами: 6483143

Репутация: 93
По умолчанию

Цитата:
Сообщение от B3JlOM_}I{OTTbI  

это проверка на то что "слово" есть в строчке "какое то слово" ?
Не совсем. Это для поиска в буфере, содержимое которого может не соответствовать строчному типу: на конце может не быть нуля, а сами символы могут не соответствовать кодировке искомого. Короче говоря: поиск в бинарном файле.

Цитата:
Сообщение от cakebou  

чем strstr не устраивает?
Не хочет искать дальше первого \0
 
Ответить с цитированием
Ответ





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


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.