๋ถ„๋ฆฌ์ถ•(SAT) ์ถฉ๋Œ๊ฒ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋ฐ€์–ด๋‚ด๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ธ€์ด์—์š”


๊ทธ๋ฆฌ๊ณ  ์ €๋„ ์ˆ˜ํ•™์ด๋ž‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ž˜ ์•„๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ  ์ œ๊ฐ€ ์ดํ•ดํ•œ ๋ฒ”์œ„ ์•ˆ์—์„œ ์“ฐ๋Š” ๋‚ด์šฉ์ด๋ผ ํ‹€๋ฆฌ๊ฑฐ๋‚˜ ์ •ํ™•ํ•˜์ง€ ์•Š์€ ๋‚ด์šฉ๋“ค์ด ์žˆ์„์ˆ˜๋„ ์žˆ์–ด์š”



ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก




1. ๋ณผ๋ก๋‹ค๊ฐํ˜•


7cf08168f5dc3f8650bbd58b3680746d1d3a



๋ถ„๋ฆฌ์ถ• ์ถฉ๋Œ๊ฒ€์‚ฌ๋Š” ๋‘ ๋ณผ๋ก๋‹ค๊ฐํ˜•์˜ ์ถฉ๋Œ์„ ํŒ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—์š”


์œ„์˜ ๊ทธ๋ฆผ์—์„œ ์ฒซ๋ฒˆ์งธ ๋‘๋ฒˆ์งธ๋Š” ๋ณผ๋ก๋‹ค๊ฐํ˜•์ด์ง€๋งŒ, ์„ธ๋ฒˆ์งธ๋Š” ๋ณผ๋ก๋‹ค๊ฐํ˜•์ด ์•„๋‹ˆ์—์š”





2. ์ตœ์†Œ์ด๋™๋ฒกํ„ฐ(MTV, Minimum Translation Vector)


7cf08268f5dc3f8650bbd58b3680766cef13


7cf08368f5dc3f8650bbd58b36897d69a9




MTV๋ž€ ๋‘ ๋„ํ˜•์ด ์ถฉ๋Œํ–ˆ์„๋•Œ, ๋„ํ˜•์„ ์„œ๋กœ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ๋กœ ๋ฐ€์–ด๋‚ด๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๊ฑฐ๋ฆฌ์˜ ๋ฒกํ„ฐ๋ฅผ ์ด์•ผ๊ธฐํ•˜๋Š”๊ฑฐ์—์š”


์•„๋ž˜์˜ ๊ทธ๋ฆผ์˜ ๋‘๊ฐ€์ง€ ๋ฒกํ„ฐ์ค‘ ์ดˆ๋ก์ƒ‰ ๋ฒกํ„ฐ๊ฐ€ ์ตœ์†Œ์ด๋™๋ฒกํ„ฐ์— ํ•ด๋‹น๋˜์š”, ํŒŒ๋ž‘์ƒ‰์€ ์ตœ์†Œ๊ธธ์ด๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œ์ด๋™๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ์—์š”





3. ๋ถ„๋ฆฌ์ถ•(SAT)์ถฉ๋Œ๊ฒ€์‚ฌ์˜ ์›๋ฆฌ



7ff08168f5dc3f8650bbd58b3680746ee9e0


7ff08268f5dc3f8650bbd58b36867164ac




์œ„์˜ ์ฒซ๋ฒˆ์งธ ๊ทธ๋ฆผ์€ ์‚ฌ๊ฐํ˜•๊ณผ ์‚ผ๊ฐํ˜•์ด ์ถฉ๋Œํ•œ ์ƒํƒœ์ด๊ณ , ๋‘๋ฒˆ์งธ ๊ทธ๋ฆผ์€ ์‚ฌ๊ฐํ˜•๊ณผ ์‚ผ๊ฐํ˜•์ด ์ถฉ๋Œํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์š”


๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ฆผ์˜ ๊ฐ€์žฅ์ž๋ฆฌ์˜ ๊ฒ€์€ ์„ ๋“ค์€, ๋‹ค๊ฐํ˜•์˜ ๊ฐ๊ฐ์˜ ๋ชจ์„œ๋ฆฌ์—์„œ ์ˆ˜์ง์ธ ๋ฒกํ„ฐ๋“ค์ด์—์š”, ์ฆ‰, ๊ทธ๋ฆผ์—์„œ๋Š” ์ผ๋ถ€๋งŒ ๊ทธ๋ ค์ ธ์žˆ์ง€๋งŒ, ์‚ฌ๊ฐํ˜•4๊ฐœ ์‚ผ๊ฐํ˜•3๊ฐœ ํ•ด์„œ ์ด 7๊ฐœ์˜ ๋ฒกํ„ฐ๊ฐ€ ์žˆ์„์ˆ˜ ์žˆ์–ด์š”


๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ์ž๋ฆฌ์˜ ๋ฒกํ„ฐ ์œ„์— ๋„ํ˜•๊ณผ ๋™์ผํ•œ ์ƒ‰์œผ๋กœ ๊ทธ๋ ค์ง„ ์„ ๋“ค์€, ํ•ด๋‹น ๋‹ค๊ฐํ˜•์„ ๊ทธ ๋ฒกํ„ฐ ์œ„์— ํˆฌ์˜ํ–ˆ์„๋•Œ์˜ ์˜์—ญ์„ ํ‘œ์‹œํ•œ๊ฑฐ์—์š”





