Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

23
30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên 1 Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

description

Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên. Laùt khaûm (lôïp ngoùi) treân beà maët. Töï ñoïc. Ñöôøng cong Koch. Ñöôøng cong Koch (cung Koch) do nhaø toaùn hoïc ngöôøi Thuïy Ñieån Helge von Koch tìm thaáy naêm 1904 tuy naèm trong vuøng giôùi haïn, nhöng laïi coù chieàu daøi voâ haïn. - PowerPoint PPT Presentation

Transcript of Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

Page 1: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

1

Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

Page 2: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

2

Laùt khaûm (lôïp ngoùi) treân beà maët

ª Töï ñoïc

Page 3: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

3

Ñöôøng cong Koch

ª Ñöôøng cong Koch (cung Koch)– do nhaø toaùn hoïc ngöôøi Thuïy Ñieån Helge von

Koch tìm thaáy naêm 1904– tuy naèm trong vuøng giôùi haïn, nhöng laïi coù

chieàu daøi voâ haïn.– ñöôïc xaây döïng baèng ñeä quy

K0

K1

K2

60o

Page 4: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

4

Ñònh nghóa toaùn hoïc cuûa ñöôøng cong Koch

ª Ñöôøng cong Koch K0 laø moät ñoaïn thaúng coù chieàu daøi laø 1

ª Ñöôøng K1 ñöôïc xaây döïng töø ñöôøng K0 baèng caùch

– chia K0 thaønh 3 ñoaïn thaúng baèng nhau

– thay ñoaïn giöõa baèng moät ñöôøng gaáp khuùc goàm 2 caïnh, moãi caïnh daøi 1/3. Nhö vaäy K1 goàm 4 ñoaïn thaúng.

ª Ñöôøng cong Koch baäc i + 1 ñöôïc xaây döïng töø ñöôøng cong Koch baäc i. Ñöôøng Ki goàm 4i ñoaïn thaúng, moãi ñoaïn daøi 1/3i

– cho moãi ñoaïn thaúng cuûa Ki : thay ñoaïn giöõa baèng moät ñöôøng gaáp khuùc goàm 2 caïnh, moãi caïnh daøi (1/3i )/3 = 1/3i + 1.

Tính chaátª Chieàu daøi cuûa Ki laø 4i 1/3i =

i

3

4

Page 5: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

5

Giaûi thuaät ñeå veõ ñöôøng cong Koch baäc n

Ñöôøng cong Koch baäc n > 0

treân ñoaïn thaúng coù höôùng

=

Ñöôøng cong Koch

baäc n 1

Ñöôøng c

ong K

och

baäc

n

1

Ñöôøng cong Koch

baäc n 1

Ñöôøng cong Koch

baäc n 1

Ñöôøng cong Koch baäc 0treân ñoaïn thaúng coù höôùng

=

Page 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

6

Giaûi thuaät ñeå veõ ñöôøng cong Koch baäc n (tieáp)

procedure Koch(dir, len : real; n : integer);{Veõ ñöôøng cong Koch baäc n coù cô sôû laø ñoaïn thaúng coù chieàu daøi len

töø CP vaø höôùng dir ño baèng ñoä}const rads = 0.017453293; {= 1 ñoä, ñeå ñoåi ñoä sang radian}begin

if n > 0 thenbegin

Koch(dir, len / 3, n - 1);dir := dir + 60;Koch(dir, len / 3, n - 1);dir := dir 120;Koch(dir, len / 3, n - 1);dir := dir + 60;Koch(dir, len / 3, n - 1);

endelse LineRel_(len*cos(rads*dir), len*sin(rads*dir))

end;

Page 7: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

7

Caây goïi ñeä quy

ª Caây goïi ñeä quy cuûa thuû tuïc Koch: goïi Koch(0, 1, 2)

0, 1, 2

0, 1/9, 0

60, 1/9, 0

-60, 1/9, 0

60, 1/9, 0

120, 1/9, 0

0, 1/9, 0

0, 1/3, 1

60, 1/3, 1

-60, 1/3, 1

0, 1/3, 1

0, 1/9, 0

60, 1/9, 0

......

Page 8: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

8

Ñöôøng cong C

C0

ª Caùc ñöôøng cong C baäc 0, 1, 2, 3

C1 C2 C3

Page 9: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

9

Ñònh nghóa toaùn hoïc cuûa ñöôøng cong C

