Programe în Pascal (Pascal): fulg de zăpadă și curbă Koch, fractali. Vedeți ce este „Curba Koch” în alte dicționare. Obiecte cu proprietăți fractale în natură

Fulgul de nea fractal, unul dintre cele mai faimoase și misterioase obiecte geometrice, a fost descris de Helga von Koch la începutul secolului nostru. Potrivit tradiției, în literatura noastră se numește fulgul de zăpadă al lui Koch. Aceasta este o figură geometrică foarte „tepoasă”, care poate fi văzută metaforic ca rezultatul „înmulțirii” repetate a Stelei lui David de la sine. Cele șase raze principale ale sale sunt acoperite cu un număr infinit de vârfuri „ace” mari și mici. Fiecare fragment microscopic al conturului unui fulg de nea este ca două mazăre într-o păstaie, iar fasciculul mare, la rândul său, conține un număr infinit de aceleași fragmente microscopice.

La un simpozion internațional despre metodologia modelării matematice la Varna, în 1994, am întâlnit lucrările autorilor bulgari care au descris experiența lor de utilizare a fulgilor de nea lui Koch și a altor obiecte similare în lecțiile de liceu pentru a ilustra problema divizibilității spațiului și aporii filosofice ale lui Zenon. În plus, din punct de vedere educațional, în opinia mea, însuși principiul construirii structurilor geometrice fractale regulate este foarte interesant - principiul înmulțirii recursive a elementului de bază. Nu degeaba natura „iubește” formele fractale. Acest lucru se explică tocmai prin faptul că sunt obținute prin reproducere simplă și modificarea dimensiunii unui anumit bloc de construcție elementar. După cum știți, natura nu debordează cu o varietate de motive și, acolo unde este posibil, se mulțumește cu cele mai simple soluții algoritmice. Privește cu atenție contururile frunzelor și, în multe cazuri, vei găsi o relație clară cu forma conturului unui fulg de zăpadă Koch.

Vizualizarea structurilor geometrice fractale este posibilă numai cu ajutorul unui computer. Este deja foarte dificil să construiești manual un fulg de zăpadă Koch deasupra ordinului al treilea, dar chiar vrei să te uiți la infinit! Prin urmare, de ce să nu încercați să dezvoltați un program de calculator adecvat. În RuNet puteți găsi recomandări pentru construirea unui fulg de zăpadă Koch din triunghiuri. Rezultatul acestui algoritm arată ca un amestec de linii care se intersectează. Este mai interesant să combinați această figură din „bucăți”. Conturul unui fulg de zăpadă Koch este format din segmente de lungime egală înclinate la 0°, 60° și 120° față de axa x orizontală. Dacă le notăm 1, 2 și respectiv 3, atunci un fulg de nea de orice ordin va consta din triplete succesive - 1, 2, 3, 1, 2, 3, 1, 2, 3... etc. Fiecare dintre aceste trei tipuri de segmente pot fi atașate celui precedent la unul sau celălalt capăt. Luând în considerare această circumstanță, putem presupune că conturul unui fulg de zăpadă este format din segmente de șase tipuri. Să le notăm 0, 1, 2, 3, 4, 5. Astfel, avem posibilitatea de a codifica un contur de orice ordin folosind 6 cifre (vezi figura).

Un fulg de nea de ordin superior este obținut de la un predecesor de ordin inferior prin înlocuirea fiecărei margini cu patru, conectate ca palmele îndoite (_/\_). Tipul de muchie 0 este înlocuit cu patru muchii 0, 5, 1, 0 și așa mai departe conform tabelului:

0 0 1 5 0
1 1 2 0 1
2 2 3 1 2
3 3 4 2 3
4 4 5 3 4
5 5 0 4 5

