Search
๐Ÿ’พ

2 : Geometric Objects

course
last review
mastery
ranger
progress
done
date
2023/03/14
4 more properties
Previous chapter
2023/03/16 - ํด๋ฆฌ๊ณค ๋ Œ๋”๋ง : Flood Fill ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ •๋ฆฌํ•ด์•ผํ•จ.

Main QUEST

๋ฌด์—‡์„ ๊ทธ๋ฆด ๊ฒƒ์ธ๊ฐ€?
Q1 : ๊ทธ๋ ค์•ผ ํ•˜๋Š” ๊ฒƒ์€ Shape[ํ˜•์ƒ]์ธ๋ฐ, ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€?
Q2 : ์ด๋ ‡๊ฒŒ ํ‘œํ˜„๋œ Shape๋ฅผ ๋ž˜์Šคํ„ฐ ๋””๋ฐ”์ด์Šค๋กœ ์–ด๋–ป๊ฒŒ ๊ทธ๋ฆด ๊ฒƒ์ธ๊ฐ€?
โ†’ ํ”ฝ์…€์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š”๊ฐ€?

Introduction

๋ Œ๋”๋ง์ด๋ž€ ๊ณ„์‚ฐ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ์„ ํ”ฝ์…€๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•
๊ทธ๋ฆฌ๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ์˜ ๋ฌด์—‡์„ ์•Œ์•„์•ผ ํ• ๊นŒ?
โ€ข
๋ชจ์–‘ : Shapes
โ€ข
์œ„์น˜ : Locations
โ€ข
๋ชจ์Šต : Appearances
โ€ข
์งˆ๊ฐ : Textures
๋“ฑ๋“ฑโ€ฆ
์ด ์ค‘ Shapes์— ๋Œ€ํ•ด์„œ ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž.

Graphic Primitives

์šฐ๋ฆฌ๊ฐ€ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ณต๊ฐ„์„ ๋ชจ๋‘ ๋ถ„ํ•ดํ–ˆ์„ ๋•Œ ๋‚จ๋Š” ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์š”์†Œ
โ†’ ์ •์ (Vertex)
Shape๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ˆ˜ํ•™์  ๋ชจ๋ธ(Computational Model)

Point & Vector

โ€ข
์œ„์น˜
์ ์ด ๊ฐ€์ง„ ์œ ์ผํ•œ ์„ฑ์งˆ์€ ์ ์˜ ์œ„์น˜. ์ˆ˜ํ•™์  ์ ์€ ํฌ๊ธฐ๋‚˜ ํ˜•์ƒ์„ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค.
์ ์„ ํ‘œํ˜„ํ•  ๋•Œ ํ•„์š”ํ•œ Attributes๋Š” Position ๋ฟ์ด๋‹ค.
๋‹ค๋งŒ, ์ ๊ณผ ์  ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” Vector๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
โ€ข
Vector๋Š” ๊ณต๊ฐ„ ๋‚ด์—์„œ ๊ณ ์ •๋œ ์œ„์น˜๋ฅผ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.
์„ธ ๋ฒกํ„ฐ๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋ฒกํ„ฐ์ด๋‹ค.
๋”ฐ๋ผ์„œ ๊ทธ๋ž˜ํ”ฝ์Šค์—์„œ๋Š” Position์™€ Vector๋ฅผ ํ‘œํ˜„ํ•ด์„œ ์ ๋“ค๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
โ€ข
๋‘ ์ ์€ ๋ฐฉํ–ฅ์„ฑ ์„ ๋ถ„directed line segment์œผ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.

Attributes of Vectors

