[JS] ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๊ณ์ฐํ๊ธฐ
์์ ๋ด๋ถ์ ๊ณ ์ ๋ ์ง์ ๊ณผ ๋ง์ฐ์ค ํด๋ฆญ ์ง์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์ ๊ฒฝํ(UX) ๊ฐ์ ์ ์ํด ๋ฒํผ ํด๋ฆญ ๊ฐ์ง ์์ญ์ ์ค์ ๋ณด๋ค ๋ ๋๊ฒ ์ค์ ํ ๋(ํด๋ฆญํ๊ธฐ ์ฝ๋๋ก ํ๊ธฐ ์ํด) ์ด๋ฐ ๊ณ์ฐ์ด ํ์ํ๋ค.
์ด๋ ๋ ์ง์ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ ํผํ๊ณ ๋ผ์ค ์ ๋ฆฌ๋ฅผ ์ด์ฉํด์ ๊ตฌํ ์ ์๋ค. ํผํ๊ณ ๋ผ์ค ์ ๋ฆฌ๋ ์ง๊ฐ์ผ๊ฐํ์์ ๋น๋ณ(๊ฐ์ฅ ๊ธด ๋ณ)์ ์ ๊ณฑ์ ๋ค๋ฅธ ๋ ๋ณ์ ์ ๊ณฑ์ ํฉ๊ณผ ๊ฐ๋ค๋ ์๋ฆฌ๋ค.
$$c^2 = a^2 + b^2$$
๋น๋ณ $c$์ ๊ธธ์ด๋ฅผ ๊ตฌํ๊ธฐ ์ํด ์๋ณ์ ์ ๊ณฑ๊ทผ(๋ฃจํธ; square root)์ ์ ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ํํํ ์๋ ์๋ค.
$$c = \sqrt{a^2+b^2}$$
ํํธ, ํผํ๊ณ ๋ผ์ค์ ์๋ฆฌ๋ฅผ ์ ์ฉํ๊ธฐ ์ํด ์ขํํ๋ฉด(์๋ก ์์ง์ผ๋ก ๊ต์ฐจํ๋ ๋ ์ง์ ์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋ฉด)์์ ๋ ์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์์ ์ง๊ฐ์ผ๊ฐํ์ ๋ง๋ค ์ ์๋ค. ๊ณ ์ ๋ ์ง์ $(x_1,y_1)$๊ณผ ๋ง์ฐ์ค ํด๋ฆญ ์ง์ $(x_2,y_2)$์ ์ง๊ฐ์ผ๊ฐํ์ ๋น๋ณ์ ์ด๋ฃจ๊ณ , ๋๋จธ์ง ๊ฐ์์ ๊ผญ์ง์ ์ $(x_2,y_1)$ ๋๋ $(x_1,y_2)$ ์ขํ์ ์์นํ๊ฒ ๋๋ค.
์ ์๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด ๋ง์ฐ์ค ํด๋ฆญ ์ง์ ๊ณผ ํน์ ์ง์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ํ์ฉ ๋ฒ์ ์์ ๋ค์ด์ค๋์ง ํ์ธํ๋ ํจ์๋ฅผ ๋ง๋ค ์ ์๋ค. ํน์ ์์์ ์์ (0, 0)์ ๊ธฐ์ค์ผ๋ก ํด๋ฆญ ์ง์ ์ ์ขํ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ์ด์ ํฌ์คํ ์ฐธ๊ณ .
const isColliding = (point: Point, mouse: Point): boolean => {
// ํผํ๊ณ ๋ผ์ค ์ ๋ฆฌ๋ฅผ ์ด์ฉํด point์ mouse ์ฌ์ด์ ๊ฑฐ๋ฆฌ(๋น๋ณ) ๊ณ์ฐ
// mouse.x ๋๋ mouse.y๋ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ขํ (e.clientX/Y - rect.left/top)
const dx = point.x - mouse.x;
const dy = point.y - mouse.y;
const distance = Math.sqrt(dx ** 2 + dy ** 2);
// ํด๋ฆญ ํ์ ์์ญ์ ๋๊ฒ ์ค์ ํ์ฌ ์ ํํ๊ธฐ ์ฝ๋๋ก ์กฐ์
return distance < STYLE.BASE_POINT_RADIUS * 2.5;
};
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS] ๋ฒ ์ง์ ๊ณก์ ์๋ฆฌ ์ดํดํ๊ธฐ feat. ์นด์คํ ์กฐ ์๊ณ ๋ฆฌ์ฆ (0) | 2025.06.23 |
---|---|
[JS] async ํจ์๊ฐ await๋ฅผ ๋ง๋ฌ์ ๋ ๋์ ํ๋ฆ (1) | 2025.06.14 |
[CSS] grid-row ๋์ ๋ฐฉ์ ์ดํด๋ณด๊ธฐ (0) | 2025.06.03 |
[HTTP] ETag ์ํฐํฐ ํ๊ทธ ํค๋ (0) | 2025.05.05 |
[JS] ์๋ฐ์คํฌ๋ฆฝํธ 6์ค๋ก ์ด๋ฏธ์ง ๋น๊ต ์ฌ๋ผ์ด๋ ๋ง๋ค๊ธฐ (0) | 2025.04.17 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[CS] ๋ฒ ์ง์ ๊ณก์ ์๋ฆฌ ์ดํดํ๊ธฐ feat. ์นด์คํ ์กฐ ์๊ณ ๋ฆฌ์ฆ
[CS] ๋ฒ ์ง์ ๊ณก์ ์๋ฆฌ ์ดํดํ๊ธฐ feat. ์นด์คํ ์กฐ ์๊ณ ๋ฆฌ์ฆ
2025.06.23 -
[JS] async ํจ์๊ฐ await๋ฅผ ๋ง๋ฌ์ ๋ ๋์ ํ๋ฆ
[JS] async ํจ์๊ฐ await๋ฅผ ๋ง๋ฌ์ ๋ ๋์ ํ๋ฆ
2025.06.14 -
[CSS] grid-row ๋์ ๋ฐฉ์ ์ดํด๋ณด๊ธฐ
[CSS] grid-row ๋์ ๋ฐฉ์ ์ดํด๋ณด๊ธฐ
2025.06.03 -
[HTTP] ETag ์ํฐํฐ ํ๊ทธ ํค๋
[HTTP] ETag ์ํฐํฐ ํ๊ทธ ํค๋
2025.05.05