์œ„์˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด, ์ฒซ๋ฒˆ์งธ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋งŒ์•ฝ ๋‘ ๋„ํ˜•์ด ์ถฉ๋Œํ–ˆ๋‹ค๋ฉด, ๋‘ ๋„ํ˜•์˜ ๊ฐ๊ฐ์˜ ๊ฐ€์žฅ์ž๋ฆฌ์— ์ˆ˜์ง์ธ ๋ชจ๋“ (7๊ฐœ)์˜ ๋ฒกํ„ฐ์—์„œ, ๊ทธ๋ฆผ์— ๊ทธ๋ ค์ง„๊ฒƒ์ฒ˜๋Ÿผ ๋‘ ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์€ ๊ฒน์น˜๊ฒŒ ๋˜์š”


๋ฐ˜๋Œ€๋กœ ๋‘๋ฒˆ์งธ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋งŒ์•ฝ ๋‘ ๋„ํ˜•์ด ์ถฉ๋Œํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋ชจ๋“ (7๊ฐœ)์˜ ๋ฒกํ„ฐ ์ค‘์—์„œ ๊ทธ๋ฆผ์— ๋‚˜์™€์žˆ๋Š”๊ฒƒ์ฒ˜๋Ÿผ ๋‘ ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์น˜์ง€ ์•Š๋Š” ๋ฒกํ„ฐ๊ฐ€ ์žˆ์–ด์š”,


์ฆ‰, ๋‹ค๊ฐํ˜•์˜ ๊ฐ๊ฐ์˜ ๊ฐ€์žฅ์ž๋ฆฌ์— ์ˆ˜์ง์ธ ๋ชจ๋“  ๋ฒกํ„ฐ๋ณ„๋กœ, ๊ฐ ๋ฒกํ„ฐ๋“ค๋งˆ๋‹ค ๋„ํ˜•์„ ํˆฌ์˜์‹œ์ผœ์„œ, ๊ทธ ์˜์—ญ์ด ๊ฒน์น˜๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ์กฐ์‚ฌํ•˜๋ฉด, ๊ฒฐ๊ตญ ๋‘ ๋„ํ˜•์ด ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”์ง€๋ฅผ ๊ตฌํ• ์ˆ˜ ์žˆ์–ด์š”,


๋งŒ์•ฝ ํ•˜๋‚˜๋ผ๋„ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์น˜์ง€ ์•Š๋Š” ๋ฒกํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋‘ ๋„ํ˜•์€ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๊ณ , ๋ชจ๋“  ๋ฒกํ„ฐ์—์„œ ๋‘ ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์นœ๋‹ค๋ฉด ๋‘ ๋„ํ˜•์€ ์ถฉ๋Œํ•˜๋Š”๊ฑฐ์—์š”


๊ทธ๋ฆฌ๊ณ  ์ด๊ฒŒ ๋ถ„๋ฆฌ์ถ•(SAT)์ถฉ๋Œ๊ฒ€์‚ฌ์˜ ์›๋ฆฌ์—์š”

7ff08368f5dc3f8650bbd58b36857d6864



๊ทธ๋ฆฌ๊ณ  ์ด๋•Œ ์•ž์—์„œ ์„ค๋ช…ํ•œ ์ตœ์†Œ์ด๋™๋ฒกํ„ฐ(MTV)๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด, ๋‘ ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ์ œ์ผ ์ ๊ฒŒ ๊ฒน์น˜๋Š” ๋ฒกํ„ฐ๋ฅผ ์ฐพ์œผ๋ฉด ๋˜์š”,


๊ทธ๋ฆฌ๊ณ  ๊ทธ๋•Œ ๋‘ ๋„ํ˜•์„ ํˆฌ์˜์‹œํ‚จ ๋ฒกํ„ฐ์˜ ๋ฐฉํ–ฅ์œผ๋กœ, ๋‘ ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์น˜๋Š” ๊ธธ์ด ๋งŒํผ์˜ ๋ฒกํ„ฐ๊ฐ€, MTV๊ฐ€ ๋˜๋Š”๊ฑฐ์—์š”


์œ„์˜ ๊ทธ๋ฆผ์—์„œ ์ดˆ๋ก์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•œ ๋ฒกํ„ฐ๊ฐ€ ๋‘ ๋„ํ˜•์˜ ์ถฉ๋Œ์—์„œ์˜ MTV์—์š”




๊ทธ๋ฆฌ๊ณ  MTV์˜ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”(์œ„์˜ ๊ทธ๋ฆผ์—์„œ ์‚ผ๊ฐํ˜•์„ ์‚ฌ๊ฐํ˜• ๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ผ์ง€, ์‚ฌ๊ฐํ˜•์„ ์‚ผ๊ฐํ˜• ๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ผ์ง€)


๋‘ ํˆฌ์˜์˜์—ญ์ค‘ ์–ด๋–ค ์„ ๋ถ„์„ ๊ณ ์ •์‹œํ‚ค๊ณ  ๋ฐ€์–ด๋‚ผ์ง€์— ๋”ฐ๋ผ ๊ธธ์ด์˜ ๋ถ€ํ˜ธ๋ฅผ +ํ˜น์€-๋กœ ํ•˜๋ฉด ๋˜์š”


์œ„์˜ ๊ทธ๋ฆผ์€ ํŒŒ๋ž‘์ƒ‰์ด ์™ผ์ชฝ, ์ฃผํ™ฉ์ƒ‰์ด ์˜ค๋ฅธ์ชฝ์ธ ์ƒํƒœ์—์„œ, ํŒŒ๋ž‘์ƒ‰์„ ์ฃผํ™ฉ์ƒ‰ ๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ด๊ณ ์ž ํ•ด์„œ


-๊ธธ์ด๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๋Š”๊ฑฐ์—์š”