Un triunghi echilateral simplu poate fi considerat ca un fulg de zăpadă Koch de ordin zero. În sistemul de codificare descris, acesta corespunde intrării 0, 4, 2. Orice altceva poate fi obținut prin înlocuirile descrise. Nu voi furniza aici codul de procedură și, prin urmare, vă voi lipsi de plăcerea de a vă dezvolta propriul program. Când îl scrieți, nu este deloc necesar să folosiți un apel recursiv explicit. Poate fi înlocuit cu un ciclu obișnuit. În procesul de lucru, vei avea un alt motiv să te gândești la recursivitate și la rolul acesteia în formarea formelor cvasi-fractale ale lumii din jurul nostru și la sfârșitul drumului (dacă, desigur, nu ești prea leneș). pentru a-l parcurge până la capăt) veți putea admira modelul complex al contururilor unui fulg de nea fractal și, de asemenea, să priviți în sfârșit în fața infinitului.

    Forma geometrică a fulgului de zăpadă Koch arată astfel

    Cum să desenezi un fulg de zăpadă Koch

    Și există și piramida Koch

    Puteți afla mai detaliat cum să desenați un fulg de zăpadă Koch din videoclipul de mai jos. Poate înțelege cineva, am renunțat.

    Mai întâi, să ne uităm la acest fulg de zăpadă Koch. Diagrama de mai jos ne va arăta cel mai bine.

    Adică, pentru a desena un fulg de nea dat, trebuie să utilizați forme geometrice individuale, care alcătuiesc acest fractal geometric.

    Baza desenului nostru este un triunghi echilateral. Fiecare latură este împărțită în trei segmente, din care sunt construite următoarele triunghiuri echilaterale, mai mici. Aceeași operație se execută cu triunghiurile rezultate de mai multe ori.

    Fulgul de zăpadă al lui Koch este unul dintre primii fractali studiati de oamenii de știință. Din trei copii ale curbei Koch se obține un fulg de zăpadă, informații despre această descoperire apărute în 1904 într-un articol al matematicianului suedez Helge von Koch. În esență, o curbă a fost inventată ca exemplu de linie continuă la care o linie tangentă nu poate fi trasă în niciun punct. Curba Koch este simplă în design.

    Un exemplu, un desen foto al unei imagini cu un fulg de zăpadă Koch cu desen pas cu pas.

    În această diagramă puteți examina în detaliu liniile care vor face ulterior un fulg de zăpadă Koch.

    Și aceasta este o interpretare a unui nou fulg de nea bazat pe fulgul de nea lui Koch.

    Înainte să înțelegi cum să desenezi un fulg de zăpadă Koch, trebuie să stabilim ce este de fapt.

    Deci, un fulg de zăpadă Koch este o imagine geometrică - un fractal.

    Definiția completă a fulgului de zăpadă al lui Koch este dată în imaginea de mai jos.

Această cifră este unul dintre primii fractali studiati de oamenii de știință. Este derivat din trei copii ale curbei Koch, care a apărut pentru prima dată într-o lucrare a matematicianului suedez Helge von Koch în 1904. Această curbă a fost inventată ca exemplu de linie continuă care nu poate fi tangentă la niciun punct. Liniile cu această proprietate erau cunoscute înainte (Karl Weierstrass și-a construit exemplul în 1872), dar curba Koch este remarcabilă prin simplitatea designului său. Nu este o coincidență faptul că articolul său se numește „Pe o curbă continuă fără tangente, care rezultă din geometria elementară”.

Cum se construiește curba Koch pas cu pas.

Prima iterație este pur și simplu segmentul inițial. Apoi este împărțit în trei părți egale, cea centrală este completată pentru a forma un triunghi regulat și apoi aruncată. Rezultatul este a doua iterație - o linie întreruptă formată din patru segmente. La fiecare dintre ele se aplică aceeași operațiune și se obține a patra etapă de construcție. Continuând în același spirit, puteți obține din ce în ce mai multe linii noi (toate vor fi linii întrerupte). Iar ceea ce se întâmplă în limită (acesta va fi deja un obiect imaginar) se numește curba Koch.

Proprietățile de bază ale curbei Koch

1.DESPREeste continuu, dar nicaieri diferentiabil.În linii mari, tocmai acesta este motivul pentru care a fost inventat - ca exemplu al acestui tip de „ciudați” matematici.

