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๋ฐฐ์ด๋ฏ๋ก, ๋ถ๋ถ
์์ธ๋ก Point๊ฐ ํ ์ ์๋ ๊ฒ
โข
๋ ์ ์ ์ด์ฉํด์ ์๋ก์ด ์ ์ ๊ตฌํ๋ ์ฐ์ฐ
โข
์ x์ค์นผ๋ผ โ ์๋ก์ด ์ ์ ๊ตฌํ๋ ์ฐ์ฐ
โ์๋ก์ด ํฌ์ง์
์ ์ ์ ๊ตฌํ๊ธฐ ์ํด์๋ ์ + ๋ฒกํฐ ์ฐ์ฐ์ด ํ์ํ๋ค!
์ด ์ฐ์ฐ์ ์ -๋ฒกํฐ ๋ง์
์ด๋ผ๊ณ ํ๋ฉฐ, Output์ ์๋ก์ด ์ ์ด๋ค.
๋ค๋ฅธ ๊ด์ ์์ ๋ณด๋ฉด (New)Point = (Previous)Point + (New)Vector ์ด๋ฏ๋ก,
๋ฒกํฐ๋ ๋ ์ ์ ๋บ์
์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
Coordinate-Free Geometry
์ ์ ์ขํ๊ณ์ ์๊ด์์ด ๊ณต๊ฐ์์ ์กด์ฌํ๋ค. ์ ์ ์ ์ํ๊ธฐ ์ํด ์ขํ๊ณ๊ฐ ํ์ํ ๊ฒ์ด ์๋๋ค!
์ขํ์ถ์ ์ ๊ฑฐํ์๋, ์ ์ด ๋์ด์ ์ด๋์ ์๋์ง ๋ช
์์ ์ผ๋ก ์ง์ ํ ์ ์์.
์์์ ์์น์ ๋ฐฉํฅ์ ๊ฐ๋ ์ขํ์ถ์ ์๋์ ์ผ๋ก ์ง์ ๋ ๊ฒ์ด๋ฉฐ, ๋ํ์ ๊ธฐํํ์ ์ ์๋ฅผ ์ค๋ช
ํ๋๋ฐ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์์.
์ค์ํ ๊ฑด, ๊ทผ๋ณธ์ ์ธ ๊ธฐํํ์ ๊ด๊ณ๋ ์ ์ง๋๋ค๋ ์ ์ด๋ค.
์ ์ฌ๊ฐํ์ ์ฌ์ ํ ์ ๋ถ๋ผ๋ฆฌ ์ง๊ตํ๋ฉฐ, ์ ๋ค๊ฐ์ ๊ฑฐ๋ฆฌ๋ ๊ฐ๋ค.
The Mathematical View : Affine Spaces
์์ ์ ๊ณผ ๋ฒกํฐ์์ ๊ด๊ณ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋์๋ค.
a๊ฐ ์ ์ด๋ผ๋ฉด v์ ์ํด ์ด๋ฐ๋๋๋ฐ, ์ด๋ฐ๋ ๊ฒฐ๊ณผ๋ ๋ค์ ์ ์ด ๋๋ ๊ฒ์ด ์ํ ๋ณํ์์์ ๋ฒกํฐ์ ์ ์ ๊ด๊ณ์ด๋ค.
1.
์ P์ ์๋ฒกํฐ๋ฅผ ๋ํ๋ฉด ์ P๊ฐ ๋๋ค. ์ ์ ์๋ฌด๋ฐ ํ๋ ์ ๊ฐํด์ง๋ค๋ฉด, ์ ์ ์์ง์ด์ง ์๋๋ค.
a.
2.
์ํ๊ณต๊ฐ์ ๊ฒฐํฉ๋ฒ์น์ด ์ฑ๋ฆฝ๋๋ค.
a.
3.
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์ฐจ์ ํ๋ฉด์์ ์์์ ๋ ์ ๊ณผ ์ ๊ฐ๊ฐ ์ค์นผ๋ผ a,b๋ฅผ ๊ณฑํ ์ ํ ๊ฒฐํฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ a+b๊ฐ 1์ด ๋๋ค๋ฉด, ์ ๊ณผ ์ ์ ๊ฒฐํฉํด ์๋ก์ด ์ ์ ๋ง๋ค ์ ์๋ค!!
๋์ผํ ์๋ฆฌ๋ก ์ธ ์ ์ ๋ํด์๋ ๋ค์ ์์๊ณผ ๊ฐ์ด ๋ชจ๋ ์ค์นผ๋ผ์ sum์ด 1์ด๋ฉด ์ ์ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
์ฌ๋ฌ ๊ฐ์ ์ ์ ๊ฒฐํฉํด ์๋ก์ด ์ ์ ์์ฑํ๋ ์์์ Affine combination์ด๋ผ๊ณ ํ๋ค.
๊ฐ ์ ์ ๊ฐ ์ ์ ๋์๋๋ ์ค์นผ๋ผ ๊ฐ ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ตํํ๋ฉฐ ๋ง์น๋ค.
์ฐธ๊ณ ๋ก ์ ์์ผ๋ก ์ธํด ๋ํ๋๋ ์์ญ์ Convex Hull์ด๋ผ๊ณ ํ๋ค.
Combination of Affine Combination
์ํ ๊ณต๊ฐ์ ๋ ์ ์ ๋์๋๋ ์ค์นผ๋ผ ๊ฐ a,b์ ๋ํด
์ ๋ง์กฑํด์ผ ํ๋๋ฐ, ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๊ฒ ๋๋ค๋ฉด ์ธ์ ๋ ์ ์ ์์ฑ์ ๋ณด์ฅ๋ฐ์ ์ ์๋ค.
a = 1์ธ ๊ฒฝ์ฐ
a = 0์ธ ๊ฒฝ์ฐ
a = 0.5์ธ๊ฒฝ์ฐ
P1์ PO2์ ์ค์ ์ด ๋ง๋ค์ด์ง๋ค.
์ฆ, P์ ์ํ๊ฒฐํฉ์ผ๋ก ์์ฑ๋๋ ์ ์ ๋ชจ๋ ๋ชจ์ผ๋ฉด P1,P2๋ฅผ ์ง๋๋ ๋ฌดํํ ๊ธด ์ ์ด ๋ง๋ค์ด์ง๋ค.
์ฆ ๋ฏธ์ง์ x์ ๋ํ ์ง์ ์ ๋ฐฉ์ ์ L(x)๋ ๋ค์๊ณผ ๊ฐ์ด ํํ๋ ์ ์๋ค.
Plane
์ํ ๊ณต๊ฐ์์ ํ๋ฉด์ ๋งค๊ฐ๋ณ์ํ ์ง์ ์ ํ์ฅํ์ฌ ์ ์๊ฐ๋ฅํ๋ค.
์ธ ์ P, Q, R์ด ์๋ค๊ณ ๊ฐ์ ํ์.
P์ Q๋ฅผ ์๋ ์ ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ ๋ถ ์์ ์ S๋ฅผ ์ ํํ๊ณ , R์์ S๊น์ง์ ์ ๋ถ์ ํ์ฑํด๋ณด์.
์ด ์ ๋ค์ ์ ์ํด ๊ฒฐ์ ๋๋ฉฐ, P,Q,R์ ์ํด ๊ฒฐ์ ๋๋ ํ๋ฉด์ ํ์ฑํ๋ค.
์ ๋ ๋ฒกํฐ์ด๋ฉฐ, ํ๋ฉด์ด ํ ์ ๊ณผ ํํํ์ง ์์ ๋ ๋ฒกํฐ๋ก๋ถํฐ ๊ฒฐ์ ๋๋ ๊ฒ์ ๋ณด์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ ์ํด ๊ฒฐ์ ๋๋ ํ๋ฉด์ ์์ ์ธ ์ ์๋ค.
โข
์ ๋ ๊ฐ๊ฐ ์ ๋์๋๋ฏ๋ก, ๊ฐ ์์ฐ์ค๋ ๋๋ค.
์ด๋ ๋ผ๊ณ ์ฌ์ ์ ํ ๋, ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์์ ์ํ ์กฐํฉ์ด ๋ง์กฑ๋์ด Plane์ด ์์ฑ๋๋ค.
์ฐธ๊ณ ๋ก ๋ฅผ ์ด์ฉํ ์ ์ ํํ์ ์ค์ฌ์ขํ(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
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
Flood Fill : BFS Maze Problem
ํด๋ฆฌํ์ผ๋ก ํด๊ฒฐํ๋?
Next chapter