September discount week
Tento týden až 80% sleva na e-learning týkající se jazyka C
50 % bodů zdarma na online výuku díky naší Slevové akci!

Koperníkův model Sluneční soustavy

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Tento program se zúčastnil soutěže Machr na Javu - Koperníkův model sluneční soustavy. Účelem soutěže bylo vytvořil z hlediska rychlosti co nejpřesnější model Sluneční soustavy. Planety se měly pohybovat po kruhových drahách a soustava měla obsahovat i Pluto. Já jsem přidal i rotaci těles, která u měsíců není moc dobře vidět, kvůli jejich malým rozměrům.

Aplikace se ovládá: šipkami doprava a doleva se mění rychlost, číslicí 1 se zapínají/vypínají trajektorie, číslicí 2 se zapínají/vzpínají názvy těles.


Galerie

Program byl vytvořen v roce 2013.

 

Stáhnout

Staženo 518x (852.05 kB)
Aplikace je včetně zdrojových kódů v jazyce C++

 

Všechny články v sekci
Online kurzy programování v C++ - Největší český e-learning
Program pro vás napsal Frunta
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Autor se věnuje programování v C++.
Aktivity (1)

 

 

Komentáře

Avatar
Lukáš Hruda (Luckin):15.5.2013 21:33

Co ty memory leaky? :D

 
Odpovědět
15.5.2013 21:33
Avatar
Frunta
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Frunta:15.5.2013 22:09

Nevím, co to je memory leak.

 
Odpovědět
15.5.2013 22:09
Avatar
Зайчик
Člen
Avatar
Odpovídá na Frunta
Зайчик:15.5.2013 22:37

únik paměti? xD

Odpovědět
15.5.2013 22:37
Коммунизм для нашего будущего!
Avatar
Odpovídá na Frunta
Lukáš Hruda (Luckin):15.5.2013 22:37

Únik paměti. Alokuješ objekty, ale už je nedealokuješ. Operátor new vytvoří objekt na haldě a pouze vrátí pointer na něj, ten objekt pak ale musíš někde dealokovat, což ty už neděláš. Navíc, objekty nemusíš vytvářet pouze pomocí operátoru new, můžeš ho prostě deklarovat a pak se o dealokaci paměti nemusíš starat.

 
Odpovědět
15.5.2013 22:37
Avatar
Kit
Redaktor
Avatar
Odpovídá na Frunta
Kit:16.5.2013 9:31

Programátoři, kteří se nechtějí zajímat o memory leaky, obvykle raději přesedlají na C# nebo Javu. Tam se o memory leaky moc starat nemusí, protože se za ně o to postará garbage collector.

Odpovědět
16.5.2013 9:31
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Lukáš Hruda (Luckin)
David Čápka:16.5.2013 9:33

Vidíš, toho jsme si nevšimli, snad to Frunta alespoň opraví :)

Odpovědět
16.5.2013 9:33
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Frunta
Redaktor
Avatar
Frunta:16.5.2013 14:29

Odpověď na: Lukáš Hruda (Luckin), Kit, David Čápka
Děkuji za upozornění. Ne, že bych se nechtěl zajímat o memory leaky, ale jednoduše jsem se domníval, že se to smaže s ukončením aplikace. Samozřejmě to opravím.

 
Odpovědět
16.5.2013 14:29
Avatar
Kit
Redaktor
Avatar
Odpovídá na Frunta
Kit:16.5.2013 14:36

To se smaže s ukončením aplikace, ale je dobré si zvyknout po sobě uklízet kvůli možnosti použití toho kusu kódu v jiném programu, kde by už ty memory leaky mohly vadit.

Do tvého kódu jsem se nedíval, takže pokud tam v cyklu alokuješ další a další paměť, tak ten program dříve či později padne právě na memory leak.

Odpovědět
16.5.2013 14:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Frunta
Lukáš Hruda (Luckin):16.5.2013 14:39

Ano, s koncem aplikace se uvolní veškerá paměť kterou program používal, paměť by se ale měla uvolňovat už ve chvíli, kdy ji přestaneš používat, většinou na té úrovni, kde byla paměť alokována.

 
Odpovědět
16.5.2013 14:39
Avatar
Odpovídá na Frunta
Lukáš Hruda (Luckin):16.5.2013 14:48

Mimochodem, uplně stačí, když nebudeš všechny objekty dělat dynamicky, v C++ můžeš objekt prostě deklarovat a ve spustě situacích to naprosto stačí.
Třeba místo...

Teleso* Slunce = new Teleso("Slunce", ucinit->sirka/2, ucinit->vyska/2, 0.0f, 1.0f, daysToUnit_360(25.0f), "files/images/Slunce.png", ucinit);

...můžeš udělat...

Teleso Slunce("Slunce", ucinit->sirka/2, ucinit->vyska/2, 0.0f, 1.0f, daysToUnit_360(25.0f), "files/images/Slunce.png", ucinit);

...nebo

Teleso Slunce = Teleso("Slunce", ucinit->sirka/2, ucinit->vyska/2, 0.0f, 1.0f, daysToUnit_360(25.0f), "files/images/Slunce.png", ucinit);

Poslední dva kódy jsou to samé. Jen pak Slunce nebude pointer na objekt, ale objekt sám. K jeho položkám pak nebudeš přistupovat pomocí operátoru -> ale .

Editováno 16.5.2013 14:49
 
Odpovědět
16.5.2013 14:48
Avatar
Frunta
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Frunta:16.5.2013 14:54

Ano, tohle vím.

 
Odpovědět
16.5.2013 14:54
Avatar
Frunta
Redaktor
Avatar
Odpovídá na Frunta
Frunta:17.5.2013 20:22

Pokusil jsem se to spravit. Už tu je nová verze.

Editováno 17.5.2013 20:23
 
Odpovědět
17.5.2013 20:22
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.