โ€ข
์ˆ˜๋ฏธ์—ฐ๊ฒฐ๊ทœ์น™(head-to tail rule)
โ—ฆ
๋ฒกํ„ฐ A์˜ ํ—ค๋“œ๋ฅผ ๋ฒกํ„ฐC์˜ ํ…Œ์ผ์— ์—ฐ๊ฒฐํ•ด ์ƒˆ๋กœ์šด ๋ฒกํ„ฐ D๊ฐ€ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
โ€ข
์Šค์นผ๋ผ ๊ณฑ
โ—ฆ
๊ฐ™์€ ๋ฐฉํ–ฅ์ด์ง€๋งŒ B์˜ ๊ธธ์ด๊ฐ€ A์˜ 2๋ฐฐ์ด๋ฏ€๋กœ, B=2AB = 2A๋ถ€๋ถˆ
์˜์™ธ๋กœ Point๊ฐ€ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ
โ€ข
๋‘ ์ ์„ ์ด์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ์ ์„ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ
โ€ข
์ x์Šค์นผ๋ผ โ†’ ์ƒˆ๋กœ์šด ์ ์„ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ
โ‡’์ƒˆ๋กœ์šด ํฌ์ง€์…˜์˜ ์ ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์  + ๋ฒกํ„ฐ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค!
์ด ์—ฐ์‚ฐ์„ ์ -๋ฒกํ„ฐ ๋ง์…ˆ์ด๋ผ๊ณ  ํ•˜๋ฉฐ, Output์€ ์ƒˆ๋กœ์šด ์ ์ด๋‹ค.
P=Qย +ย vP = Q\space + \space v
๋‹ค๋ฅธ ๊ด€์ ์—์„œ ๋ณด๋ฉด (New)Point = (Previous)Point + (New)Vector ์ด๋ฏ€๋กœ,
v=Pโˆ’Qv = P - Q
๋ฒกํ„ฐ๋Š” ๋‘ ์ ์˜ ๋บ„์…ˆ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

Coordinate-Free Geometry

์ ์€ ์ขŒํ‘œ๊ณ„์™€ ์ƒ๊ด€์—†์ด ๊ณต๊ฐ„์ƒ์— ์กด์žฌํ•œ๋‹ค. ์ ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์ขŒํ‘œ๊ณ„๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค!
์ขŒํ‘œ์ถ•์„ ์ œ๊ฑฐํ–ˆ์„๋•Œ, ์ ์ด ๋”์ด์ƒ ์–ด๋””์— ์žˆ๋Š”์ง€ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์—†์Œ.
์ž„์˜์˜ ์œ„์น˜์™€ ๋ฐฉํ–ฅ์„ ๊ฐ–๋Š” ์ขŒํ‘œ์ถ•์— ์ƒ๋Œ€์ ์œผ๋กœ ์ง€์ •๋œ ๊ฒƒ์ด๋ฉฐ, ๋„ํ˜•์˜ ๊ธฐํ•˜ํ•™์  ์ •์˜๋ฅผ ์„ค๋ช…ํ•˜๋Š”๋ฐ ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ.
์ค‘์š”ํ•œ ๊ฑด, ๊ทผ๋ณธ์ ์ธ ๊ธฐํ•˜ํ•™์  ๊ด€๊ณ„๋Š” ์œ ์ง€๋œ๋‹ค๋Š” ์ ์ด๋‹ค.
์ •์‚ฌ๊ฐํ˜•์€ ์—ฌ์ „ํžˆ ์„ ๋ถ„๋ผ๋ฆฌ ์ง๊ตํ•˜๋ฉฐ, ์ ๋“ค๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋„ ๊ฐ™๋‹ค.

The Mathematical View : Affine Spaces

์•ž์„œ ์ ๊ณผ ๋ฒกํ„ฐ์™€์˜ ๊ด€๊ณ„๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋ƒˆ์—ˆ๋‹ค.
Aร—Vโ†’A,ย (a,v)โ†’a+vA \times V \rightarrow A, \space(a,v) \rightarrow a+v
a๊ฐ€ ์ ์ด๋ผ๋ฉด v์— ์˜ํ•ด ์šด๋ฐ˜๋˜๋Š”๋ฐ, ์šด๋ฐ˜๋œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์‹œ ์ ์ด ๋˜๋Š” ๊ฒƒ์ด ์•„ํ•€ ๋ณ€ํ™˜์—์„œ์˜ ๋ฒกํ„ฐ์™€ ์ ์˜ ๊ด€๊ณ„์ด๋‹ค.
1.
์  P์— ์˜๋ฒกํ„ฐ๋ฅผ ๋”ํ•˜๋ฉด ์  P๊ฐ€ ๋œ๋‹ค. ์ ์— ์•„๋ฌด๋Ÿฐ ํž˜๋„ ์•ˆ ๊ฐ€ํ•ด์ง„๋‹ค๋ฉด, ์ ์€ ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค.
a.
P+0โƒ—โ†’PP+\vec0 \rightarrow P
2.
์•„ํ•€๊ณต๊ฐ„์€ ๊ฒฐํ•ฉ๋ฒ•์น™์ด ์„ฑ๋ฆฝ๋œ๋‹ค.
a.
(a+v)+w=a+(v+w)(a+v)+w = a +(v+w)
3.
vโ†’a+vย isย bijectionv \rightarrow a + v \space is \space bijection
a.
bijection์ด๋ž€ ๋‘ ์ง‘ํ•ฉ์—์„œ ๊ฐ ์›์†Œ๋“ค์ด ์ •ํ™•ํžˆ 1:1๋กœ ์ง์œผ๋กœ ๋งค์นญ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
b.
๋ฐ”๊พธ์–ด ๋งํ•˜๋ฉด ์  a์— ์–ด๋–ค ๋ฒกํ„ฐ๋ฅผ ๋”ํ•œ ๊ฒฐ๊ณผ๋กœ ์  b๊ฐ€ ๋‚˜์™”๋‹ค๋Š”๋ฐ ์ด๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๋ฒกํ„ฐ v๋Š” ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
c.
๋ฒกํ„ฐ๋Š” ์„ ํ˜•์„ฑ์„ ๊ฐ€์ง€๋ฏ€๋กœ ๊ทธ ๋ฒกํ„ฐ์˜ ์ •์ฒด๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ ๊ฐ„์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๋œ๋‹ค.