4. ํˆฌ์˜๋ฒกํ„ฐ์˜ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ


7ef08168f5dc3f8650bbd58b3684746dbc



์œ„์˜ ๊ทธ๋ฆผ์—์„œ a๋ฒกํ„ฐ๋ฅผ b๋ฒกํ„ฐ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํˆฌ์˜์‹œํ‚จ c๋ฒกํ„ฐ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”


a๋ฒกํ„ฐ์™€ b๋ฒกํ„ฐ๋ฅผ ๋‚ด์ ํ•˜๋ฉด ๋˜์š”, ๋‹จ ์ด๋•Œ b๋ฒกํ„ฐ๋Š” ๋‹จ์œ„๋ฒกํ„ฐ(๊ธธ์ด๊ฐ€ 1์ธ ๋ฒกํ„ฐ)์—ฌ์•ผ ๋˜์š”


๊ทธ๋ž˜์•ผ ๋‘ ๋ฒกํ„ฐ๋ฅผ ๋‚ด์ ํ–ˆ์„๋•Œ c๋ฒกํ„ฐ์˜ ๊ธธ์ด๊ฐ€ย ๋‚˜์™€์š”, ์ด๊ฒŒ ํˆฌ์˜๋ฒกํ„ฐ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—์š”




5. ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ ๊ตฌํ•˜๊ธฐ : shape_project ํ•จ์ˆ˜



79f08168f5dc3f8650bbd58b36867c6dc4




๊ทธ๋ฆฌ๊ณ  ์œ„์˜ ํˆฌ์˜๋ฒกํ„ฐ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ, ํŠน์ • ๋„ํ˜•์„ ํŠน์ • ๋ฒกํ„ฐ์— ํˆฌ์˜ํ–ˆ์„๋•Œ์˜ ์˜์—ญ์„ ๊ตฌํ• ์ˆ˜ ์žˆ์–ด์š”


์œ„์˜ ๊ทธ๋ฆผ์—์„œ ํŒŒ๋ž‘์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„, ์ฆ‰ ๋„ํ˜•์„ ์•„๋ž˜์˜ ๋ฒกํ„ฐ์— ํˆฌ์˜ํ–ˆ์„๋•Œ์˜ ์˜์—ญ์„ ๊ตฌํ•˜๋Š”๊ฑฐ์—์š”


์ตœ์ข…์ ์œผ๋กœ๋Š” ๊ทธ๋ฆผ์—์„œ min max๋ผ๊ณ  ํ‘œ์‹œ๋œ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋˜์š”




๋„ํ˜•์˜ ๊ฐ๊ฐ์˜ ๊ผญ์ง“์ ์„, ์›์ ์œผ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ผญ์ง“์ ๊นŒ์ง€์˜ ๋ฒกํ„ฐ๋กœ ์—ฌ๊ธด๋‹ค์Œ


์•ž์˜ ํˆฌ์˜๋ฒกํ„ฐ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ, ๋ชจ๋“  ๊ผญ์ง“์ (๋ฒกํ„ฐ)๋“ค์„ ์•„๋ž˜์˜ ๋ฒกํ„ฐ์— ํˆฌ์˜์‹œ์ผฐ์„๋•Œ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๊ณ 


๊ทธ๋•Œ์˜ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋˜์š”,



ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก

def shape_project(vx,vy,p)

len = Array.new

i = 0

until p[i] == nil

len.push(p[i][0]*vx+p[i][1]*vy)

i+=1

end

return len.min, len.max

end

ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก



๊ทธ๋ฆฌ๊ณ  ์ด๊ฒŒ ์œ„์˜ ๊ณผ์ •์˜ ์ฝ”๋“œ์—์š”, rubyํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ์—์š”


์ž…๋ ฅ๊ฐ’์—์„œ vx์™€ vy๋Š” ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์„ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฒกํ„ฐ์—์š”, ๋‹จ ์ด๋•Œ ์ด ๋ฒกํ„ฐ๋Š” ๋‹จ์œ„๋ฒกํ„ฐ๋กœ ์ž…๋ ฅํ•ด์•ผํ•ด์š”


๊ทธ๋ฆฌ๊ณ  p๋Š” [[x1,y1],[x2,y2],[x3,y3]] ํ˜•ํƒœ์˜ ๋ฐฐ์—ด๋กœ ํˆฌ์˜์˜์—ญ์„ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋‹ค๊ฐํ˜•์˜ ๊ฐ ๊ผญ์ง“์ ์˜ ์ขŒํ‘œ๋ฅผ ์ž…๋ ฅํ•œ๊ฑฐ์—์š”


๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ์ž…๋ ฅํ•˜๋ฉด, ์ตœ์ข…์ ์œผ๋กœ ํ•ด๋‹น ๋„ํ˜•์„ ํ•ด๋‹น ๋ฒกํ„ฐ์— ํˆฌ์˜ํ–ˆ์„๋•Œ์˜ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’์ด ์ถœ๋ ฅ๋˜์š”





6. ์„ ๋ถ„์ด ๊ฒน์น˜๋Š” ์˜์—ญ ๊ตฌํ•˜๊ธฐ : line_overlap ํ•จ์ˆ˜

79f08268f5dc3f8650bbd58b3688706c13




์œ„์— ์˜ฌ๋ ค๋†“์€ ๊ทธ๋ฆผ์€, ๋‘ ์„ ๋ถ„์ด ์ฃผ์–ด์กŒ์„๋•Œ, ๋‘ ์„ ๋ถ„์ด ๊ฒน์น˜๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜๋Š” ํ•จ์ˆ˜์—์š”


