Bresenham - KimTaebin-ai/study_posts GitHub Wiki

1. ์ง์„  ๋ฐฉ์ •์‹ ์ดํ•ดํ•˜๊ธฐ

์ง์„ ์€ ๋‘ ์ ์„ ์—ฐ๊ฒฐํ•œ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‘ ์  (0,0)๊ณผ (5,3)์„ ์ž‡๋Š” ์„ ์„ ์ƒ๊ฐํ•ด๋ณด์ž.

์ง์„  ๋ฐฉ์ •์‹: y = mx + b

  • y: y ์ขŒํ‘œ, ์ฆ‰ ์„ธ๋กœ ์œ„์น˜์ด๋‹ค.
  • x: x ์ขŒํ‘œ, ์ฆ‰ ๊ฐ€๋กœ ์œ„์น˜์ด๋‹ค.
  • m: ๊ธฐ์šธ๊ธฐ๋ผ๊ณ  ํ•˜๋Š” ๊ฐ’์ธ๋ฐ, ์ง์„ ์ด ์–ผ๋งˆ๋‚˜ ๊ฐ€ํŒŒ๋ฅธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • image
    • ์˜ˆ๋ฅผ ๋“ค์–ด, (0,0)์—์„œ (5,3)์œผ๋กœ ๊ฐ€๋Š” ๊ฒฝ์šฐ ์„ธ๋กœ ๋ณ€ํ™”๋Ÿ‰์€ 3, ๊ฐ€๋กœ ๋ณ€ํ™”๋Ÿ‰์€ 5์ด๋ฏ€๋กœ, ( m = \frac{3}{5} ).
  • b: y ์ ˆํŽธ์œผ๋กœ, x=0์ผ ๋•Œ y์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹œ์ž‘์ ์ด (0, 0)์ผ ๋•Œ๋Š” b = 0์ž…๋‹ˆ๋‹ค.

2. ์ง์„ ์„ ๊ทธ๋ฆด ๋•Œ ๋ฌธ์ œ์ 

์ปดํ“จํ„ฐ ํ™”๋ฉด์— ์„ ์„ ๊ทธ๋ฆด ๋•Œ๋Š” ํ”ฝ์…€ ๋‹จ์œ„๋กœ ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์•„๋ฌด๋ฆฌ ์ž‘์€ ์ด๋™์ด๋ผ๋„ ์ขŒํ‘œ๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ปดํ“จํ„ฐ๋Š” ์„ ์„ ํ•œ ํ”ฝ์…€์”ฉ ์˜ฎ๊ฒจ๊ฐ€๋ฉฐ ๊ทธ๋ ค์•ผ ํ•˜๋ฏ€๋กœ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ์šธ๊ธฐ๊ฐ€ ( m = \frac{3}{5} )์ธ ๊ฒฝ์šฐ, x๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค y๋Š” ์ •ํ™•ํžˆ 0.6์”ฉ ์ฆ๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์ปดํ“จํ„ฐ๋Š” 0.6ํ”ฝ์…€์„ ๊ทธ๋ฆด ์ˆ˜ ์—†๊ณ , y๋Š” ๋ฐ˜๋“œ์‹œ ์ •์ˆ˜ ๊ฐ’์œผ๋กœ๋งŒ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ •์ˆ˜๋กœ y ๊ฐ’์„ ๊ทผ์‚ฌํ•ด์„œ ํ•œ ํ”ฝ์…€์”ฉ ์˜ฎ๊ฒจ๊ฐ€๋ฉฐ ๊ทธ๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

3. ๋ธŒ๋ ˆ์  ํ—˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

