본문 바로가기
회사 TIL

[Unreal] CPR- HeadPosition 구할 때 계산 방법에 대한 고찰(UpVector vs ForwardVector)

by imagineer_jinny 2024. 6. 12.

이슈:

1. CPR 할 때 가슴 압박 지점과 머리가 일직선이 되야 함

2. 이를 구하기 위해  Layperson에 있는 HeadAngleSpot과 머리(Camera) 사이의 각도를 구함

 

 

3. 내가 처음 구현한 방법은 누워있는 사람의 가슴에 붙어있는 파랑색 스팟의 upVector와 머리(Camera)의 위치를 받아와서 두 벡터를 내적 → ACOS → R2D 하는 방식으로 구현하고 있음

 

 

계산 과정을 살펴보자

 

* 내적 공식

 

 

여기서 두 벡터는 단위벡터이고, 그럼 cos만 남는다! 

cos(세타) 값의 범위는 -1에서 1 사이이고, 내가 알고 싶은 것은 각도!

 

따라서 acos를 해준다.

 

여기서 주의할 것!

acos의 범위는 0<= <=180

이 프로젝트에서는 고려할 필요 없음

 

다시 본론으로 돌아와서,

4. 나는 가슴 패치의 up vector를 썼었고 이 벡터로 내적했을 때 나오는 범위는 다음과 같다

기준이 되는 벡터(이 표현이 맞는지는 모르겠음)가 upvector이고 이걸 가지고 움직이는 head 벡터는 위의 그림과 같은 사이각을 내놓는다. 

근데 우리가 하고 싶은 건 머리 각도 표현이 예를 들어 85도에서 95도를 판단하고 싶은데, 저런식으로 하면 좀 직관적이지가 않다.

 

이런 방식이 보기 좋다는 것! 그래서 upVector 말고 forward 혹은 상황에 따라 rightVector를 기준으로 써주는 것이 더 직관적이다.

 

 

내가 놓친 것:

처음엔 90도에서 얼마나 벗어났는지를 판단해야 해서 upVector로 구했는데, 기획이 조금 바뀌었고, 이때 그럼 85-95도 사이 계산해야 한다고 했을 때 바로 upVector 말고 다른 걸 기준으로 해야한다는 것을 생각하지 못했다. 

예전에도 외적, 내적 가지고 나름 깊게 들어갔지만, 이해된 영역은 아닌듯하다. 찾아보면 그때서야 '아 이렇게 했었지~'정도?외워서 기억하고 싶진 않고 나도 이해를 하고 싶은데 먼저 외워버린 느낌이다.앞으로 비슷한 문제가 나올 때 그림 그려보고 생각해보면 되지 않을까?

거기에 정말 수학 문제를 좀 풀어야 할듯!

 

댓글