๋‘ ์„ ๋ถ„(์ฃผํ™ฉa ํŒŒ๋ž‘b)์˜ ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’(amn amx bmn bmx)์ด ์ฃผ์–ด์กŒ์„๋•Œ, ๋‘ ์„ ๋ถ„์ด ๊ฒน์น˜๋Š”์ง€๋ฅผ ์ฒดํฌํ•ด์„œ


๋งŒ์•ฝ ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค๋ฉด nil์„ ์ถœ๋ ฅํ•˜๊ณ ,


๊ฒน์นœ๋‹ค๋ฉด, ๊ทธ๋•Œ์˜ ๊ธธ์ด๋ฅผ, ์ฃผํ™ฉ์ƒ‰ ์„ ๋ถ„์€ ๊ณ ์ •์‹œํ‚จ์ฑ„๋กœ ํŒŒ๋ž‘์ƒ‰ ์„ ๋ถ„์„ ์ฃผํ™ฉ์ƒ‰ ์„ ๋ถ„ ๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ด๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์ด๋™๊ธธ์ด๋กœ ์ถœ๋ ฅํ•ด์ค˜์š”




๊ทธ๋ฆผ์—์„œ ์™ผ์ชฝ ์œ„์˜ ์„ ๋ถ„๋“ค์„ ๋ณด๋ฉด ๋‘ ์„ ๋ถ„์ด ๊ฒน์ณ์žˆ์ง€ ์•Š์•„์š”, ์ด๋Ÿด๋•Œ๋Š” nil์„ ์ถœ๋ ฅํ•ด์ค˜์š”


๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ฆผ์—์„œ ์™ผ์ชฝ ์•„๋ž˜๋Š” ๋‘ ์„ ๋ถ„์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒน์ณ์ ธ์žˆ๋Š” ์ƒํƒœ์—์š”,


์œ„์ชฝ์€ ํŒŒ๋ž‘์ƒ‰์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€์–ด๋‚ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— + ๋ฐฉํ–ฅ์˜ ๊ธธ์ด๋กœ ์ถœ๋ ฅ๋˜๊ณ 


์•„๋ž˜์ชฝ์€ ํŒŒ๋ž‘์ƒ‰์„ ์™ผ์ชฝ์œผ๋กœ ๋ฐ€์–ด๋‚ด์•ผ ํ•˜๋‹ˆ๊นŒ -๊ธธ์ด๋กœ ์ถœ๋ ฅ๋˜์š”




๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ฆผ์˜ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„๋“ค์„ ๋ณด๋ฉด, ๋‘ ์„ ๋ถ„์ค‘ ํ•œ์ชฝ์ด ๋‹ค๋ฅธํ•œ์ชฝ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—์š”


์ด๋Ÿด๋•Œ๋Š” ํŒŒ๋ž‘์ƒ‰์„ ์–ด๋А์ชฝ(์˜ค๋ฅธ์ชฝ ๋˜๋Š” ์™ผ์ชฝ)์œผ๋กœ ๋ฐ€์–ด๋‚ด์•ผ ๋” ์ด๋™๊ฑฐ๋ฆฌ๊ฐ€ ์ ์€์ง€๋ฅผ ์ฒดํฌํ•ด์„œ


ํ•ด๋‹น ๋ฐฉํ–ฅ์œผ๋กœ์˜ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•ด์ค˜์š”, ์—ญ์‹œ ํŒŒ๋ž‘์ƒ‰ ์„ ๋ถ„์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€์–ด๋‚ด์•ผ ํ•œ๋‹ค๋ฉด +๋ฅผ, ์™ผ์ชฝ์ด๋ผ๋ฉด -๋ฅผ ์ถœ๋ ฅํ•ด์ค˜์š”




๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ์ด๋™๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์ด๋™๊ฑฐ๋ฆฌ์˜ ๋ถ€ํ˜ธ๋ฅผ + - ๋กœ ๋ฐ”๊พธ๋Š” ๊ธฐ๋Šฅ์€


๋‘ ๋„ํ˜•์˜ ์ถฉ๋Œ์—์„œ MTV์˜ ๋ฐฉํ–ฅ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ด์š”


๋‘ ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์น˜๋Š” ๊ธธ์ด๋ฅผ ํ† ๋Œ€๋กœ MTV๋ฅผ ๊ตฌํ• ๋•Œ


์–ด๋–ค ๋„ํ˜•์„ ๊ณ ์ •์‹œํ‚ค๊ณ , ์–ด๋–ค ๋„ํ˜•์„ ๋ฐ€์–ด๋‚ผ์ง€์— ๋”ฐ๋ผ์„œ, ๊ณ ์ •์‹œํ‚ฌ ์„ ๋ถ„๊ณผ ์ด๋™์‹œํ‚ฌ ์„ ๋ถ„์„ ๊ตฌํ•˜๋ฉด


๊ทธ ๊ธธ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์„œ, ๊ฒฐ๊ตญ ์›ํ•˜๋Š” ๋„ํ˜•์„ ๋ฐ€์–ด๋‚ด๊ธฐ ์œ„ํ•œ MTV๋ฅผ ๊ตฌํ• ์ˆ˜ ์žˆ์–ด์š”



ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก

def line_overlap(amn,amx,bmn,bmx)

#1

if amx <= bmn || bmx <= amn

return nil

end

#2

if (amn <= bmn && bmx <= amx) || (bmn <= amn && amx <= bmx)

t1,t2 = amx-bmn, bmx-amn

if (t1).abs < (t2).abs

return t1

else

return -t2

end

end

#3

if amn <= bmn

return amx-bmn

end

if bmn <= amn