ª Ñöôøng cong C0 laø moät ñoaïn thaúng coù chieàu daøi laø 1

ª Ñöôøng C1 ñöôïc xaây döïng töø ñöôøng C0 baèng caùch

– thay ñoaïn thaúng baèng moät ñöôøng gaáp khuùc goàm 2 caïnh, moãi caïnh daøi 1/2. Nhö vaäy C1 goàm 2 ñoaïn thaúng.

ª Ñöôøng cong C baäc i + 1 ñöôïc xaây döïng töø ñöôøng cong C baäc i. Ñöôøng Ci goàm 2i ñoaïn thaúng, moãi ñoaïn daøi 1/2i

(cho pheùp hai ñoaïn thaúng ñöôïc veõ lieân tieáp thaúng haøng ñöôïc khoâng keå laø moät ñoaïn)

– cho moãi ñoaïn thaúng cuûa Ci : thay baèng moät ñöôøng gaáp khuùc goàm 2 caïnh, moãi caïnh daøi (1/2i )/2 = 1/2i

+ 1.

Tính chaátª Chieàu daøi cuûa Ci laø 2i 1/2i = 2i

Page 10: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

10

Giaûi thuaät ñeå veõ ñöôøng cong C baäc n

Ñöôøng cong C baäc n > 0

treân ñoaïn thaúng coù höôùng

=

Ñöô

øng c

ong C

baä

c n

1

Ñöôøng cong Cbaäc n 1

=

Ñöôøng cong C baäc 0treân ñoaïn thaúng coù höôùng

Page 11: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

11

Giaûi thuaät ñeå veõ ñöôøng cong C baäc n (tieáp)

procedure DrawC(dir, len : real; n : integer);{Veõ ñöôøng C baäc n leân ñoaïn thaúng töø CP daøi len theo höôùng dir}const fct = 0.7071067; {1./caên baäc 2 cuûa 2.0}begin

if n > 0 thenbegin

dir := dir + 45;DrawC(dir, len*fct, n - 1);dir := dir - 90;DrawC(dir, len*fct, n - 1);dir := dir + 45

endelse LineRel_(len*cos(rads*dir), len*sin(rads*dir))

end;

Page 12: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

12

Caây goïi ñeä quy

ª Caây goïi ñeä quy cuûa thuû tuïc DrawC: goïi DrawC(90, 1, 2)

90, 1, 2

180, 1/2, 0

90, 1/2, 0

90, 1/2, 0

135, 1/2, 1

45, 1/2, 10, 1/2, 0

Page 13: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

13

Ñöôøng cong Hilbert

ª Ñöôøng cong Hilbert– Nhaø toaùn hoïc Ñöùc David Hilbert (1862-1943)– ñi qua moïi ñieåm cuûa hình vuoâng ñôn vò– khoâng coù tieáp tuyeán taïi moïi ñieåm cuûa noù

Ñöôøng cong Hilbertbaäc 3 kieåu A, kyù hieäuA3

Page 14: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

14

Ñöôøng cong Hilbert

ª Ñöôøng cong Hilbert baäc D, D = 1, 2,...– 2D ñieåm chia moãi caïnh cuûa hình vuoâng thaønh

2D 1 ñoaïn baèng nhau– neáu caïnh cuûa hình vuoâng coù chieàu daøi laø 1

thì chieàu daøi cuûa moãi ñoaïn treân laø

ñoù laø chieàu daøi cuûa moãi caïnh cuûa ñöôøng cong Hilbert baäc D.

12

1

Ddisp

D = 3

Page 15: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

15

Ñöôøng cong Hilbert

ª Caùc baûng duøng ñeå ñònh nghóa ñöôøng cong Hilbert

B A A C

A B B D

D C C A

C D D B

up right

right up

left down

down left

down

left

right

up

row dir

row[A, ]:

row[B, ]:

row[C, ]:

row[D, ]:

dir[A, ]:

dir[B, ]:

dir[C, ]:

dir[D, ]:

Page 16: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

16

Ñöôøng cong Hilbert (tieáp)

ª Caùc ñöôøng cong Hilbert baäc 1 vaø 2

A1 B1 C1 D1

A2B2 C2 D2

upright

down

left

B1C1

A1 A1

Page 17: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

17

Ñöôøng cong Hilbert (tieáp)