2. Are lungime infinită. Fie lungimea segmentului inițial egală cu 1. La fiecare pas de construcție înlocuim fiecare dintre segmentele care alcătuiesc linia cu o linie întreruptă, care 4/3 ori mai mult. Aceasta înseamnă că lungimea întregii linii întrerupte la fiecare pas este înmulțită cu 4/3 : lungimea liniei numărul n este (4/3)n–1. Prin urmare, linia limită nu are de ales decât să fie infinit de lungă.

3.Fulgul de zăpadă Koch limitează zona finită.Și asta în ciuda faptului că perimetrul său este infinit. Această proprietate poate părea paradoxală, dar este evidentă - un fulg de zăpadă se potrivește complet într-un cerc, așa că aria sa este evident limitată. Aria poate fi calculată și nici măcar nu aveți nevoie de cunoștințe speciale pentru aceasta - formulele pentru aria unui triunghi și suma unei progresii geometrice sunt predate la școală. Pentru cei interesați, calculul este listat mai jos cu litere mici.

Fie latura triunghiului regulat original egal cu a. Apoi zona sa. Mai întâi latura este 1 și aria este: . Ce se întâmplă pe măsură ce iterația crește? Putem presupune că mici triunghiuri echilaterale sunt atașate unui poligon existent. Prima dată sunt doar 3, iar de fiecare dată sunt de 4 ori mai mulți decât precedentul. Adică la al n-lea pas va fi finalizat Tn = 3 4n–1 triunghiuri. Lungimea laturii fiecăreia dintre ele este o treime din latura triunghiului completat în pasul anterior. Aceasta înseamnă că este egal cu (1/3)n. Arii sunt proporționale cu pătratele laturilor, deci aria fiecărui triunghi este . Pentru valorile mari ale lui n, acesta este, apropo, foarte mic. Contribuția totală a acestor triunghiuri la zona fulgului de nea este Tn Sn = 3/4 (4/9)n S0. Prin urmare, după al n-lea pas, aria figurii va fi egală cu suma S0 + T1 S1 + T2 S2 + ... +Tn Sn = . Un fulg de zăpadă se obține după un număr infinit de pași, care îi corespunde n → ∞. Rezultatul este o sumă infinită, dar aceasta este suma unei progresii geometrice descrescătoare; există o formulă pentru aceasta: . Zona fulgului de nea este .


Opțiuni pentru construirea fulgului de zăpadă Koch

Fulgul de zăpadă Koch „dimpotrivă” se obține dacă construim curbe Koch în interiorul triunghiului echilateral original.

replici Cesaro. În loc de triunghiuri echilaterale, se folosesc triunghiuri isoscele cu un unghi de bază de la 60° la 90°. În figură, unghiul este de 88°.


Opțiune pătrată. Aici pătratele sunt completate.

Această cifră este unul dintre primii fractali studiati de oamenii de știință. Vine din trei exemplare curba Koch, care a apărut pentru prima dată într-o lucrare a matematicianului suedez Helge von Koch în 1904. Această curbă a fost inventată ca exemplu de linie continuă care nu poate fi tangentă la niciun punct. Liniile cu această proprietate erau cunoscute înainte (Karl Weierstrass și-a construit exemplul în 1872), dar curba Koch este remarcabilă prin simplitatea designului său. Nu este o coincidență faptul că articolul său se numește „Pe o curbă continuă fără tangente, care rezultă din geometria elementară”.

Scrierea unei funcții care se numește recursiv este o modalitate de a genera o diagramă fractală pe ecran. Cu toate acestea, ce se întâmplă dacă ați dori ca rândurile din Cantor de mai sus să fie setate ca obiecte separate care ar putea fi mutate independent? Funcția recursivă este simplă și elegantă, dar nu vă permite să faceți mult dincolo de simpla creare a șablonului în sine.