return (bmx-amn)*-1

end

end

ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก



์ด๊ฒŒ ์œ„์˜ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ์—์š”, ์ž…๋ ฅ๊ฐ’์œผ๋กœ ๋‘ ์„ ๋ถ„์˜ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด, ๋‘ ์„ ๋ถ„์ด ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค๋ฉด nil์„,


๋งŒ์•ฝ ๊ฒน์นœ๋‹ค๋ฉด b๋ฅผ a๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ด๊ธฐ ์œ„ํ•œ ์ตœ์†Œ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•ด์ค˜์š”, +๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ€์–ด๋‚ด์•ผ ํ•œ๋‹ค๋ฉด +๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๊ณ 


-๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ€์–ด๋‚ด์•ผ ์ตœ์†Œ๊ฑฐ๋ฆฌ๋ผ๋ฉด -๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•ด์ค˜์š”



์œ„์˜ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ์—์„œ #1 ๋ถ€๋ถ„์€ ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค๋ฉด nil์„ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด์—์š”


#2 ๋ถ€๋ถ„์€ ๋‘ ์„ ๋ถ„์ค‘ ํ•œ์ชฝ์ด ๋‹ค๋ฅธ ํ•œ์ชฝ์— ์™„์ „ํžˆ ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์—์š”, ์˜ค๋ฅธ์ชฝ(+๋ฐฉํ–ฅ) ์™ผ์ชฝ(-๋ฐฉํ–ฅ)์ค‘ ๋” ๊ฑฐ๋ฆฌ์˜ ์ ˆ๋Œ€๊ฐ’์ด ์ ์€ ๋ฐฉํ–ฅ์˜ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•ด์ค˜์š”


#3๋ถ€๋ถ„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘ ์„ ๋ถ„์ด ๊ฒน์ณ์žˆ๋Š” ๊ฒฝ์šฐ์—์š”, a๊ฐ€ ์™ผ์ชฝ์ด๊ณ  b๊ฐ€ ์˜ค๋ฅธ์ชฝ์ด๋ฉด +๊ธธ์ด๋กœ


b๊ฐ€ ์™ผ์ชฝ์ด๊ณ  a๊ฐ€ ์˜ค๋ฅธ์ชฝ์ด๋ฉด -๊ธธ์ด๋กœ ์ถœ๋ ฅํ•ด์ค˜์š”





7. ๋‘ ๋‹ค๊ฐํ˜•์„ ํˆฌ์˜ํ–ˆ์„๋•Œ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„ ๊ตฌํ•˜๊ธฐ : sat1ํ•จ์ˆ˜

79f08368f5dc3f8650bbd58b3685716dca


79f08468f5dc3f8650bbd58b36847d6aa7


7ff08368f5dc3f8650bbd58b36857d6864



๊ทธ๋ฆฌ๊ณ  ์•ž์˜ ๋‘ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ, ์ตœ์ข…์ ์œผ๋กœ ๋‘ ๋‹ค๊ฐํ˜•์„ ํˆฌ์˜ํ–ˆ์„๋•Œ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ์–ด์š”


์œ„์˜ ๊ทธ๋ฆผ์€ ํ•ด๋‹น ํ•จ์ˆ˜์˜ ๊ทธ๋ฆผ์ด์—์š”, ๋งŒ์•ฝ ์ฒซ๋ฒˆ์งธ์ฒ˜๋Ÿผ ๋‘ ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค๋ฉด nil์„ ์ถœ๋ ฅํ•˜๊ณ 


๋‘๋ฒˆ์งธ์ฒ˜๋Ÿผ ๋‘ ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์นœ๋‹ค๋ฉด, ์ด๋•Œ ํŒŒ๋ž‘์ƒ‰(์‚ฌ๊ฐํ˜•)์„ ์ฃผํ™ฉ์ƒ‰(์‚ผ๊ฐํ˜•) ๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ด๊ธฐ ์œ„ํ•œ ์ตœ์†Œ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•ด์ค˜์š”,


์ฆ‰, ๋‘๋ฒˆ์งธ ๊ทธ๋ฆผ์€ +๊ฑฐ๋ฆฌ๊ฐ€ ๋‚˜์˜ค๊ณ , ์„ธ๋ฒˆ์งธ ๊ทธ๋ฆผ์€ -๊ฑฐ๋ฆฌ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜์š”


์ด๋ ‡๊ฒŒ ์ด๋™์‹œ์ผœ์•ผํ•  ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์ด๋™๊ฑฐ๋ฆฌ์˜ ๋ถ€ํ˜ธ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋ฉด, ์ถฉ๋Œ์‹œ์— MTV๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์—์„œ ํŠน์ • ๋„ํ˜•์„ ๊ณ ์ •์‹œํ‚ค๊ณ  ํŠน์ • ๋„ํ˜•์„ ๋ฐ€์–ด๋‚ด๊ธฐ ์œ„ํ•œ ์ตœ์†Œ์ด๋™๋ฒกํ„ฐ๋ฅผ ๊ตฌํ• ์ˆ˜ ์žˆ์–ด์š”



ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก

def sat1(vx,vy,p1,p2)

amn, amx = shape_project(vx,vy,p1)

bmn, bmx = shape_project(vx,vy,p2)

return line_overlap(amn,amx,bmn,bmx)

end

ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก



๊ทธ๋ฆฌ๊ณ  ์ด๊ฒŒ ์œ„์˜ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ์—์š”, vx์™€ vy๋Š” ํˆฌ์˜์˜์—ญ์ด ๊ฒน์น˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฒกํ„ฐ๋ฅผ ๋‹จ์œ„๋ฒกํ„ฐ๋กœ ์ž…๋ ฅํ•˜๋ฉด ๋˜์š”