The relation between Vector Space and Affine Space

์•„ํ•€ ๊ณต๊ฐ„์—์„œ์˜ ์ ์ด๋ž€ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์›์ ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. -์ด๋“์šฐโ€”
๋ฒกํ„ฐ๋ฅผ ์›์ ์—์„œ ๋ป—์–ด๋‚˜๊ฐ€๋Š” ํ™”์‚ดํ‘œ๋กœ ํ‘œ์‹œํ•จ. โ†’ ๋ฒกํ„ฐ๋ž€ ์›์ (Origin)์— ์žˆ๋Š” ์–ด๋–ค ๋ฌผ์ฒด๋ฅผ ์›€์ง์ด๋Š” ๋ฌดํ˜•์˜ ํž˜์ธ ๊ฒƒ์ด๋‹ค.
์ด๋™ ๋ณ€ํ™˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋ชจ๋“  ๋ฒกํ„ฐ ๊ณต๊ฐ„์€ ์›์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ณ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ ์˜ ๊ฐœ๋…์— ํฐ ์˜๋ฏธ๋ฅผ ๋‘˜ ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋™๋ณ€ํ™˜์ด ๋“ฑ์žฅํ•˜๋ฉฐ ์›์ ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
์ด๋™๋ณ€ํ™˜์˜ ๊ฒฐ๊ณผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฒกํ„ฐ๊ณต๊ฐ„์€ (0,0)์ด ์•„๋‹Œ (x,y)์œ„์น˜์—์„œ ์‹œ์ž‘ํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์ด๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๋™ ๋ณ€ํ™˜์œผ๋กœ ์ƒ๊ธฐ๋Š” ์ƒˆ๋กœ์šด ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์›์ ์„ ์•„ํ•€ ๊ณต๊ฐ„์—์„œ๋Š” ์ ์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ฆ‰, ์•„ํ•€ ๊ณต๊ฐ„์—์„œ๋Š” ์›์ ์ด ์—†์œผ๋ฏ€๋กœ ์ ๊ณผ ์ ์„ ๋”ํ•  ์ˆ˜ ์—†๋‹ค.

The Computer Science View : ADT(Abstract Data Type)

์ˆ˜ํ•™์ ์ธ ๊ด€์ ์—์„œ Scalar, Point, Vector๋Š” ๊ณต๋ฆฌ์— ๋”ฐ๋ผ ๊ฒฐํ•ฉ๋˜๋Š” ์ง‘ํ•ฉ์˜ ์›์†Œ๋กœ ๊ฐ„์ฃผ๋˜์–ด์™”์œผ๋‚˜, ์ปดํ“จํ„ฐ๊ณผํ•™์˜ ์ธก๋ฉด์—์„œ๋Š” ์ถ”์ƒ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณด๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค.
ADT๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์ด ์—ฐ์‚ฐ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„๋˜๊ณ  ๊ตฌํ˜„๋˜๋Š”์ง€ ๋…๋ฆฝ์ ์œผ๋กœ ์ •์˜๋œ๋‹ค.
vector u, v; point p, q; scalar a,b;
C++
๋ณต์‚ฌ

Affine Combination & Line

