1 / 23

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

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.

edolie
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên 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 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 60o K1 K2 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 = 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- 1 Ñöôøng cong Koch baäc n- 1 Ñöôøng cong Koch baäc n > 0 treân ñoaïn thaúng coù höôùng = Ñöôøng cong Koch baäc n- 1 Ñöôøng cong Koch baäc n- 1 Ñöôøng cong Koch baäc 0 treân ñoaïn thaúng coù höôùng = 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 then begin 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); end else LineRel_(len*cos(rads*dir), len*sin(rads*dir)) end; 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/9, 0 0, 1/3, 1 60, 1/9, 0 -60, 1/9, 0 60, 1/3, 1 0, 1/9, 0 0, 1, 2 60, 1/9, 0 ... -60, 1/3, 1 120, 1/9, 0 0, 1/9, 0 ... 0, 1/3, 1 60, 1/9, 0 Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

  8. Ñöôøng cong C • Caùc ñöôøng cong C baäc 0, 1, 2, 3 C0 C1 C2 C3 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 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- 1 Ñöôøng cong C baäc n > 0 treân ñoaïn thaúng coù höôùng Ñöôøng cong C baäc n- 1 = Ñöôøng cong C baäc 0 treân ñoaïn thaúng coù höôùng = 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 then begin dir := dir + 45; DrawC(dir, len*fct, n - 1); dir := dir - 90; DrawC(dir, len*fct, n - 1); dir := dir + 45 end else LineRel_(len*cos(rads*dir), len*sin(rads*dir)) end; 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) 180, 1/2, 0 135, 1/2, 1 90, 1/2, 0 90, 1, 2 90, 1/2, 0 45, 1/2, 1 0, 1/2, 0 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 Hilbert baäc 3 kieåu A, kyù hieäu A3 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. D = 3 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 row dir B A A C up right down row[A, ]: dir[A, ]: A B B D right up left row[B, ]: dir[B, ]: D C C A right left down row[C, ]: dir[C, ]: C D D B down left up dir[D, ]: row[D, ]: 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 B1 C1 D1 A1 B2 A2 D2 C2 A1 A1 left right down up C1 B1 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 const A = 1; B = 2; C = 3; D = 4; up = 1; left = 2; down = 3; right = 4; type version = 1..4; direction = 1..4; var row : 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> 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 thenfor j := 1 to 4 dobegin Hilbert(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) end end end; 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) B, 0 A, 0 A, 1 B, 2 A, 0 B, 1 C, 0 B, 1 A, 2 etc D, 1 A, 3 B, 1 ... A, 2 A, 1 A, 1 ... C, 2 C, 1 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. F p2 L A p 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 var Fanratio, {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; 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) begin if n > 0 thenbegin 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) end end else DrawLeaf {thuû tuïc veõ laù giaû söû ñaõ coù} end; 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. Chöông 6: Kyõ thuaät laëp, ñeä quy, öùng duïng taïo hoa vaên

More Related