Iată regulile. Curba Koch și alte modele fractale sunt adesea numite „monstri matematici”. Acest lucru se datorează paradoxului ciudat care apare atunci când aplicați definiția recursivă de nenumărate ori. Dacă lungimea liniei inițiale de pornire este una, prima iterație a curbei Koch va da o lungime a liniei de patru treimi. Fă-o din nou și obții șaisprezece și nouă. Pe măsură ce iterați în infinit, lungimea curbei Koch se apropie de infinit. Cu toate acestea, se încadrează în spațiul finit minuscul oferit chiar aici pe această lucrare!

Primele etape ale construirii curbei Koch

Desenul și animația arată perfect cum este construită curba Koch pas cu pas. Prima iterație este pur și simplu segmentul inițial. Apoi este împărțit în trei părți egale, cea centrală este completată pentru a forma un triunghi regulat și apoi aruncată. Rezultatul este a doua iterație - o linie întreruptă formată din patru segmente. La fiecare dintre ele se aplică aceeași operațiune și se obține a patra etapă de construcție. Continuând în același spirit, puteți obține din ce în ce mai multe linii noi (toate vor fi linii întrerupte). Iar ceea ce se întâmplă în limită (acesta va fi deja un obiect imaginar) se numește curba Koch.

Deoarece lucrăm pe Pământul procesării pixelilor finiți, acest paradox teoretic nu va fi un factor pentru noi. Am putea proceda în același mod ca și cu setul Cantor și să scriem o funcție recursivă care aplică iterativ regulile lui Koch din nou și din nou. Cu toate acestea, vom rezolva această problemă în mod diferit, tratând fiecare segment al curbei Koch ca un obiect separat. Acest lucru va deschide câteva posibilități de proiectare. De exemplu, dacă fiecare segment este un obiect, putem permite fiecărui segment să se miște independent de locația sa inițială și să participe la simularea fizică.

Proprietățile de bază ale curbei Koch

1. Este continuu, dar nicaieri diferentiabil.În linii mari, tocmai acesta este motivul pentru care a fost inventat - ca exemplu al acestui tip de „ciudați” matematici.

2. Are lungime infinită. Fie lungimea segmentului inițial egală cu 1. La fiecare pas de construcție înlocuim fiecare dintre segmentele care alcătuiesc linia cu o linie întreruptă, care este de 4/3 ori mai lungă. Aceasta înseamnă că lungimea întregii linii întrerupte este înmulțită cu 4/3 la fiecare pas: lungimea liniei cu număr n este egal cu (4/3) n–1 . Prin urmare, linia limită nu are de ales decât să fie infinit de lungă.

În plus, am putea folosi culoare aleatoare, grosimea liniei etc. Pentru a afișa fiecare segment diferit. Pentru a ne îndeplini sarcina de a trata fiecare segment ca pe un obiect separat, trebuie mai întâi să decidem ce ar trebui să facă obiectul. Ce caracteristici ar trebui să aibă?

Să ne uităm la ce avem. Cu elementele de mai sus, cum și unde aplicăm regulile și principiile recursiunii lui Koch? În această simulare, am urmărit întotdeauna două generații: cea actuală și următoarea. Când am terminat de calculat generația următoare, acum a devenit relevant și am trecut la calculul noii generații următoare.

3. Fulgul lui Koch limitează aria finită.Și asta în ciuda faptului că perimetrul său este infinit. Această proprietate poate părea paradoxală, dar este evidentă - un fulg de zăpadă se potrivește complet într-un cerc, așa că aria sa este evident limitată. Aria poate fi calculată și nici măcar nu aveți nevoie de cunoștințe speciale pentru aceasta - formulele pentru aria unui triunghi și suma unei progresii geometrice sunt predate la școală. Pentru cei interesați, calculul este listat mai jos cu litere mici.

Vom folosi o tehnică similară aici. Așa arată codul. Desigur, cele de mai sus exclud „lucrarea” propriu-zisă aici care definește aceste reguli. Cum împărțim un segment de linie în patru, așa cum este descris de reguli? Construcția unui fractal se bazează pe conceptul de infinit. Pasul 2: Vom împărți acest segment în trei părți egale și vom ridica un triunghi echilateral pe partea centrală. Pasul 3: Pe cele patru noi segmente vom efectua pasul.