p1๊ณผ p2๋Š” ๊ฐ๊ฐ [[x1,y1],[x2,y2],[x3,y3]] ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•œ ๋‹ค๊ฐํ˜•์ด์—์š”,


๊ทธ๋ฆฌ๊ณ  ์ด๋•Œ ๋‘ ๋„ํ˜•์ด ํ•ด๋‹น ๋ฒกํ„ฐ์—์„œ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค๋ฉด nil์„, ๊ฒน์นœ๋‹ค๋ฉด p2๋ฅผ p1๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ด๊ธฐ ์œ„ํ•œ ์ตœ์†Œ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•ด์ค˜์š”,


์ฆ‰ +๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ€์–ด๋‚ด์•ผํ•œ๋‹ค๋ฉด +๊ฑฐ๋ฆฌ๊ฐ€ ๋‚˜์˜ค๊ณ , -๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ€์–ด๋‚ด์•ผํ•œ๋‹ค๋ฉด -๊ฑฐ๋ฆฌ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜์š”





8. ๋‹ค๊ฐํ˜•์˜ ๊ผญ์ง“์ ์„ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ : sortํ•จ์ˆ˜

79f08568f5dc3f8650bbd58b3680776f8f0b



์œ„์— ์˜ฌ๋ ค๋†“์€ ๊ทธ๋ฆผ์€, ๊ทธ๋ฆผ์— ํ‘œ์‹œ๋œ๊ฒƒ์ฒ˜๋Ÿผ ๋‹ค๊ฐํ˜•์˜ ๊ผญ์ง“์ ๋“ค์ด ์žˆ์„๋•Œ, ํ•ด๋‹น ๊ผญ์ง“์ ๋“ค์„ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ๋Š” ํ•จ์ˆ˜์—์š”,


๊ทธ๋ฆผ์ฒ˜๋Ÿผ 5๊ฐœ์˜ ๊ผญ์ง“์ ์ด ์ฃผ์–ด์ ธ์žˆ๋‹ค๋ฉด, 1๋ฒˆ-2๋ฒˆ, 2๋ฒˆ-3๋ฒˆ, 3๋ฒˆ-4๋ฒˆ, 4๋ฒˆ-5๋ฒˆ, 5๋ฒˆ-1๋ฒˆ ์ด๋ ‡๊ฒŒ ์ด 5๊ฐœ์˜ ๋ชจ์„œ๋ฆฌ(๋ฒกํ„ฐ)๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜์š”


๊ทธ๋ฆฌ๊ณ  ์ด๋•Œ ์ค‘์š”ํ•œ๊ฑด, ๊ผญ์ง“์ ๋“ค์ด ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅ๋˜์•ผ ํ•ด์š”, ์‹œ๊ณ„๋ฐฉํ–ฅ์ด๋‚˜ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์€ ์ƒ๊ด€์—†์–ด์š”


์ด ํ•จ์ˆ˜๋Š” SAT์ถฉ๋Œ๊ฒ€์‚ฌ์—์„œ, ๋‹ค๊ฐํ˜•์˜ ๊ผญ์ง“์ ์˜ ์ขŒํ‘œ๋“ค๋กœ๋ถ€ํ„ฐ ๋„ํ˜•์„ ํˆฌ์˜์‹œํ‚ฌ ๋ฒกํ„ฐ๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์—์š”


ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก

def sort(p)

a = Array.new

i = 0

until p[i] == nil

if p[i+1] == nil

x,y = p[0][0]-p[i][0],p[0][1]-p[i][1]

else

x,y = p[i+1][0]-p[i][0],p[i+1][1]-p[i][1]

end

a.push([x,y])

i += 1

end

return a

end

ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก



์ด๊ฒŒ ์œ„์— ์˜ฌ๋ ค๋†“์€ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ์—์š”, ๋‹ค๊ฐํ˜•์˜ ๊ฐ ๊ผญ์ง“์ ๋“ค์„ [[x1,y1],[x2,y2],[x3,y3]] ํ˜•์‹์˜ ๋ฐฐ์—ด๋กœ ์ž…๋ ฅํ•˜๋ฉด ๋˜์š”, ์ด๋•Œ ๊ผญ์ง“์ ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅํ•ด์•ผํ•ด์š”, ์‹œ๊ณ„๋ฐฉํ–ฅ์ธ์ง€ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์ธ์ง€๋Š” ์ƒ๊ด€์—†์–ด์š”


๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ถœ๋ ฅ๊ฐ’๋„ ๋™์ผํ•œ ํ˜•์‹์˜ ๋ฐฐ์—ด๋กœ ๋‚˜์˜ค๊ฒŒ ๋˜์š” [[x2-x1,y2-y1],[x3-x2,y3-y2],[x1-x3,y1-y3]] ์ด๋Ÿฐ์‹์œผ๋กœ์š”



9. SAT์ถฉ๋Œ๊ฒ€์‚ฌ์˜ ์ž‘๋™๋ฐฉ์‹

78f08168f5dc3f8650bbd58b3684766aef



#1 ๊ณผ์ •์€ ์•ž์—์„œ ์ด์•ผ๊ธฐํ•œ sortํ•จ์ˆ˜๋กœ, ์ถฉ๋Œ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ณ ์ž ํ•˜๋Š” ๋‘ ๋‹ค๊ฐํ˜•์˜ ๋ชจ๋“  ๊ผญ์ง“์ ๋“ค๋กœ๋ถ€ํ„ฐ ๋ฒกํ„ฐ๋ฅผ ์–ป์–ด์š”,



