ํ๋ง๋๋ก ๋งํ๋ฉดย
์ด๋ฏธ 3D ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ฐ ์ถ๊ฐ์ ์ผ๋กย ๋ฒกํฐ2๋ฅผ ์ฐ๊ธฐ ์ํดย ๊ฐ์ ๋์์ ํ๋ ๊ธฐ๋ฅ๋ค์ ์ถ๊ฐ๋กย ์ค๋ฒ๋ก๋ฉ ํด์ผํด์ ๊ทธ๋ฐ๊ฑฐ๋ค.
๊ทธ๋ฌ๋ฉด ๋งคย ์ ๋ฐ์ดํธ๋ ํฝ์ค ๋์ค์ ๋๋ฝ๋๋๊ฒ๋ ์๊ธธ๊ฑฐ๊ณ , ๊ทธ๋ก ์ธํด ๋ฒ๊ทธ๋ ์์ฐ๋ ํ ๋ฐย
๊ทธ๋ฐ ๋ฆฌ์คํฌ๋ฅผ ๊ฐ์ํ์ง ์๊ธฐ ์ํด ๊ทธ๋ฅ ๋ฒกํฐ3์ ์ฐ๋๊ฒ์ด๋ผ ๋ณด๋ฉด ๋๋ค.
๊ทธ๋ ๋ค๊ณ ๋ฒกํฐ2๋ฅผ ์ธ ์ด์ ๊ฐ ์๋๊ฑด ์๋๋ค.ย
๊ทธ๋ฅ ์์ ํ 3D๊ฐย ๋ฐฐ์ ๋ย 2D์ฉ์ผ๋ก ๊ฐ๋ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฉด ๋ฒกํฐ3 ๋์ ๋ฒกํฐ2๋ก๋ ์ธ์ ๊ฐ์ ์ฐ์ฐ์ ์ถฉ๋ถํ ํ ์ ์๋ค.
๋จผ์ 2D๋ 3DOF์ธ๋ฐ,ย ๋ฌผ๋ฆฌ์ ์ผ๋ก ์์ง์ผ๋ ๊ณต๊ฐ์์์ ์์น์ ๋ํด 2๊ฐ์ ์์ ๋, ํ์ ์ ๋ํด 1๊ฐ์ ์์ ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๋ป์ด๋ค.
๊ทธ๋์ ๊ทธ๋ฐ ํ์ ๊ณผ ๊ด๋ จ๋ ์ฐ์ฐ์ ํ ๋ ์ฌ์ฉํ๋๊ฒ ์ธ์ ์ด๋ค.ย
๊ทผ๋ฐ ์ธ์ ์ ์ ์๋๋ก๋ผ๋ฉด ๋ฒกํฐ3 ์ด์์ ๋ณด์ฅ์ด ๋์ผ ํ๋๋ฐย ๋ฒกํฐ2๋ก ์ด๋ป๊ฒ ํ๋? ์ด๋ฐ ์๋ฌธ์ด ๋ค์์๋ค.ย
๊ทธ๋ฐ๋ฐ, ๊ทธ๋ฅ 3DOFย ์ ์๋ฅผ ์๊ณ ์๋ค๋ฉด 2D์์ ์์น์ ๋ํด (X, Y) ํ์ ์ ๋ํด (Z)๋ผ๋ ์์ ๋๋ฅผ ๊ฐ์ง๊ฒ์ด๊ณ
์ด๊ฑธ ๊ทธ๋ฅ ๋ฒกํฐ 3๋ก ํ์ฅํ๋ฉด (X, Y, 0), (0, 0, Z)๋ผ๋๊ฒ๋ ๊ธ๋ฐฉ ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค.
์ ์ญํ ๊ฐ์ ๊ณผ๋ชฉ์ ์๊ฐํ๋ค๋ฉด ๊ฑฐ๊ธฐ์ ๋ฐฐ์ฐ๋ ๊ด์ฑ ๋ชจ๋ฉํธ ๊ณ์ฐ๋ ๋น์ทํ ๋๋์ผ๋ก ์ ๊ทผํ๋๊ฑธ ์๊ฒ์ด๋ค.ย
๊ทธ๋์ ๋ฑ ์ ๋ฒกํฐ2(X, Y)์ ๋ฒกํฐ1 (Z)๋ง ๊ฐ์ง๊ณ ์ฐ์ฐํ๋ฉด 2D์์๋ ์ถฉ๋ถํ ๊ด๋ จ ์ฐ์ฐ์ ํ ์ ์๋ค.
์ผ๋จ ์ด๊ฒ ๋ฒกํฐ 3์ ์ธ์ ๊ณ์ฐ ์์ด๋ค.
2D ๋ฒกํฐ๋ฉด ์ฌ๊ธฐ์ Z๊ฐ์ด 0์ธ ๋ฒกํฐ3,ย
1D ๋ฒกํฐ๋ฉด ์ฌ๊ธฐ์ Z๊ฐ๋ง ์๋ ๋ฒกํฐ3๋ก ๊ฐ์ ํ๊ณ ย ๊ณ์ฐํ๋๊ฒ ๊ทธ ๋ฐฉ๋ฒ์ด๋ค.
ย ย Real CrossProduct(const Vector2& vec1, const Vector2& vec2)
ย ย {
ย ย ย ย return (vec1.x * vec2.y - vec1.y * vec2.x);
ย ย }
ย ย Vector2 CrossProduct(Real vec1, const Vector2& vec2)
ย ย {
ย ย ย ย return Vector2(-vec1 * vec2.y, vec1 * vec2.x);
ย ย }
ย ย Vector2 CrossProduct(const Vector2& vec1, Real vec2)
ย ย {
ย ย ย ย return Vector2(vec2 * vec1.y, -vec2 * vec1.x);
ย ย }
์ด๋ ๊ฒย ๋ฒกํฐ 3์ย ์ ํจ ํญ๋ง ๊ณ์ฐํ๋ ์์ผ๋ก ์ถฉ๋ถํ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฅ ์ ๊ณ์ฐ์์ a1, a2, a3์ b1, b2, b3์ย
(a1, a2, 0) X (b1, b2, 0)
(0, 0, a3) X (b1, b2, 0)
(a1, a2, 0) X (0, 0, b3)
์ด๋ ๊ฒ ๋ฃ๊ณ ๊ณ์ฐํด ๋ด๋ผย
(0, 0, a1b2-a2b1)
(-a3b2, a3b1, 0)
(a2b3, -a1b3, 0)
๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ๋์ฌ๊ฑฐ๋ค ใ ใ .
๋ฒกํฐ3๋ก 2D ๊ณต๊ฐ์ ๊ณ์ฐ์ ํ ๋ย ์ ํํ์ ๊ฐ๋ค ์ธ์ ๋ค๋ฅธ๊ฐ์ด ๋์ค๋ฉดย
์ค๊ฐ์ ์ฐ์ฐย ์ค์๋ ์์ง ๋ชปํ๋ ๋ฒ๊ทธ๊ฐ ์์๋ค๋ ๋ป์ด๋๊นย ๋๋ฒ๊น ์ ํด์ผํ๋๊ฒ์ด๋ค.
๊ฒฐ๋ก ์ย ์์ 2D๋ฅผ ๋ชฉ์ ์ผ๋ก ๊ฐ๋ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋ฉด ๋ฒกํฐย ์ฐ์ฐ์ ์ด๋ ๊ฒ ํด๋ ์ถฉ๋ถํ์ง๋ง
3D ์๋ฎฌ๋ ์ด์ ์ผ๋ก ์ด๋ฏธ ๊ฐ๋ฐ๋๊ฒ์ 2D๋ฅผ ์ถ๊ฐํ๋๊ฑฐ๋ฉด ๊ตณ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ์งค ์ด์ ๊ฐ ์์ด์ ๊ทธ๋ฐ๊ฑฐ๋ผ ์ดํดํ๋ฉด ํธํ๋ค.
์ค ์ด์ ์ง๋ฌธ๊ธ์ฌ๋ ธ๋๊ฑด๋ฐ ์ง์ง ๊ฐ์ฌํฉ๋๋ค ๊ทผ๋ฐ ๋ฌธ๊ณผ๋ผ์ ๋ฌธ์กํฉ๋๋ค ใ ใ ์ด ์ ๋๋ก ์ํ์ง์์ด ํ์ํ ์ง ๋ชฐ๋๋ค์.. ๋๊ณ ๋๊ณ ๋ณด๋ฉด์ ์ดํดํ๊ฒ ์ต๋๋ค ์ผ๋จ '2d๋ ๋ญ๋ ๊ฑ ์กฐ๋ ๋ชจ๋ฅด๋ฉด vector3 ์จ๋ผ'๋ก ์ดํดํด๋๋ฉด ๋ ๊น์?
์ฅ๊ธฐ์ ์ผ๋ก ์ ํ๋์ํ์ ๋๋ ์ ํ๋ธ ์์์ผ๋ก๋ผ๋ ๊ณต๋ถํด๋๋๊ฒ ์ข์ ๊ณ์ ๊ณฑ์น์ผ๋ฉด ์ธ์์์๊ฒ
๋ต๋ต ๊ฐ์ฌํฉ๋๋ค ใ ใ ๊ณต๋ถํด๋ณผ๊ฒ์
๊ฒ์ ๋ง๋๋๋ฐ ํ์ํ ์ ํ๋์๋ '์ํ์ผ๋ก ์์ํ๋ 3D ๊ฒ์ ๊ฐ๋ฐ'์ด๋ผ๋ ์ฑ ์ ๋๋ฉด ์ถฉ๋ถํจ
๊ทธ๋ฆฌ๊ณ ์กฐ๋ ๋ชจ๋ฅด๋ฉด vector3 ์จ๋ผ๋ผ๊ธฐ ๋ณด๋ค๋ vector2 ๋ณด๋ค vector3๊ฐ ๊ธฐ๋ณธ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ง์ผ๋ ๊ตณ์ด vector2๋ก ์ ํํ ํ์๊ฐ ์๋ค๋ผ๋ ๋ง์ธ ๋ฏ ์ถ๋ค.
๊ฐ์ฌํฉ๋๋ค ใ ใ ์ด์ฌํํด๋ณด๊ฒ ์๋๋ค
์๊ทธ๋๋ ์ ๋ํฐ์์ 2d๊ฒ์ ๊ฐ๋ฐํ๋๋ฐ ์ ์ ๋ฒกํฐ3์์ ์ง์ํ๋๊ฒ ๋ฒกํฐ 2์์ ์๋๋๊ฒ ์์ด์ ๊ทธ๋ฅ ๋ค 3์ผ๋ก ํต์ผํด์ผ๊ฒ ๋๋ผ