Intersectați instrumentul dintre cele două obiecte, faceți clic pe cerc. Fulgul de zăpadă Koch este o curbă fractală specială construită de matematicianul Koch, începând cu dantela lui Koch. Aceasta este o curbă trasată de-a lungul laturilor unui triunghi echilateral. Sireturile Koch sunt construite pe fiecare parte a triunghiului.

Fie latura triunghiului regulat original egal cu A. Apoi zona sa. Mai întâi latura este 1 și aria este: . Ce se întâmplă pe măsură ce iterația crește? Putem presupune că mici triunghiuri echilaterale sunt atașate unui poligon existent. Prima dată sunt doar 3, iar de fiecare dată sunt de 4 ori mai mulți decât precedentul. Adică pe n La pasul al treilea, se vor completa T n = 3 · 4 n–1 triunghiuri. Lungimea laturii fiecăreia dintre ele este o treime din latura triunghiului completat în pasul anterior. Aceasta înseamnă că este egal cu (1/3) n. Arii sunt proporționale cu pătratele laturilor, deci aria fiecărui triunghi este . Pentru valori mari n Apropo, acest lucru este foarte puțin. Contribuția totală a acestor triunghiuri la aria fulgului de zăpadă este T n · S n = 3/4 · (4/9) n · S 0 . Prin urmare după n pasul, aria figurii va fi egală cu suma S 0 + T 1 · S 1 + T 2 · S 2 + ... + T n · S n = . Un fulg de nea se obține după un număr infinit de pași, care corespunde lui n → ∞. Rezultatul este o sumă infinită, dar aceasta este suma unei progresii geometrice descrescătoare; există o formulă pentru aceasta: . Aria fulgului de nea este egală.

Următorul tabel prezintă primii pași în construirea unei curbe. Pentru a crea un fractal, trebuie pur și simplu să inserați trei copii ale curbei de-a lungul laturilor triunghiului. Rețineți că a doua figură este Steaua lui David. Rezultatul final este o curbă închisă construită pe un triunghi echilateral. Se poate observa că frita conține o stea cu șase colțuri. Designul este foarte asemănător cu unul pentagonal fractal.

Există o altă modalitate de a construi fulgi de zăpadă. Construcția descrisă mai sus poate fi definită ca o construcție prin adunare, deoarece figura de pornire, triunghiul, adaugă alte elemente. Există o substructură care îndepărtează elemente în loc de forma originală.

4. Dimensiunea fractală este log4/log3 = log 3 4 ≈ 1,261859... . Calculul precis va necesita un efort considerabil și explicații detaliate, așa că aici este mai degrabă o ilustrare a definiției dimensiunii fractale. Din formula legii puterii N(δ) ~ (1/δ)D, unde N- numărul de pătrate care se intersectează, δ - dimensiunea lor, D- dimensiune, obținem că D = log 1/δ N. Această egalitate este adevărată până la adăugarea unei constante (la fel pentru toate δ ). Figurile arată a cincea iterație de construire a curbei Koch; pătratele grilei care se intersectează cu aceasta sunt umbrite în verde. Lungimea segmentului original este 1, deci în figura din stânga lungimea laturii pătratelor este 1/9. 12 pătrate sunt umbrite, log 9 12 ≈ 1,130929... . Nu prea seamănă încă cu 1.261859... . Să privim mai departe. În imaginea din mijloc, pătratele au jumătate din dimensiune, dimensiunea lor este 1/18, umbrită 30. log 18 30 ≈ 1,176733... . Deja mai bine. În dreapta, pătratele sunt încă la jumătate mai mari, 72 de piese au fost deja pictate. log 72 30 ≈ 1,193426... . Chiar mai aproape. Apoi, trebuie să creșteți numărul de iterații și, în același timp, să micșorați pătratele, apoi valoarea „empirică” a dimensiunii curbei Koch se va apropia constant de log 3 4, iar în limită va coincide complet.

