bool isOutside = (objRightย < areaLeftย ย
ย ย ย ย ย ย ย ย || objLeftย ย > areaRightย
ย ย ย ย ย ย ย ย || objTopย ย < areaBottomย
ย ย ย ย ย ย ย ย || objBottom > areaTop);ย ย
bool isOverlap = !isOutside;
if (isOverlap)
{
}
๋ณ์์ ์ค๋ธ์ ํธ์ ์ขํ๋ค์ด ๋ค์ด์์
๊ฒฐ๊ณผ์ ์ผ๋ก๋ ์์ญ์์ ๋ค๋ฅธ ์ค๋ธ์ ํธ๊ฐ ์ผ๋ถ๋ผ๋ ๋ค์ด์๋์ง ์ฒดํฌํ๋๊ฑฐ์
๊ทผ๋ฐ ๋๋ค์ ์ ์กฐ๊ฑด๋ฌธ ์ฝ๊ฒ ํด์๋จ?ย
๊ธ๋ฐฉ ์ต์ํด์ง๊ฑฐ์
๊ทธ๋ด๊น
์๋ ์กฐ๊ฑด ๋ง์์ง๋ฉด ์ข ํท๊ฐ๋ ค. ์กฐ๊ฑด์์ด 4๊ฐ ์ด์ ๋๋ค ์ถ์ผ๋ฉด ์ฃผ์ ๋ฌ์๋์ผ๋ฉด ์ข ํธํด
์กฐ๊ฑด์์ด ๋๋ฌด ๊ธธ์ด์ง๋ฉด ๊ทธ ์กฐ๊ฑด์ ์ฒดํฌํ๋ bool ๋ฐํ ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด๋ ๋๊ณ , isOverlap์ ํ์ ์๋ ๊ฑฐ ์๋ ?
์ ๋ ์ด๋ ๊ฒ ํจ
์์ฒญ ์ฝ๊ฒ ๋ง๋ ํธ์ธ๊ฒ ๊ฐ์. ์๋ฌด์๊ฐ์์ด ๋ด๋ ์ค๋ธ์ ํธ 2๊ฐ ๊ฒน์ณค์ ๋๋ฅผ ์ ์ ์์์. ๋๋ฒ๊น ํ๋ ค๊ณ ๋ณด๋๊ฑฐ๋ง ์๋๋ฉด ์๊ฐ์์ด ์ฝ์๋ฏ?
๊ฒจ์ฐ ์ดํดํจ ๋ด๊ฐ ๊ฐ๋ฐ์ด๋ ์๋ง๊ธดํ๋ฏ ์ ๊ฑฐ ๋ง๋ค๋ผ๊ณ ํ๋ฉด ๋ชป๋ง๋ค๊ฒ ๋ค
๊ธฐ์ด๋ถํฐ ์ฒ์ฒํ ํด์ผ์ง abc๋ ์๋ฐฐ์ฐ๊ณ how are you๋ฅผ ๋ชป์ฝ์ด์ ์์ด๋ฅผ ํฌ๊ธฐํ๋ ค๋๊ฑด ์๋์ผ?
๋ด๊ฐ ์ง ์ฝ๋๋ฉด ๊ณผ๊ฑฐ์ ๋๋ฅผ ๋ฏฟ๊ณ ์ฐ๋ฉด ๋จ ใ ใ ... - dc App
๊ทธ๋ฅ if(isOutside) { } else { ๋ก์ง } ์ด๋ ๊ฒ ํ์ . ๋ถ์ ๋ฌธ์ ๋์์ ์ฒ๋ฆฌํ๊ธฐ ํ๋ค์ดํจ. ์ด๋ฐ๊ฑฐ ๋ชจ์ด๋ฉด ๊ฐ๋น ์๋จ.
bool isLeftOver = objLeft > areaRight bool isRightOver = ... bool isTopOver = ... bool isBottomOver = ... bool isOutside = isLeftOver && isRightOver && isTopOver && isBottomOver; bool isOverlap = !isOutside; ์ ์ด๋ฐ์์ผ๋ก ์์ฐ์ด์ ์ต๋ํ ๊ฐ๊น๊ฒ ํํํ๋ ค๊ณ ํจ
์ค - dc App
enum์ ์ฐ๋๊ฒ ์ด๋!
flag enum์ผ๋ก
C#์ด๋ผ๋ฉด ๋ ์ค๋ธ์ ํธ ์ค์ ์ฐจ์ด๋ ํฌ๊ธฐ ์ฐจ์ด ์ด์ฉํด์ isOutside = xDelta is < -xSizeDelta or > xSizeDelta || yDelta is < -ySizeDelta or > ySizeDelta ๋ก ์กฐ๊ธ ๋ ์์ฐ์ด์ฒ๋ผ ์ฝํ๊ฒ ํ ์๋ ์๊ฒ ๋๋ฐ, ์ฐ์ฐ๋ ๋๊ณ ๋ณ์๋ ๋ ์จ์ผํ๊ณ , ๋ ์ด๊ฒ ๋ ์ ์ฝํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ ใ ใ ...
์ ํํ ์ด๋ค ์ํฉ์ธ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ง๊ธ ์ ์ฝ๋๋ง ๋ดค์๋๋ ๊ฒฐ๊ตญ ์์ญ ๋ฐ์ผ๋ก ๋ฒ์ด๋ฌ๋์ง ์๋ฒ์ด๋ฌ๋์ง ์๋๊ฐ? ๊ฑฐ๊ธฐ๋ค left right top bottom ์ธ๊ฑฐ๋ณด๋ ์ง์ฌ๊ฐํ ์์ญ์ธ๊ฒ ๊ฐ์๋ฐ ๊ทธ๋ผ ์ขํํ๋ฉด์ ๋ค์ด์ค๋์ง ์๋์ง๋ฉด ์กฐ๊ฑด๋ฌธ์์ ์ ๋ ๊ฒ 4๋ฒ๋ค ๋น๊ตํ ํ์์์ด 2๋ฒ์ด๋ฉด ๋๋ ํ ๋ฐ
None = 0, Left = 1 << 0, Right = 1 << 1,... ์ด๋ฐ์์ผ๋ก flag enum ๋ง๋ค๊ณ if (objRight < areaLeft) state |= OverlapState.Left; ์ด๋ฐ์์ผ๋ก ๋ชจ๋ ๋ฐฉํฅ ๋ง์คํน ํด์ฃผ๊ณ bool isOverlap = (state == OverlapState.None); ์ด๋ ๊ฒ ํ๋ณ ๋ญ ๊ธ ๋ฐฉ์๋๋ก ํด๋ ์๊ด ์๊ธด ํ๋ฐ ์ ์ฒ๋ผ ํ๋ฉด ์ถํ state๋ง ๋๊ฒจ์ฃผ๋ฉด ํน์ ๋ฐฉํฅ๋ง ํ์ธ ํ๊ณ ์ถ์ ๋ bool isRight = (state & OverlapState.Right) != 0; // ํน์ ๋ฐฉํฅ ๋นํธ๊ฒ์ฌ๋ก ํ์ธ ๊ฐ๋ฅ