์ด์ ๋ฌผ๋ฆฌ์์ง์ด ๊ฐ์ถ๋งํ ๊ธฐ๋ณธ์ ์ธ๊ฒ๋ค์ ๋ค ๋ง๋ฆ..ใ
constraint islanding์ด๋ ์ถฉ๋ ์ฝ๋ฐฑ, sleeping ๊ธฐ๋ฅ ๊ตฌํํจ
์๋ฐ์์ ์๋์ ๋์ถฉ ๋ฌผ๋ฆฌ์์ง ๊ฐ์๋ฅผ ๊ฐ๊ฒจ์ผ๋๋ฐ ํ์ํ ์ฌ๋๋ง ์ฝ์ด๋ณด์ผ..ใ
---------
์ผ๋จ ๋ฌผ๋ฆฌ์์ง์์๋ ๋ชจ๋ ๊ฑธ constraint(์ ์ฝ?)์ผ๋ก ์ ์ํ๊ณ ํด๊ฒฐํจ.
์ ์ฝ์กฐ๊ฑด์ด ๋ฒ์ด๋๋ ๊ฒ๋ค์ ์ ์ฝ์กฐ๊ฑด์ ๋ง์กฑํ๋๋ก update ์คํ ๋ง๋ค ๊ทธ๊ฑธ ํด๊ฒฐ(solve) ํ๋ ๋ฐฉ์์
์ถฉ๋์ด๋ ๊ฐ์ข ๊ด์ ์ฌ์ง์ด ๋ชจํฐ๋ ๋๋ฅด๋ ๊ฐ์ ๊ฒ๋ค๋ ๋ฌผ์ฒด์ ์์น๋ ํ์ ์ ๋ํ constraint ์์์ผ๋ก ์ ์ํจ.
์๋ฅผ ๋ค์ด ์ด๋ค ๋ฌผ์ฒดp๊ฐ ์์ ์ผ๋ก ๋ถํฐ l ๋งํผ ๋จ์ด์ ธ์ ์์ด๋ํ๊ฒ ํ๊ณ ์ถ๋ค๋ฉด ์ด ์ ์ฝ์กฐ๊ฑด์ C = ||p(x)|| - l = 0 ์ด ๋๊ฒ ์! ํด์ํ์๋ฉด ์์ ์ผ๋ก ๋ถํฐ์ ๋ฌผ์ฒด์ ์์น - ์๊ถค๋ ๋ฐ์ง๋ฆ = 0.
์ด์ ์ฐ๋ฆฌ๋ ๊ฒ์์ ์ ๋ฐ์ดํธ ์คํ ๋ง๋ค ์ ์์ ํ์ธํ๋๊ฑฐ์.
c=0์ด๋ฉด ์ ์ฝ์กฐ๊ฑด์ด ๋ง์กฑํ๋๊ฑฐ๋๊น ๋์ด๊ฐ๊ณ c != 0์ด๋ฉด ๋ฌผ์ฒด์ ์์น๊ฐ ์๊ถค๋๋ฅผ ์ดํํ๋ค๋๊ฑฐ๋๊น, ์ฐ๋ฆฌ๋ ์ด ์ ์ฝ์ ํด๊ฒฐํด์ ๋ฌผ์ฒด๋ฅผ ๋ค์ ์๊ถค๋๋ก ๋๋ ค๋์ผ๋จ.
์ฐ๋ฆฌ๋ ์ด ๋ฌผ์ฒด๊ฐ c=0์ธ ์ํ๋ฅผ ๊ณ์ ๋ง์กฑํ๋๋ก ํ๊ณ ์ถ์.
๊ทธ๋ผ ๋จ์ํ c=0์ด ๋๋๋ก ๋ฌผ์ฒด์ position์ ์๊ถค๋๋ก ๋๋ ค๋ฒ๋ฆฌ๋ฉด ๋๋๊ฑฐ ์๋๊ฐ? ์๊ฐ์ด ๋๋๋ฐ ๊ทธ๋ฌ๋ฉด ์๋จ. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ ์ฝ์กฐ๊ฑด์ ๋ฐ๋ก๋ฐ๋ก ๋ง์กฑํ๊ฒ ์ง๋ง
์๋ฎฌ๋ ์ด์ ์ด ์ด์ํ๊ฒ ๋ณด์ด๊ฒ ๋ ๊ฑฐ์ ๋ฌผ์ฒด๊ฐ ํ ๋ ํฌํธํ๊ณ ์ง์ง์ง๊ฑฐ๋ฆฌ๊ณ ๋๋ฆฌ๋๊ฒ ์ง..
๊ทธ๋์ ์ฐ๋ฆฌ๋ c๋ฅผ ํ๋ฒ ๋ฏธ๋ถํ c'=0์ด๋ ๋๋ฒ ๋ฏธ๋ถํ c''=0 ์ ๋ง์กฑํ๊ฒ ํ๋ ์ถฉ๊ฒฉ๋(p) ๋๋ ํ(f)๋ฅผ ๊ตฌํด์ ์ด๊ฑธ ๋ดํด ๋ฐฉ์ ์์ ์ด์ฉํด ๋ฌผ์ฒด์ ์ ์ฉํ์! ํ๋๊ฒ ๋ฌผ๋ฆฌ์์ง์ ๋์ ์๋ฆฌ์.
c''๋ ๋ฒจ์์ constraint๋ฅผ ํด๊ฒฐํ๋๊ฑธ force-based, c'๋ ๋ฒจ์์ constraint๋ฅผ ํด๊ฒฐํ๋๊ฑธ impulse-based ๋ผ๊ณ ๋ถ๋ฆ.
์๋ ์๋ c''๋ ๋ฒจ์์ ์์ง์ ๋ง๋ค์๋ค๋ฉด ํ๋ ๋ฌผ๋ฆฌ ์์ง์ ๋ชจ๋ c'๋ ๋ฒจ์. c''์์ ํด๊ฒฐํ๋๊ฒ ๊ฐ์ฅ ์ ํํ์ง๋ง ๋๋ฆฌ๊ณ c'์์ ํ๋๊ฒ ๋น ๋ฅด๊ณ ๊ฒฐ๊ณผ๋ฌผ๋ ์์ฐ์ค๋ฌ์์ ๊ทธ๋ ๋ค๊ณ ํจ.
c=0์ด ๋ง์กฑํ๋ค๋๊ฒ์ c'=0 ๊ทธ๋ฆฌ๊ณ c''=0๋ ๋ง์กฑํด์ผ ๋๋๊ฑฐ์. ์๊ถค๋ ์์์์๋ ์ ๊ทธ๋ฆผ๊ฐ์ p', p''๊ฐ c=0๋ฅผ ๋ง์กฑํ๋ ํํ๊ฐ ๋ ๊ฑฐ์.
ํ์ฌ ๋ฌผ์ฒด์ p'๊ฐ ์ ์ ๋ฐ ํํ๊ฐ ์๋๋ผ๋ฉด ์ ์ ํ ๊ณ์ฐ๋ impulse(์ถฉ๊ฒฉ๋)์ ๋งค ํ์์คํ ๋ง๋ค ์ค๊ฐ์ง๊ณ ์๋ง์ p'๋ฅผ ๊ณ์ ์ ์งํ๋๊ฑฐ์!
๊ทธ๋ผ ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ๊ฑด ์ ์ถฉ๊ฒฉ๋์ ๊ณ์ฐํ๋๊ฑด๋ฐ ์ด ๋ถ๋ถ์ด ์ํ ์ต์ ํ ์ด๋ก ์ด ๋ค์ด๊ฐ
์์ฝ๋น์ ๊ตฌํ๊ณ ๋ผ๊ทธ๋์ง์ ๋ฉํฐํ๋ผ์ด์ด ๊ตฌํ๊ณ ~~ ์ด๋ ๊ฒ ํด์ ์ถฉ๊ฒฉ๋์ ๋งค ์คํ ๋ง๋ค, ๊ฐ constraint๋ง๋ค ๊ณ์ฐํด์ ์ ์ฉํ๋๊ฑฐ์!
๋ฌผ๋ฆฌ์์ง ๊ฐ์ ๋!
--------------------------
์ด๋ฒ์ ๋ด๊ฐ ๊ตฌํํ constraint islanding์ด๋ sleeping์ ๋ญ๋๋ฉด,
์ด constraint๋ค์ด ์๋ก ์ํฅ์ ๋ฏธ์น๋ ์ ๋ค๋ง ๊ณจ๋ผ์ ํ๋์ island(์ฌ)์ผ๋ก ๋ง๋ค๊ณ ์ด๋ค์ ๊ฐ๊ฐ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ์! ๋ผ๋ ๊ฐ๋ ์.
์ ๊ทธ๋ฆผ์์ ๊ฐ๊ฐ์ island๋ ์๋ก์๋ก ์ํฅ์ ์์ฃผ๋๊น ์ด๋ค์ ์๋ก ๊ตฌ๋ถํด์ผํจ.
์ด ์ํฉ์ ์ ๊ทธ๋ฆผ์ฒ๋ผ ๊ทธ๋ํ๋ก ์์ ํ๊ณ ์ค๋ธ์ ํธ๊ฐ ๋ ธ๋, constraint๋ฅผ ์ฃ์ง๋ก ์๊ฐํด์ dfs๋ bfs๋ก island๋ฅผ ์์ฑํจ.
๊ทธ๋์ island๋ฅผ ํ๋ ์์ฑํ๋ฉด ์ฐ๋ ๋๋ฅผ ํ๋ ๋ฐ์นญํด์ ๊ฐ๊ฐ์ island์ constraint๋ค์ ๋
๋ฆฝ์ ์ผ๋ก ํด๊ฒฐํ๋๊ฑฐ์!
๋ด๊ฐ ๋ง๋ ์์ง์ ํ์ ์คํฌ๋ฆฝํธ๋ก ์น์์ ๋ง๋ ๊ฑฐ๋ผ ๋ณ๋ ฌ์ฒ๋ฆฌ๋ ๋ชปํ์ง๋ง ๋ฉํฐ์ค๋ ๋ฉ์ด ๋๋ ํ๊ฒฝ์ด๋ผ๋ฉด ์ด๋ ๊ฒ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ์๋ ์ฑ๋ฅ ํฅ์์ด ์์ฃผ ํด๊ฑฐ๋ก ์์๋จ..
sleeping์ ๋ญ๋๋ฉด ๋ง ๊ทธ๋๋ก island์ ๋ชจ๋ ์ค๋ธ์ ํธ๋ค์ด ์ด๋์ ๋ ์๊ฐ๋์ ๊ณ์ ์์์ง์ด๋ฉด ์ ์๊ณ ์๋ค๊ณ ์๊ฐํ๊ณ ํด๋น island์ ์ ์ฝ์กฐ๊ฑด ํด๊ฒฐ ์คํ
์ ๊ฑด๋๋ฐ๋๊ฑฐ์. ์ ์ฌ์ง์ฒ๋ผ ์ค๋ฅธ์ชฝ ๋ island๋ ์๊ณ ์๋๋ฐ ์ผ์ชฝ๋์ ๊ณ์ ์์ง์.
-----
์ด๋ ๊ฒ 2D ๋ฌผ๋ฆฌ์์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์๋งํ ๊ธฐ๋ฅ์ ๋ค ๋ง๋ฆ..
๋์ค์ ๊ธฐํ๊ฐ ๋๋ฉด 3D๋ก c++๋ฒ์ ์ผ๋ก ํฌํ ํ ๊ฑฐ์ ใ
์๋๋ ํ๋ ์ด ๊ฐ๋ฅํ ๋ฐ๋ชจ ๋งํฌ!
https://physicsengine.netlify.app/
์ด์ ๊ธด ๊ธ ์ฝ์ด์ค์ ๊ฐ์ฌ ใ ใ ..
๋์ค์ ์๊ฐ๋๋ฉด ๋น๋์ค ํํ ๋ฆฌ์ผ ๋ง๋คํ ๋๊น ๋ด์ฃผ์ผ ใ
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
์๋ ๊ทธ๋ฅ ์ปด๊ณต..
์ฒ์ฌ์?
๊ณ ์
ํน์ ๊ณต๋ถํ ๋ ์ฐ์ ์์ ์ด๋ ์์ ์ ์ ์์๊น์
์ ์ ๊ธ์ ๋จ๊ธด๊ฑฐ ์์๋ค์ ๊ณต๋ถ์ ๋ง์ ๋์ ๋์ต๋๋ค
box2d ๊ฐ๋ฐ์ erin catto์ gdc๋ฐํ์๋ฃ๊ฐ ์ต๊ณ ์์
box2d.org์์ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ bullet ์ปค๋ฎค๋ํฐ๋ ode ๋ฉ๋ด์ผ์์ soft constraint ๊ตฌํํ ๋ ์ฐธ๊ณ ํ๋ค์. ์ด๋ฐ์๋ box2d-lite ์์ค ์ฐธ๊ณ ํ๋ฉด ์ข๊ณ ์ข ๊ฐ ์กํ์๋ฉด box2d ์์ค ๋ณด์๋ฉด ๋ฉ๋๋ค.
์ด๊ฑฐ๋ณด๋๊น ๋งฝ๋ฉ์ผ๋ก ๊ฐ์ฒด๋ ์ด์ค์ง์ ์ฝ๋ ์ง๋ ๊ธฐ์ต๋๋ค
์๋ฅ ์ํ ๋ช๋ฑ๊ธ?
์ ์ง์ง ์ํ๋ค ๋ ์ด๊ฑฐ ๊ทธ๋ฅ ์๋๋ก ๋จ์ด์ง๊ณ ์ถฉ๋ ๋๋๊ฑฐ๋ง ํ๋๋ฐ ๊ด์ ์ ๋ฉํฐ์ฐ๋ ๋๊น์ง;; ๊ฐ๊ณ ์๋ค
๋ถ๋ช ์ฐ๋ฆฌ๋ง๋ก ๋ ๊ธ์ธ๋ฐ ์ดํด๊ฐ ์๋๋คใ ใ ใ ใ ใ ใ ใ
๋๋... ์ข ์ง๋ฌ์ง๋ง 3d์์ง์ ์ด๋๊น์ง ๋ง๋ค์ด๋ณด์ จ์ด์..? ํํ ๋ฆฌ์ผ ๋น๋์ค๋ ๋์๋์?? ์ ๋ ๋ฐฐ์ฐ๊ณ ์ถ์ด์.. - dc App