์•ž์„œ ์•„ํ•€๊ณต๊ฐ„์—์„œ ์ ๊ณผ ์ ์€ ๋”ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์„ค๋ช…ํ–ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ ๊ณผ ์ ์„ ๊ทธ๋Œ€๋กœ ๋”ํ•˜์ง€ ์•Š๊ณ  ์„ ํ˜• ๊ฒฐํ•ฉ์˜ ํ˜•ํƒœ๋กœ ์ ์— ์Šค์นผ๋ผ ๊ณ„์ˆ˜๋ฅผ ๊ณฑํ•ด ๋”ํ•œ๋‹ค๋ฉด ํŠน์ • ์กฐ๊ฑด์—์„œ ์ƒˆ๋กœ์šด ์ ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
2์ฐจ์› ํ‰๋ฉด์ƒ์˜ ์ž„์˜์˜ ๋‘ ์  P1(x1,y1,1)P_1(x_1,y_1,1)๊ณผ P2(x2,y2,1)P_2(x_2,y_2,1)์— ๊ฐ๊ฐ ์Šค์นผ๋ผ a,b๋ฅผ ๊ณฑํ•œ ์„ ํ˜• ๊ฒฐํ•ฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
aโ‹…P1+bโ‹…P2=(ax1+bx2,ay1+by2,a+b)a \cdot P_1 + b \cdot P_2 = (ax_1 + bx_2,ay_1+by_2, a+b)
์ด๋•Œ a+b๊ฐ€ 1์ด ๋œ๋‹ค๋ฉด, ์ ๊ณผ ์ ์„ ๊ฒฐํ•ฉํ•ด ์ƒˆ๋กœ์šด ์ ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค!!
๋™์ผํ•œ ์›๋ฆฌ๋กœ ์„ธ ์ ์— ๋Œ€ํ•ด์„œ๋„ ๋‹ค์Œ ์ˆ˜์‹๊ณผ ๊ฐ™์ด ๋ชจ๋“  ์Šค์นผ๋ผ์˜ sum์ด 1์ด๋ฉด ์ ์˜ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
aโ‹…P1+bโ‹…P2+cโ‹…P3=P4(ax1+bx2+cx3,ย ay1+by2+cy3,ย a+b+c)a \cdot P_1 + b \cdot P_2 + c \cdot P_3 = P_4(ax_1 + bx_2 + cx_3,\space ay_1+by_2+cy_3,\space a+b+c)
์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ ์„ ๊ฒฐํ•ฉํ•ด ์ƒˆ๋กœ์šด ์ ์„ ์ƒ์„ฑํ•˜๋Š” ์ˆ˜์‹์„ Affine combination์ด๋ผ๊ณ  ํ•œ๋‹ค.
๊ฐ ์ PiP_i์™€ ๊ฐ ์ ์— ๋Œ€์‘๋˜๋Š” ์Šค์นผ๋ผ ๊ฐ’ cic_i์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋žตํ™”ํ•˜๋ฉฐ ๋งˆ์นœ๋‹ค.
โˆ‘i=1nciโ‹…Piย ย (s.t.ย โˆ‘inci=1)\sum^{n}_{i=1}{c_i \cdot P_i} \space\space(s.t.\space \sum^n_ic_i=1)
์ฐธ๊ณ ๋กœ ์œ„ ์‹์œผ๋กœ ์ธํ•ด ๋‚˜ํƒ€๋‚˜๋Š” ์˜์—ญ์„ Convex Hull์ด๋ผ๊ณ  ํ•œ๋‹ค.

Combination of Affine Combination

์•„ํ•€ ๊ณต๊ฐ„์˜ ๋‘ ์ ์— ๋Œ€์‘๋˜๋Š” ์Šค์นผ๋ผ ๊ฐ’ a,b์— ๋Œ€ํ•ด
a+b=1a+b=1
์„ ๋งŒ์กฑํ•ด์•ผ ํ–ˆ๋Š”๋ฐ, ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์–ธ์ œ๋‚˜ ์ ์˜ ์ƒ์„ฑ์„ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
aโ‹…P1+(1โˆ’a)โ‹…P2=Pโ€ฒa\cdot P_1 + (1-a)\cdot P_2 = P'

a = 1์ธ ๊ฒฝ์šฐ

1โ‹…P1+0โ‹…P2=Pโ€ฒ1 \cdot P_1 + 0\cdot P_2 = P'

a = 0์ธ ๊ฒฝ์šฐ