Opțiuni

Fulgul de zăpadă al lui Koch „în sens invers” obținut dacă construim curbe Koch în interiorul triunghiului echilateral inițial.

Linii Cesaro. În loc de triunghiuri echilaterale, se folosesc triunghiuri isoscele cu un unghi de bază de la 60° la 90°. În figură, unghiul este de 88°.

Opțiune pătrată. Aici pătratele sunt completate.

Analogi tridimensionali. Spațiul Koch.

A fost o iarnă neobișnuit de caldă în Boston, dar încă așteptam prima ninsoare. Privind zăpada căzând prin fereastră, m-am gândit la fulgi de zăpadă și la modul în care structura lor nu este deloc ușor de descris matematic. Există totuși un tip special de fulg de zăpadă, cunoscut sub numele de fulg de zăpadă Koch, care poate fi descris relativ simplu. Astăzi ne vom uita la modul în care poate fi construită forma sa folosind COMSOL Multiphysics Application Builder.

Crearea fulgului de nea lui Koch

După cum am menționat deja în blogul nostru, fractalii pot fi folosiți în . Fulgul de nea Koch este un fractal, care este notabil prin faptul că există un proces iterativ foarte simplu pentru a-l construi:

  1. Să începem cu un triunghi echilateral, care este de fapt a doua iterație a fulgului de zăpadă Koch.
  2. Să găsim punctul central de pe fiecare margine a fulgului de zăpadă actual.
  3. În centrul fiecărei margini, adăugați un triunghi echilateral care iese în afară cu o latură egală cu 1/3 din lungimea muchiei curente.
  4. Să definim următoarea iterație a fulgului de zăpadă Koch să fie în exteriorul fulgului de zăpadă anterior și a tuturor triunghiurilor adăugate.
  5. Repetați pașii 2-4 de câte ori este necesar.

Această procedură este ilustrată în figura de mai jos pentru primele patru iterații ale desenului unui fulg de zăpadă.

Primele patru iterații ale fulgului de zăpadă Koch. Imagine de Wxs - Operă proprie. Licențiat sub CC BY-SA 3.0, prin Wikimedia Commons.

Construcția geometriei fulgilor de zăpadă Koch

Deoarece acum știm ce algoritm să folosim, haideți să vedem cum să creați o astfel de structură folosind COMSOL Multiphysics Application Builder. Vom deschide un nou fișier și vom crea un obiect 2D partea de geometrie la nod Definiții globale. Pentru acest obiect, vom seta cinci parametri de intrare: lungimea laturii unui triunghi echilateral; X- Și y– coordonatele punctului de mijloc al bazei; și componente ale vectorului normal îndreptate de la mijlocul bazei către vârful opus, așa cum se arată în figurile de mai jos.


Cinci parametri utilizați pentru a seta dimensiunea, poziția și orientarea unui triunghi echilateral.


Setarea parametrilor de intrare ai piesei geometrice.
O primitivă poligon este folosită pentru a construi un triunghi echilateral.


Obiectul se poate roti în jurul centrului marginii inferioare.


Un obiect poate fi mutat în raport cu originea.

Acum că am definit partea geometrică, o folosim o dată în secțiune Geometrie. Acest triunghi unic este echivalent cu iterația zero a fulgului de zăpadă Koch și acum să folosim aplicația pentru a crea fulgi de zăpadă mai complexi.

Markup aplicație UI în aplicația Generator

Aplicația are o interfață de utilizator foarte simplă. Conține doar două componente cu care utilizatorul poate interacționa: Glisor (glisor)(marcat ca 1 în figura de mai jos), cu ajutorul căruia puteți seta numărul de iterații necesare pentru a crea un fulg de zăpadă și Buton(eticheta 2), făcând clic pe care este creată și afișată geometria rezultată. Există, de asemenea Inscripție text(eticheta 3) și Afișează (Afișează) date(eticheta 4), care arată numărul de iterații specificat, precum și fereastra Diagrame(eticheta 5), ​​care afișează geometria finală.


