๋ฐ˜์‘ํ˜•

์š”์†Œ ๋‚ด๋ถ€์˜ ๊ณ ์ •๋œ ์ง€์ ๊ณผ ๋งˆ์šฐ์Šค ํด๋ฆญ ์ง€์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(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;
};
๋ฐ˜์‘ํ˜•