Koperníkův model Sluneční soustavy

C++ Koperníkův model Sluneční soustavy

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 439x (852.05 kB)
Aplikace je včetně zdrojových kódů v jazyce C++

 

  Aktivity (1)

Program pro vás napsal Frunta
Avatar
Autor se věnuje programování v C++.

Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!


 


Miniatura
Všechny články v sekci
C a C++

 

 

Komentáře
Zobrazit starší komentáře (2)

Avatar
Зайчик
Člen
Avatar
Зайчик:

únik paměti? xD

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

Ú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
Kit:

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  +1 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
David Čápka:

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

Odpovědět 16.5.2013 9:33
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Frunta
Redaktor
Avatar
Frunta:

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:

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):

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):

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ět 16.5.2013 14:54
Avatar
Frunta
Redaktor
Avatar
Odpovídá na Frunta
Frunta:

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 10 zpráv z 12. Zobrazit vše