Aplicația are un singur formular cu cinci componente.

Aplicația are două Definiții, dintre care unul definește o valoare întreagă numită Iterații, care este implicit la zero, dar poate fi modificată de utilizator. De asemenea, este definită o matrice 1D de duble numită Center. Singurul element din matrice are o valoare de 0,5, care este folosită pentru a găsi punctul central al fiecărei margini. Această valoare nu se schimbă niciodată.


Setări pentru două definiții.

Componenta Slider din UI controlează valoarea întregului, parametrul Iterații. Captura de ecran de mai jos arată setările pentru „Slider” și valorile, care sunt setate ca numere întregi în intervalul între 0 și 5. Aceeași sursă (ca și pentru glisor) este, de asemenea, selectată pentru componentă. Afișarea datelor pentru a afișa numărul de iterații specificate pe ecranul aplicației. Limităm utilizatorul potențial la cinci iterații, deoarece algoritmul utilizat este suboptim și nu foarte eficient, dar este suficient de simplu de implementat și demonstrat.


Setări pentru componenta „Slider”.

În continuare, să ne uităm la setările pentru butonul nostru, afișate în captura de ecran de mai jos. Când butonul este apăsat, sunt executate două comenzi. În primul rând, este apelată metoda CreateSnowFlake. Geometria rezultată este apoi afișată în fereastra grafică.


Setări butoane.

Ne-am uitat acum la interfața de utilizator a aplicației noastre și putem vedea că crearea oricărei geometrii de fulg de zăpadă trebuie să se facă printr-o metodă numită. Să ne uităm la codul acestei metode, cu numerotarea liniilor adăugată în stânga și constantele șirului evidențiate în roșu:

1 model.geom("geom1" ).feature().clear(); 2 model.geom("geom1" ).create("pi1" , "PartInstance" ); 3 model.geom("geom1" ).run("fin" ); 4 pentru (int iter = 1; iter "geom1" ).getNEdges()+1; 6 UnionList = "pi" + iter; 7 pentru (int edge = 1; edge "geom1" ).getNEdges(); edge++) ( 8 String newPartInstance = "pi" + iter + edge; 9 model.geom("geom1").create(newPartInstance, "PartInstance" ).set("part" , "part1" ); 10 with(model. geom("geom1" ).feature(newPartInstance)); 11 setEntry("inputexpr" , "Length" , toString(Math.pow(1.0/3.0, iter))); 12 setEntry("inputexpr" , "px" , model.geom("geom1" ).edgeX(edge, Center)); 13 setEntry("inputexpr" , "py" , model.geom("geom1" ).edgeX(edge, Center)); 14 setEntry("inputexpr" " , "nx" , model.geom("geom1" ).edgeNormal(margine, Centru)); 15 setEntry("inputexpr" , "ny" , model.geom("geom1").edgeNormal(margine, Centru)) ; 16 endwith(); 17 UnionList = newPartInstance; 18 ) 19 model.geom("geom1" ).create("pi" +(iter+1), "Union" ).selection("input" ).set(UnionList ); 20 model.geom("geom1" ).feature("pi" +(iter+1)).set("intbnd" , "off" ); 21 model.geom("geom1" ).run("fin" ); 22)

Să parcurgem codul linie cu linie pentru a înțelege ce funcție îndeplinește fiecare linie:

  1. Ștergerea tuturor secvențelor geometrice existente, astfel încât să putem începe de la zero.
  2. Creăm o singură instanță a obiectului - „triunghiul nostru”, folosind dimensiunea, orientarea și locația implicite. Acesta este fulgul nostru de zăpadă de ordinul zero cu eticheta de identificare pi1.
  3. Să finalizăm geometria. Această operație este necesară pentru a actualiza toți indicii de geometrie.
  4. Să începem procesul de iterare prin toate iterațiile date ale fulgului de zăpadă, folosind definiția Iterații ca o condiție de oprire.
  5. Definim o matrice goală de șiruri, UnionList. Fiecare element al matricei conține un identificator al diferitelor obiecte geometrice. Lungimea acestui tablou este egală cu numărul de muchii din ultima iterație plus unu.
  6. Definim primul element din tabloul UnionList. Este un identificator al rezultatului iterației anterioare. Rețineți că iterația zero a fost deja creată în rândurile 1-3. Valoarea întreagă iter este convertită automat într-un șir și atașată la sfârșitul șirului „pi” .
  7. Trecem prin numărul de muchii din fulgul de zăpadă generat anterior.
  8. Setăm o etichetă de identificare pentru o nouă instanță a unui obiect care accesează din instanța părții „triunghi” care este creată pe această margine. Rețineți că valorile întregi iter și edge sunt adăugate secvențial la sfârșitul șirului pi , eticheta de identificare a instanței obiectului.
  9. Creăm o instanță a obiectului „triunghi” și îi atribuim eticheta de identificare care tocmai a fost specificată.
  10. Indicăm că liniile 11-15 se referă la instanța curentă a obiectului (instanța părții) folosind instrucțiunea with()/endwith().
  11. Determinați lungimea laturii triunghiului. Ordinul zero are lungimea laturii de unu, deci a n-a iterație are lungimea laturii de (1/3)n. Funcția toString() este necesară pentru a transforma (converti) tipuri de date - un număr în virgulă mobilă într-un șir.
  12. Noi am stabilit X-coordonata noului triunghi, ca punct central al laturii ultimei iterații. Metoda edgeX este documentată în . Amintiți-vă că Center este setat la 0,5.
  13. Noi am stabilit y-coordona.
  14. Noi am stabilit X-componenta vectorului normal al triunghiului. Metoda edgeNormal este, de asemenea, documentată în Manual de referință de programare COMSOL.
  15. Noi am stabilit y-componenta vectorului normal.
  16. Închidem instrucțiunea with()/endwith().
  17. Adăugați o etichetă-identificator al triunghiului curent la lista tuturor obiectelor.
  18. Închidem căutarea tuturor marginilor.
  19. Creăm o Uniune Booleană (uniunea logică) a tuturor obiectelor într-o secvență geometrică. Atribuim o nouă valoare pi etichetei N, unde N este numărul Următorul iterații. Parantezele sunt necesare în jurul (iter+1), astfel încât valoarea iter incrementată să fie convertită într-un șir.
  20. Indicăm că limitele interne ale obiectului final nu sunt păstrate.
  21. Să finalizăm geometria. Ultima operație actualizează toți indicii de geometrie pentru următoarea iterație a fulgului de nea.
  22. Închidem ciclul de iterații de creare a unui fulg de zăpadă.

Astfel, am acoperit toate aspectele și elementele aplicației noastre. Să ne uităm la rezultate!


Aplicația noastră simplă pentru construirea fulgilor de zăpadă Koch.

Am putea extinde aplicația noastră pentru a scrie geometria într-un fișier sau chiar pentru a efectua analize suplimentare direct. De exemplu, am putea proiecta o antenă fractală. Dacă sunteți interesat de designul antenei, consultați exemplul nostru sau chiar faceți-i aspectul de la zero.

Incearca-l tu insuti

Dacă doriți să construiți singur această aplicație, dar nu ați finalizat încă aplicația Generatorul de aplicații, puteți găsi următoarele resurse utile:

  • Descărcați ghidul Introducere în mediul de dezvoltare a aplicațiilor în limba engleză
  • Urmărește aceste videoclipuri și învață cum să le folosești
  • Citiți aceste subiecte pentru a vă familiariza cu modul în care sunt utilizate aplicațiile de simulare

Odată ce ați acoperit acest material, veți vedea cum poate fi extinsă funcționalitatea aplicației pentru a redimensiona un fulg de zăpadă, a exporta geometria creată, a estima suprafața și perimetrul și multe altele.

Ce fel de aplicație ați dori să creați în COMSOL Multiphysics? pentru ajutor.



Articole similare