78f08268f5dc3f8650bbd58b3685766f97



#2 ๊ณผ์ •์€ ๊ทธ์ค‘ ํ•œ๊ฐ€์ง€์˜ ๋ฒกํ„ฐ๋ฅผ ๊ณจ๋ผ์„œ, ํ•ด๋‹น ๋ฒกํ„ฐ์—์„œ ์ˆ˜์ง์ธ ๋ฒกํ„ฐ๋ฅผ ๊ตฌํ•˜๊ณ (๋ฒกํ„ฐ๊ฐ€ x,y๋ผ๋ฉด -y,x ๋˜๋Š” y,-x)


ํ•ด๋‹น ๋ฒกํ„ฐ๋ฅผ ์ •๊ทœํ™”ํ•ด์„œ ๋‹จ์œ„๋ฒกํ„ฐ๋กœ ๋งŒ๋“ค์–ด์š”, ๋‘ ๋ฒกํ„ฐ์˜ ๊ฐ ์š”์†Œ(x,y)๋ฅผ ํ•ด๋‹น ๋ฒกํ„ฐ์˜ ๊ธธ์ด๋กœ ๋‚˜๋ˆ ์ฃผ๋ฉด ๋˜์š”


78f08368f5dc3f8650bbd58b3684756b76



#3 ๊ณผ์ •์€ ์•ž์—์„œ ์ด์•ผ๊ธฐํ•œ sat1ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ


๊ทธ๋ ‡๊ฒŒ ์–ป์€ ๋‹จ์œ„๋ฒกํ„ฐ์—์„œ์˜ ๋‘ ๋‹ค๊ฐํ˜•์˜ ํˆฌ์˜์˜์—ญ์„ ๋น„๊ตํ•ด์š”,


๊ทธ๋ ‡๊ฒŒํ•ด์„œ ๋งŒ์•ฝ ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋‘ ๋‹ค๊ฐํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค๋ฉด,


๋‘ ๋‹ค๊ฐํ˜•์€ ์ถฉ๋Œํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  nil์„ ์ถœ๋ ฅํ•˜๊ณ  ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•ด์š”





์•„๋ž˜๋Š” ๋‘ ๋‹ค๊ฐํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ์• ์š”


78f08468f5dc3f8650bbd58b3684756e7a




#4 ๊ณผ์ •์€ ๋งŒ์•ฝ ๋‘ ๋‹ค๊ฐํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์นœ๋‹ค๋ฉด, ์ด๋•Œ์˜ ํˆฌ์˜์˜์—ญ์„ ์ฒดํฌํ•˜๋Š” ๋‹จ์œ„๋ฒกํ„ฐ์™€, ํ•ด๋‹น ๋‹จ์œ„๋ฒกํ„ฐ์—์„œ ๊ฒน์น˜๋Š” ํˆฌ์˜์˜์—ญ์˜ ๊ธธ์ด(๋ฐฉํ–ฅ์— ๋”ฐ๋ผ์„œ + ๋˜๋Š” -)๋ฅผ ์ €์žฅํ•ด๋†“๊ณ 


๋‹ค์Œ ๋ฒกํ„ฐ๋ฅผ ๊ณจ๋ผ์„œ #2 ๋ถ€ํ„ฐ ๋‹ค์‹œ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•ด์š”


๊ทธ๋ ‡๊ฒŒ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๋งŒ์•ฝ ๋‘ ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์น˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ถฉ๋Œํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  nil์„ ์ถœ๋ ฅํ•˜๊ณ  ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๊ณ 


๋‘ ๋„ํ˜•์˜ ํˆฌ์˜์˜์—ญ์ด ๊ฒน์นœ๋‹ค๋ฉด, ๊ธฐ์กด์— ์ €์žฅํ•ด๋†“์•˜๋˜ ํˆฌ์˜์˜์—ญ๊ณผ ๋น„๊ตํ•ด์„œ, ๋” ์ ˆ๋Œ€๊ฐ’์˜ ๊ธธ์ด๊ฐ€ ์งง์€์ชฝ์˜ ๋‹จ์œ„๋ฒกํ„ฐ์™€ ๊ฒน์น˜๋Š” ๊ธธ์ด๋ฅผ ์ €์žฅํ•ด์š”




๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณต์„ ๊ณ„์†ํ•œ๋‹ค๋ฉด


์ตœ์ข…์ ์œผ๋กœ๋Š” ๋‘ ๋„ํ˜•์ด ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š” ๋ฒกํ„ฐ๋ฅผ ์ฐพ์•„์„œ nil์„ ์ถœ๋ ฅํ•˜๊ณ  ํ•จ์ˆ˜๊ฐ€ ๋„์ค‘์— ์ข…๋ฃŒ๋˜๊ฒŒ ๋˜๊ณ 


๋งŒ์•ฝ ์ถฉ๋Œํ•œ๋‹ค๋ฉด ๋ชจ๋“  ๋ฒกํ„ฐ๋ฅผ ๋๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์„œ ์ œ์ผ ๊ฒน์น˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ์ž‘์€ ๋‹จ์œ„๋ฒกํ„ฐ์™€ ๊ทธ๋•Œ์˜ ๊ฒน์น˜๋Š” ๊ธธ์ด๋ฅผ ๊ตฌํ• ์ˆ˜ ์žˆ์–ด์š”


๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ๋‘ ๋„ํ˜•์ด ์ถฉ๋Œํ•ด์„œ ์ œ์ผ ๊ฒน์น˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ์ž‘์€ ๋‹จ์œ„๋ฒกํ„ฐ์™€ ๊ธธ์ด๋ฅผ ๊ตฌํ–ˆ๋‹ค๋ฉด,


