Informatika2-2016/Gyakorlat14

A MathWikiből
(Változatok közti eltérés)
(Feladatok)
4. sor: 4. sor:
 
** Oldjuk meg, hogy legyen egy '''tol''' opcionális paramétere a függvénynek, 0.00001 alapértelmezett értékkel. Ezzel a megállási pontosságot lehessen megadni!
 
** Oldjuk meg, hogy legyen egy '''tol''' opcionális paramétere a függvénynek, 0.00001 alapértelmezett értékkel. Ezzel a megállási pontosságot lehessen megadni!
 
** Adjunk hozzá egy '''maxiter''' opcionális paramétert (default: 200), amivel limitálhatjuk az iterációk számát!
 
** Adjunk hozzá egy '''maxiter''' opcionális paramétert (default: 200), amivel limitálhatjuk az iterációk számát!
 +
 +
==Ferde hajítás==
 +
Szimuláljuk a ferde hajítást közegellenállással. A közegellenállási erő mindig a sebességgel ellentéte irányú, <math>F_k=k\cdot v^2</math>, ahol a <math>k</math> egy összetett paraméter, de ezzel most nem törődünk, csak állítgatjuk. A test kezdetben az <math>x_0=(0,0)</math> pontban van, sebessége pedig <math>v0=(v_x,v_y)</math> (ezt mi adjuk majg meg lehet változtatni). Legyen egy epszilon változónk, mondjuk 0.01, ez lesz a lépéköz. Minden lépésben <math>\epsilon \cdot v</math> vektorral elmozdítjuk a testet, majd a sebességét csökkentjük <math>\epsilon \cdot (F_k+g)</math>-vel (<math>g</math> a gravitációs gyorsulás, konstans [0,9.81] vektor). Tároljuk ez a mozgás pontjait addig, amíg újra nem ér földet a test és rajzoljuk ki!
  
 
== Fraktál fa ==
 
== Fraktál fa ==

A lap 2016. május 19., 07:07-kori változata

Tartalomjegyzék

Feladatok

Bevezető

  • Írjunk egy fixed_point nevű függvényt, ami két paramétert kap: egy f függvényt és egy x0 értéket! Az f-et iteratívan hattatva az x0 kiindulópontból keressük meg a függvény fixpontját. Álljunk meg, ha a lépés kisebb mint 0.00001.
    • Oldjuk meg, hogy legyen egy tol opcionális paramétere a függvénynek, 0.00001 alapértelmezett értékkel. Ezzel a megállási pontosságot lehessen megadni!
    • Adjunk hozzá egy maxiter opcionális paramétert (default: 200), amivel limitálhatjuk az iterációk számát!

Ferde hajítás

Szimuláljuk a ferde hajítást közegellenállással. A közegellenállási erő mindig a sebességgel ellentéte irányú, F_k=k\cdot v^2, ahol a k egy összetett paraméter, de ezzel most nem törődünk, csak állítgatjuk. A test kezdetben az x0 = (0,0) pontban van, sebessége pedig v0 = (vx,vy) (ezt mi adjuk majg meg lehet változtatni). Legyen egy epszilon változónk, mondjuk 0.01, ez lesz a lépéköz. Minden lépésben \epsilon \cdot v vektorral elmozdítjuk a testet, majd a sebességét csökkentjük \epsilon \cdot (F_k+g)-vel (g a gravitációs gyorsulás, konstans [0,9.81] vektor). Tároljuk ez a mozgás pontjait addig, amíg újra nem ér földet a test és rajzoljuk ki!

Fraktál fa

  • Töltsük le a fractree.py file-t és futtassuk le!
  • Próbáljuk meg nagyvonalakban megérteni a kódot, nem kell érteni minden számolást, csak azt, hogy kb hol mi történik.


  • Módosítsuk a kódot, hogy többször ágazzon el (mondjuk 5 jó szám, annál többel már lehet lassú lesz).
  • Elég uncsi, hogy mindig ugyanazt a fát rajzolja ki. Módosítuk, hogy az elágazás szöge (branchAngle) véletlen szám legyen [0, pi / 2] intervallumon.
  • Csináljuk meg ugyanezt a törzs arányával is (trunkRatio), legyen mondjuk [0.25, 0.75] intervallumon véletlen szám!


  • Elég uncsi még mindig, mert még mindig nagyon szimmetrikus, érjük most el, hogy a két ág más szög szerint ágazzon el:
    • Csináljunk a branchAngle helyett branchAngleA és branchAngleB változókat, legyenek randomok mint a branchAngle volt.
    • Cseréljük le a tree függvényben a pB és pC pontok létrehozásakor a branchAngle-t, az újonnan létrehozottakra, de az egyiknél az egyikre, másiknál a másikra!


  • Az utolsó probléma már csak az, hogy még így is túl szabályosnak tûnik, mert a szögek állandóak, érjük el, hogy ágazás közben változzanak:
    • A tree függvény végén növeljük a branchAngleA, branchAngleB és trunkRatio változókat egy véletlen számmal, mondjuk [-0.02, 0.02] közöttivel.
    • Ahhoz, hogy ez mûködjön globálissá kell tenni a függvényben ezeket a változókat, szóval írjuk be a tree függvény elejére, hogy:
def tree(p0, p1, limit):
    global branchAngleA
    global branchAngleB
    global trunkRatio
    ...


  • Próbáljunk olyan beállításokat találni, ami nekünk szimpatikus fát rajzol!
Személyes eszközök