ª Giaûi thuaät veõ ñöôøng cong Hilbert

constA = 1; B = 2; C = 3; D = 4;up = 1; left = 2; down = 3; right = 4;

typeversion = 1..4;direction = 1..4;

varrow : array [version, version] of version;dir : array [version, 1..3] of direction;dist : real; {chieàu daøi cuûa moãi ñoaïn}

<Naïp trò vaøo caùc array row vaø dir>

Page 18: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

18

Ñöôøng cong Hilbert (tieáp)

ª (tieáp)

procedure Hilbert(kind : version; order : integer);{Veõ ñöôøng cong Hilbert coù baäc order}var j : integer;begin

if order > 0 then for j := 1 to 4 do beginHilbert(row[kind, j], order - 1);if j < 4 then {khoâng caàn ñoaïn noái khi j = 4}case dir[kind, j] of

up : LineRel_(0, dist);down : LineRel_(0, -dist);left : LineRel_(-dist, 0);right : LineRel_(dist, 0)

endend

end;

Page 19: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

19

Caây goïi ñeä quy

ª Caây goïi ñeä quy cuûa thuû tuïc Hilbert: goïi Hilbert(A, 3)

A, 3

A, 1

B, 1

B, 1

B, 1

A, 1

A, 1

B, 2

A, 2

A, 2

C, 2

D, 1

C, 1

......

B, 0

A, 0

A, 0

C, 0

etc

Page 20: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

20

Caây fractal

ª Moät caây laø moät nhaùnh vôùi moät soá caây moïc ra töø cuoái nhaùnh.

p

p2

L

A

F

Page 21: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

21

Caây fractal (tieáp)

ª Giaûi thuaät veõ caây fractal

varFanratio, {tyû soá giöõa goùc xoøe ra cuûa nhaùnh vaø goùc xoøe ra

cuûa nhaùnh cha cuûa noù}LengthRatio : real; {tyû soá giöõa chieàu daøi cuûa nhaùnh vaø chieàu daøi cuûa

nhaùnh cha cuûa noù}NumBranch : integer; {soá löôïng caùc nhaùnh moïc ra töø cuoái moãi nhaùnh

cha}procedure Tree(p : point; A, L, F : real; n : integer);{veõ caây baäc n taïo moät goùc A ñoä, chieàu daøi L, vaø goùc xoøe ra F. Baét ñaàu taïi p}const rads = 0.017453293; {= 1 ñoä, ñeå ñoåi ñoä sang radians}var

i, num : integer;p2 : point;delang, ang : real;

Page 22: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

22

Caây fractal (tieáp)

ª (tieáp)

beginif n > 0 then begin

p2.x := p.x + L*cos(rads*A);p2.y := p.y + L*sin(rads*A);Line(p, p2); {veõ nhaùnh}num := NumBranch;if num > 1 then delang := F/(num - 1.0) else delang := 0.0;ang := A - F/2.0 - delang; {saün saøng cho nhaùnh thöù nhaát}for i := 1 to num do begin

ang := ang + delang;Tree(p2, ang, L* LengthRatio, F* FanRatio, n - 1)

endendelse DrawLeaf {thuû tuïc veõ laù giaû söû ñaõ coù}

end;

Page 23: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

30.9.2004 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa

vaên

23

Baøi thí nghieäm/thöïc haønh 5

ª 1. Cho caùc caùc ñoaïn thaúng ab vaø cd vôùi caùc ñieåm bieân a = (1, 2), b = (3, 3) c = (2, 4), d = (3, 0).

Haõy xaùc ñònh xem caùc ñoaïn ab vaø cd coù caét nhau khoâng maø khoâng caàn giaûi phöông trình naøo caû. Haõy giaûi thích caâu traû lôøi!

ª 2. Vieát giaûi thuaät veõ hình boâng tuyeát Koch.ª 3. Hieän thöïc giaûi thuaät veõ ñöôøng cong Hilbert.ª 4. Cho maøn hình coù ñoä phaân giaûi 1024 768 pixels.

Ñeå veõ moät ñoaïn thaúng naèm ngang hay thaúng ñöùng treân maøn hình maø coøn nhaän ra ñöôïc, ngöôøi ta caàn ít nhaát 3 pixels. Xaùc ñònh baäc toái ña cuûa ñöôøng cong Hilbert coøn nhaän ra ñöôïc treân maøn hình.