๊ทธ ๋‹จ์œ„๋ฒกํ„ฐ์— ํ•ด๋‹น ๊ธธ์ด๋ฅผ ๊ณฑํ•ด์„œ ์ถœ๋ ฅํ•˜๊ณ  ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•ด์š”, ์ด๊ฒŒ ๋‘ ๋„ํ˜•์ด ์ถฉ๋Œํ–ˆ์„๋•Œ์˜ ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ์˜ MTV๊ฐ€ ๋˜๋Š”๊ฑฐ์—์š”




ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก

def sat_collision(p1,p2)

#1

a = Array.new

a = sort(p1)+sort(p2)

#2

d2 = nil

i = 0

until a[i] == nil

vx, vy = a[i][0], a[i][1]

vx, vy = -vy,vx

vx, vy = vx/((vx**2+vy**2)**0.5),vy/((vx**2+vy**2)**0.5)

#3

d = sat1(vx,vy,p1,p2)

if d == nil

return nil,nil

end

#4

if d2 == nil || (d).abs < (d2).abs

vx2, vy2, d2 = vx, vy, d

end

i += 1

end

return vx2*d2, vy2*d2

end

ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก




์ด๊ฒŒ ์œ„์˜ ํ•จ์ˆ˜์˜ ์ฝ”๋“œ์—์š”,


์ดˆ๋ก์ƒ‰ #์œผ๋กœ ์ฃผ์„์„ ํ‘œ์‹œํ•ด๋†“์€ ๋ถ€๋ถ„์ด ์œ„์—์„œ ์„ค๋ช…ํ•œ ํ•ด๋‹น ๊ณผ์ •์ด์—์š”


p1๊ณผ p2๋กœ ์ถฉ๋Œ์„ ๊ฒ€์‚ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋‘ ๋‹ค๊ฐํ˜•์˜ ๊ผญ์ง“์ ์˜ ์ขŒํ‘œ๋ฅผ [[x1,y1],[x2,y2],[x3,y3]] ํ˜•์‹์˜ ๋ฐฐ์—ด๋กœ ์ž…๋ ฅํ•˜๋ฉด ๋˜์š”,


๋‹จ ์ด๋•Œ ๊ผญ์ง“์ ๋“ค์€ ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅํ•ด์•ผ๋˜์š”, ์‹œ๊ณ„๋ฐฉํ–ฅ์ธ์ง€ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์ธ์ง€๋Š” ์ƒ๊ด€์—†์–ด์š”




๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ๋‘ ๋„ํ˜•์ด ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด nil์„ ์ถœ๋ ฅํ•˜๊ณ 


๋งŒ์•ฝ ์ถฉ๋Œํ•œ๋‹ค๋ฉด, p2๋กœ ์ž…๋ ฅํ•œ ๋‹ค๊ฐํ˜•์„ p1 ๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ด๊ธฐ ์œ„ํ•œ ์ตœ์†Œ์ด๋™๋ฒกํ„ฐ(MTV)๊ฐ€ ์ถœ๋ ฅ๋˜์š”








๊ทธ๋ฆฌ๊ณ  ์ด๊ฒŒ ์•ž์—์„œ ์„ค๋ช…ํ•œ SAT์ถฉ๋Œ๊ฒ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋ฐ€์–ด๋‚ด๋Š” ์˜ค๋ธŒ์ ํŠธ์—์š”


์˜์ƒ์˜ ์ฒซ๋ฒˆ์งธ์™€ ๋„ค๋ฒˆ์งธ๋Š”, ์˜ค๋ธŒ์ ํŠธ-ํ”Œ๋ ˆ์ด์–ด ์ˆœ์„œ๋กœ ์ถฉ๋Œ์ฒดํฌ๋ฅผ ํ•ด์„œ, ๋งŒ์•ฝ ํ”Œ๋ ˆ์ด์–ด์™€ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ถฉ๋Œํ•œ๋‹ค๋ฉด ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์˜ค๋ธŒ์ ํŠธ ๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ด๊ธฐ ์œ„ํ•œ MTV๋ฅผ ๊ตฌํ•œ๋‹ค์Œ, ํ”Œ๋ ˆ์ด์–ด๋ฅผ ํ•ด๋‹น ๋ฒกํ„ฐ๋งŒํผ ๋ฐ€์–ด๋‚ด๋Š” ๋ฐฉ์‹์ด์—์š”


๊ทธ๋ฆฌ๊ณ  ๋‘๋ฒˆ์งธ์™€ ์„ธ๋ฒˆ์งธ๋Š” ํ”Œ๋ ˆ์ด์–ด-์˜ค๋ธŒ์ ํŠธ ์ˆœ์„œ๋กœ ์ถฉ๋Œ์ฒดํฌ๋ฅผ ํ•ด์„œ, ๋งŒ์•ฝ ์ถฉ๋Œํ•œ๋‹ค๋ฉด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ”Œ๋ ˆ์ด์–ด ๋ฐ–์œผ๋กœ ๋ฐ€์–ด๋‚ด๊ธฐ ์œ„ํ•œ MTV๋ฅผ ๊ตฌํ•˜๊ณ  ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ•ด๋‹น ๋ฒกํ„ฐ๋งŒํผ ๋ฐ€์–ด๋‚ด๋Š” ๋ฐฉ์‹์ด์—์š”




์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ถ„๋ฆฌ์ถ•(SAT)์ถฉ๋Œ๊ฒ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋ฐ€์–ด๋‚ด๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ์–ด์š”