๋ธŒ๋ ˆ์  ํ—˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ค ํ”ฝ์…€์„ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜์—ฌ ์ง์„ ์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. x ๊ฐ’์ด ์ฆ๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค y๊ฐ€ ์–ผ๋งˆ๋งŒํผ ์ฆ๊ฐ€ํ• ์ง€ ์ž˜ ๊ณ„์‚ฐํ•ด์„œ, ์ •์ˆ˜ ์ขŒํ‘œ๋กœ ๊ทผ์‚ฌํ•˜๋ฉด์„œ ์ง์„ ์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊น๊ฒŒ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด

  1. ์˜ค์ฐจ ๊ณ„์‚ฐ:

    • ๋ธŒ๋ ˆ์  ํ—˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” x ์ขŒํ‘œ๋ฅผ ํ•œ ํ”ฝ์…€์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ y์˜ ์ด๋™์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์ดˆ๊ธฐ ์˜ค์ฐจ ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ , x๊ฐ€ ์›€์ง์ผ ๋•Œ๋งˆ๋‹ค ์ด ์˜ค์ฐจ๋ฅผ ๋”ํ•˜๋ฉด์„œ ์–ด๋Š ๋ฐฉํ–ฅ์˜ ํ”ฝ์…€๋กœ ๊ฐˆ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ์˜ค์ฐจ ๊ฐ’ ์—…๋ฐ์ดํŠธ:

    • x๊ฐ€ 1 ์ฆ๊ฐ€ํ•  ๋•Œ, y๊ฐ€ ์–ผ๋งˆ๋‚˜ ์›€์ง์—ฌ์•ผ ์ง์„ ์— ๊ฐ€๊นŒ์šด์ง€๋ฅผ ์˜ค์ฐจ ๊ฐ’(error)์œผ๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ค์ฐจ๊ฐ€ ํŠน์ • ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด y๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ์•„๋‹ˆ๋ฉด ๊ทธ๋Œ€๋กœ y๋Š” ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ๊ฐ€๋Šฅํ•œ ํ•œ ์ง์„ ์— ๊ฐ€๊นŒ์šด ํ”ฝ์…€์„ ์„ ํƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

4. ๋ธŒ๋ ˆ์  ํ—˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์„ ์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•

์˜ˆ๋ฅผ ๋“ค์–ด, ์‹œ์ž‘์ ์ด (0,0)์ด๊ณ  ๋์ ์ด (5,3)์ธ ์ง์„ ์„ ๊ทธ๋ ค๋ณผ๊ฒŒ์š”.

  1. ์ดˆ๊ธฐ ์„ค์ •:

    • x = 0, y = 0, dx = 5 (๊ฐ€๋กœ ์ด๋™๋Ÿ‰), dy = 3 (์„ธ๋กœ ์ด๋™๋Ÿ‰).
    • ์˜ค์ฐจ ๊ฐ’ error = dx - dy = 5 - 3 = 2.
  2. ์ขŒํ‘œ๋ฅผ ํ•œ ํ”ฝ์…€์”ฉ ์ด๋™ํ•˜๋ฉด์„œ ์  ์ฐ๊ธฐ:

    • x๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ, error๋ฅผ ๊ณ„์‚ฐํ•ด๊ฐ€๋ฉด์„œ y์˜ ์›€์ง์ž„์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • error๊ฐ€ 0๋ณด๋‹ค ํฌ๋ฉด y๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ , error ๊ฐ’์—์„œ dy๋ฅผ ๋นผ์ค๋‹ˆ๋‹ค.
    • error๊ฐ€ 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด x๋งŒ ์ด๋™ํ•˜๊ณ , error์— dx๋ฅผ ๋”ํ•ด์ค๋‹ˆ๋‹ค.
  3. ๊ณผ์ • ๋ฐ˜๋ณต:

    • ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค (x, y) ์ขŒํ‘œ๋ฅผ ๊ทธ๋ฆผ์— ์ฐ์–ด ์„ ์„ ์ด์–ด๊ฐ‘๋‹ˆ๋‹ค.

5. ๋ธŒ๋ ˆ์  ํ—˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜ˆ์‹œ

  • ์‹œ์ž‘์ : (0,0)
  • ๋์ : (5,3)
  • error = 2

image

  • ๊ฒฐ๊ณผ: ์ ๋“ค์„ ์ด์–ด (0,0), (1,1), (2,1), (3,2), (4,2), (5,3)์— ์ ์ด ์ฐํžˆ๋ฉฐ, (0,0)์—์„œ (5,3)์œผ๋กœ ์ด์–ด์ง€๋Š” ์„ ์ด ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ธŒ๋ ˆ์  ํ—˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ error ๊ฐ’์œผ๋กœ x, y ์ขŒํ‘œ์˜ ๋ณ€ํ™”๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ ์ง์„ ์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.