0โ‹…P1+1โ‹…P2=Pโ€ฒ0\cdot P_1 + 1\cdot P_2 = P'

a = 0.5์ธ๊ฒฝ์šฐ

12โ‹…(x1,y1,1)+12โ‹…(x2,y2,1)=(x1+x22,y1+y22,1)\cfrac{1}{2}\cdot(x_1,y_1,1)+\cfrac{1}{2}\cdot(x_2,y_2,1) = (\cfrac{x_1+x_2}{2},\cfrac{y_1+y_2}{2},1)
P1์™€ PO2์˜ ์ค‘์ ์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.
์ฆ‰, P์˜ ์•„ํ•€๊ฒฐํ•ฉ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ ์„ ๋ชจ๋‘ ๋ชจ์œผ๋ฉด P1,P2๋ฅผ ์ง€๋‚˜๋Š” ๋ฌดํ•œํ•œ ๊ธด ์„ ์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.
์ฆ‰ ๋ฏธ์ง€์ˆ˜ x์— ๋Œ€ํ•œ ์ง์„ ์˜ ๋ฐฉ์ •์‹ L(x)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๋‹ค.
L(x)=xโ‹…P+(1โˆ’x)QL(x) = x\cdot P+(1-x)Q

Plane

์•„ํ•€ ๊ณต๊ฐ„์—์„œ ํ‰๋ฉด์€ ๋งค๊ฐœ๋ณ€์ˆ˜ํ˜• ์ง์„ ์„ ํ™•์žฅํ•˜์—ฌ ์ •์˜๊ฐ€๋Šฅํ•˜๋‹ค.
์„ธ ์  P, Q, R์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.
P์™€ Q๋ฅผ ์ž‡๋Š” ์„ ๋ถ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
S(ฮฑ)=ฮฑP+(1โˆ’ฮฑ)Qย ย (0โ‰คฮฑโ‰ค1)S(\alpha) = \alpha P+(1-\alpha)Q \space \space(0\leq \alpha \leq 1)
์„ ๋ถ„ ์œ„์˜ ์  S๋ฅผ ์„ ํƒํ•˜๊ณ , R์—์„œ S๊นŒ์ง€์˜ ์„ ๋ถ„์„ ํ˜•์„ฑํ•ด๋ณด์ž.
T(ฮฒ)=ฮฒS+(1โˆ’ฮฒ)Rย ย (0โ‰คฮฒโ‰ค1)T(\beta) = \beta S+(1-\beta)R \space \space(0\leq \beta \leq 1)
์ด ์ ๋“ค์€ ฮฑ,ฮฒ\alpha,\beta์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋ฉฐ, P,Q,R์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ํ‰๋ฉด์„ ํ˜•์„ฑํ•œ๋‹ค.
T(ฮฑ,ฮฒ)=ฮฒ[ฮฑP+(1โˆ’ฮฑ)Q]+(1โˆ’ฮฒ)RT(\alpha,\beta)=\beta[\alpha P + (1-\alpha)Q] + (1-\beta)R
Qโˆ’PQ-P์™€ Rโˆ’PR-P๋Š” ๋ฒกํ„ฐ์ด๋ฉฐ, ํ‰๋ฉด์ด ํ•œ ์ ๊ณผ ํ‰ํ–‰ํ•˜์ง€ ์•Š์€ ๋‘ ๋ฒกํ„ฐ๋กœ๋ถ€ํ„ฐ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์„ ๋ณด์˜€์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด P0,u,vP_0,u,v์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ํ‰๋ฉด์˜ ์‹์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
T(a,b)=P0+ฮฑu+ฮฒvT(a,b)=P_0+\alpha u + \beta v
โ€ข
Qโˆ’PQ-P์™€ Rโˆ’PR-P๋Š” ๊ฐ๊ฐ u,vu,v์— ๋Œ€์‘๋˜๋ฏ€๋กœ, P0=PP_0 = P๊ฐ€ ์ž์—ฐ์Šค๋ ˆ ๋œ๋‹ค.
T(ฮฑ,ฮฒ)=ฮฒฮฑP+ฮฒ(1โˆ’ฮฑ)Q+(1โˆ’ฮฒ)RT(\alpha,\beta)=\beta\alpha P + \beta(1-\alpha)Q + (1-\beta)R
์ด๋•Œ ฮฑโ€ฒ=ฮฒฮฑ,ฮฒโ€ฒ=ฮฒ(1โˆ’ฮฑ),ฮณโ€ฒ=(1โˆ’ฮฒ)\alpha' = \beta\alpha,\beta'=\beta(1-\alpha),\gamma'=(1-\beta)๋ผ๊ณ  ์žฌ์ •์˜ ํ•  ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์—์„œ ์•„ํ•€ ์กฐํ•ฉ์ด ๋งŒ์กฑ๋˜์–ด Plane์ด ์ƒ์„ฑ๋œ๋‹ค.
ฮฑโ€ฒ+ฮฒโ€ฒ+ฮณโ€ฒ=1\alpha'+\beta'+\gamma'=1
T(ฮฑโ€ฒ,ฮฒโ€ฒ,ฮณโ€ฒ)=ฮฑโ€ฒP+ฮฒโ€ฒQ+ฮณโ€ฒRT(\alpha',\beta',\gamma')= \alpha' P + \beta'Q + \gamma'R
์ฐธ๊ณ ๋กœ ฮฑโ€ฒ,ฮฒโ€ฒ,ฮณโ€ฒ\alpha',\beta',\gamma'๋ฅผ ์ด์šฉํ•œ ์ ์˜ ํ‘œํ˜„์„ ์ค‘์‹ฌ์ขŒํ‘œ(barycentric coordinate) ํ‘œํ˜„์ด๋ผ๊ณ  ํ•œ๋‹ค.

Normal Vector

Summary

โ€ข
Geometric Primitives
โ—ฆ
Point, Vector
โ—ฆ
Affine Combination
โ€ข
Others?

Coordinate Systems for Rendering

์›”๋“œ ์ขŒํ‘œ โ†’ ์Šคํฌ๋ฆฐ ์ขŒํ‘œ๋กœ ๋ณ€ํ™˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
๋ž˜์Šคํ„ฐ ๋””๋ฐ”์ด์Šค์—์„œ๋Š” ์Šค์บ”๋ผ์ธ์ด ์žˆ์–ด์„œ ๋ช‡๋ฒˆ์งธ ์Šค์บ”๋ผ์ธ์— ๋ช‡๋ฒˆ์งธ ์ ์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š”์ง€๋ฅผ ์•Œ๋ ค์ค˜์•ผํ•œ๋‹ค.

The Problem of Screen Coordinate System

โ€ข
์›€์ง์ด๋Š” ๋ฌผ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€?
โ€ข
๊ฐ€๋ณ€ ํ•ด์ƒ๋„๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€?
์ฆ‰, ์ขŒํ‘œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ์ง€ ์–ด๋Š ํ•ด์ƒ๋„์—์„œ๋ผ๋„ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
โ‡’ ์Šคํฌ๋ฆฐ์˜ ์ขŒํ‘œ๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๋ฉด ๋˜๊ฒ ๊ตฌ๋‚˜!
์ด๋ ‡๊ฒŒ ํ‘œ์ค€ํ™”๋œ ์ขŒํ‘œ๋ฅผ ์ •๊ทœํ™”๋œ ์ขŒํ‘œ(Normalized coordinate)๋ผ๊ณ  ํ•œ๋‹ค.
์ •๊ทœ์ขŒํ‘œ๋ฅผ ์ด์šฉํ•˜๋ฉด, ์Šคํฌ๋ฆฐ ์ขŒํ‘œ๊ณ„๋กœ ์•ˆ์ •์ ์œผ๋กœ์  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.
์˜ค๋ธŒ์ ํŠธ ์ขŒํ‘œ๊ณ„(๋ฒกํ„ฐ ๊ณต๊ฐ„?) โ†’ ์›”๋“œ์ขŒํ‘œ๊ณ„(์•„ํ•€ ๊ณต๊ฐ„!) โ†’(์ฐจ์› ๋ณ€ํ™˜)โ†’ ์ •๊ทœ์ขŒํ‘œ๊ณ„ โ†’ ์Šคํฌ๋ฆฐ ์ขŒํ‘œ๊ณ„(ํ”ฝ์…€ ํ–‰)

OpenGL Normalized Coordinate Systems

Rendering Points

Primitives์ž…์žฅ์—์„œ ์ ์„ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์„๋  ๊ฒƒ์ด๋‹ค.
โ€ข
2์ฐจ์›์˜ ์ •๊ทœํ™”๋œ ์œ„์น˜ (x,y)
โ€ข
์ปฌ๋Ÿฌ
โ€ข
์ ˆ๋Œ€์œ„์น˜ or ์ƒ๋Œ€์œ„์น˜
Q : ์ ๋“ค๋กœ ๋ชจ๋“  2D ์ด๋ฏธ์ง€๋ฅผ ๋‹ค ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”?
A : ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ €์žฅ์˜ ํšจ์œจ์„ฑ๋„ ๋†’์ง€ ์•Š๊ตฌ์š”.

Remaining Questions

โ€ข
์ ์„ ํ”ฝ์…€๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์—์„œ
โ—ฆ
์›”๋“œ ์ขŒํ‘œ๊ณ„์—์„œ ์ •๊ทœ ์ขŒํ‘œ๊ณ„๋กœ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜ํ•˜๋Š”๊ฐ€? โ†’ ์ถ”ํ›„ Projection์—์„œ ๋‹ค๋ฃธ
โ—ฆ
์ •๊ทœ์ขŒํ‘œ๊ณ„์—์„œ ์Šคํฌ๋ฆฐ ์ขŒํ‘œ๊ณ„๋กœ ์–ด๋–ป๊ฒŒ ์˜ฎ๊ธฐ๋‚˜?
โ—ฆ
์ง์„ ์„ ์–ด๋–ป๊ฒŒ ๊ทธ๋ฆด๊นŒ?

Rendering Lines

์•ž์„œ ์ง์„ ์€ ๋‘๊ฐœ์˜ ์ ๊ณผ ์•„ํ•€ ์กฐํ•ฉ์œผ๋กœ ์„ค๋ช…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
์ˆ˜ํ•™์  ์ขŒํ‘œ๊ณ„์—์„œ๋Š” ์ด๊ฑธ ๊ทธ๋ฆฌ๋Š”๊ฒŒ ์•„์ฃผ์•„์ฃผ ์‰ฝ๊ฒ ์ง€๋งŒ, ๋ž˜์Šคํ„ฐ ๋””๋ฐ”์ด์Šค์—์„œ๋Š” ์ด์•ผ๊ธฐ๊ฐ€ ์กฐ๊ธˆ ๋‹ฌ๋ผ์ง„๋‹ค.
๋‘ ๊ฐœ์˜ ์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์‚ฌ์ด์˜ ์ค‘๊ฐ„ ์ง€์ ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€?

Naive Solution

1.
์‹œ์ž‘์ ์—์„œ ์ถœ๋ฐœํ•œ๋‹ค.
2.
์‹œ์ž‘์ ์—์„œ ์‹œ์ž‘์ ์„ ์ œ์™ธํ•˜๊ณ  ์ง์„ ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ธ์ ‘ํ•œ ํ”ฝ์…€์„ ๊ณ ๋ฅธ๋‹ค.
3.
์ธ์ ‘ํ•œ ํ”ฝ์…€์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์‹œ ์ •ํ•œ๋‹ค.
ํŠน์ • ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๋‹ˆ๊นŒ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์˜ ์ ์€ ๋ณผ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด ํŠน์ง•.
โ†’ ๋‚œ์ด๋„๊ฐ€ ๋‚ฎ์œผ๋‚˜ ๊ณ„์‚ฐ๋Ÿ‰์ด ์ •๋ง ๋งŽ๋‹ค.

A bit better algorithm : Line equation

y=mx+by=mx + b
p0,p1์ด ์ฃผ์–ด์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ m, b์˜ ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
m = dx/dy = (x2-x1)/(y2-y1)
dx = x2-x1; dy = y2-y1; for x from x1 to x2{ y = y1 + (dy) * (x-x1)/(dx) plot(x,y) }
C++
๋ณต์‚ฌ
Naive solution๋ณด๋‹ค๋Š” ํ›จ์”ฌ ๊ณ„์‚ฐ๋Ÿ‰์ด ์ค„์–ด๋“ค์—ˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ๋‚จ์•„์žˆ๋‹ค.
โ€ข
๊ณฑ์…ˆ๊ณผ ๋‚˜๋ˆ—์…ˆ์ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๋‹ค.
โ€ข
๊ณ„์‚ฐ๊ฒฐ๊ณผ๊ฐ€ ์†Œ์ˆ˜์ผ ๊ฒฝ์šฐ ์–ด๋””๋ฅผ ์น ํ•  ์ง€๊ฐ€ ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•ด์ง„๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” Line Equation์˜ ๊ธฐํ‹€์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ณ„์‚ฐ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฐœ๋‹ฌํ•ด์™”๋‹ค. ์•„๋ž˜๋Š” ๊ทธ ์˜ˆ์‹œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

Digital Differential Analyzer : DDA

dx = x2-x1; dy = y2-y1; for x from x1 to x2{ y = y1 + (dy) * (x-x1)/(dx) plot(x,y) }
C++
๋ณต์‚ฌ
๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ์œ ์‹ฌํžˆ ๋ณด์ž. x๊ฐ€ 1 ์ฆ๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค, y๋Š” m(=dx/dy)๋งŒํผ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.
์ฆ‰, ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋žตํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
dx = x2-x1; dy = y2-y1; m = dx/dy; for x from x1 to x2{ y += m; plot(x,y) }
C++
๋ณต์‚ฌ
m์ด 1๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋Š” y๊ฐ€ ๋ช‡ ํ”ฝ์…€ ๋‹จ์œ„๋กœ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.
m์ด 1๋ณด๋‹ค ํฌ๊ฒŒ ๋˜๋ฉด, y๊ฐ’์ด ์œ„๋กœ ํฌ๊ฒŒ ํŠ€๊ฒŒ ๋œ๋‹ค. โ†’ ์„ ์ด ๋š๋š ๋Š๊ฒจ ๋ณด์ด๊ฒŒ๋˜๋ฏ€๋กœ ์ด๋ฅผ ๋ณด์ •ํ•ด์•ผํ•œ๋‹ค. โ†’ y๋ฅผ for๋ฌธ์— ๋„ฃ์–ด๋ฒ„๋ฆฐ๋‹ค!
dx = x2-x1; dy = y2-y1; m = dx/dy; //m>1 for y from y1 to y2{ x += 1/m; plot(x,y) }
C++
๋ณต์‚ฌ
์ด ๋‘๊ฐœ๋ฅผ ํ•ฉ์นœ ๋ฒ„์ ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
lineDDA(Point p0, Point p1){ d = p0-p1; if(d.x > d.y) steps = d.x; else steps = d.y; dx = d.x/steps; dy = d.y/steps; x = p0.x; y = p0.y; plot(x,y); for(k=0; k<steps; k++){ x += dx; y += dy; plot(x,y); } }
C++
๋ณต์‚ฌ
๋งŒ๋“  ์‚ฌ๋žŒ ์ฒœ์žฐ๋ฐ?
m์ด 1๋ณด๋‹ค ํฌ๋ฉด steps๋Š” d.x๊ฐ€ ๋œ๋‹ค. dx=1, dy = m์ด ๋˜๋ฏ€๋กœ for๋ฌธ ๋งŒ์กฑ.
m์ด 1๋ณด๋‹ค ์ž‘์œผ๋ฉด steps๋Š” d.y๊ฐ€ ๋œ๋‹ค. dy=1 dx = 1/m์ด ๋˜๋ฏ€๋กœ ์—ญ์‹œ ๋งŒ์กฑ.
๋”ฐ๋ผ์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ์ •์ƒ์ ์œผ๋กœ ์ ์ด ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ANOTHER Line Equation

y=ys+m(xโˆ’xs)y = y_s + m(x-x_s)
m=ฮ”y=(yeโˆ’ys)ฮ”x=(xeโˆ’xs)m = \cfrac{\Delta y=(y_e-y_s)}{\Delta x=(x_e-x_s)}
ฮ”x(yโˆ’yi)=ฮ”y(xโˆ’xi)\Delta x(y-y_i) = \Delta y(x-x_i)
f(x,y)=ฮ”x(yeโˆ’ys)โˆ’ฮ”y(xeโˆ’xs)=0f(x,y) = \Delta x(y_e-y_s) - \Delta y(x_e-x_s) = 0
f(x,y)={0whenย x,yย isย onย theย line>0whenย x,yย isย aboveย theย line<0whenย x,yย isย belowย theย linef(x,y) = \begin{cases}0 & \text{when }x,y\text{ is on the line}\\ > 0 & \text{when }x,y\text{ is above the line}\\ < 0 & \text{when }x,y\text{ is below the line}\\ \end{cases}

Flood Fill : BFS Maze Problem

ํด๋ฆฌํ•‘์œผ๋กœ ํ•ด๊ฒฐํ•˜๋‚˜?
Next chapter