public static Vektor gravitacna_sila(Teleso a, Teleso b) { Vektor r = Vektor.odcitaj_vektor(a.pozicia, b.pozicia); Vektor r_jednotkovy = Vektor.vydel_skalarom(r, Vektor.velkost_vektora(r)); double grav_sila_velkost = G * a.hmotnost * b.hmotnost / Math.Pow(Vektor.velkost_vektora(r), 2); //Console.WriteLine("jednotkovy vektor: " + r_jednotkovy.x.ToString() + " " + r_jednotkovy.y.ToString()); //Console.WriteLine("gravitacna sila: " + Vektor.vynasob_skalarom(r_jednotkovy, grav_sila_velkost).x.ToString()+" " + Vektor.vynasob_skalarom(r_jednotkovy, grav_sila_velkost).y.ToString()); return(Vektor.vynasob_skalarom(r_jednotkovy, -grav_sila_velkost)); }
public static void update_sila(Teleso a, params Teleso[] zoznam) { a.sila = new Vektor(0, 0); for (int i = 0; i < zoznam.Length; i++) { if (a != zoznam[i]) { a.sila = Vektor.scitaj_vektory(a.sila, gravitacna_sila(a, zoznam[i])); //Console.WriteLine(i.ToString() + " grav. sila: " + a.sila.x.ToString() + " " + a.sila.y.ToString()); } } }
public void tick(object sender, EventArgs e) { Console.WriteLine("tick"); Console.WriteLine(sustava.mod.ToString()); for (int i = 1; i < sustava.objekty.Length; i++) { Teleso a = sustava.objekty[i]; Sustava.update_sila(a, sustava.objekty); Sustava.update_hybnost(a); Sustava.update_pozicia(a); //Console.WriteLine("nova pozicia planety: " + a.pozicia.x.ToString() + " " + a.pozicia.y.ToString()); } kresli.preskaluj(sustava); kresli.updateni_pozicie(); //timer.Stop(); t += dt; cas.Text ="Day: " + ((int)(t / 86400)).ToString() +"\nYear: " + ((int)(t / 31557600)).ToString(); cas.Update(); //Console.ReadLine(); }
public static void update_hybnost(Teleso a) { //Console.WriteLine("hybnost: " + a.hybnost.x.ToString() + " " + Vektor.vynasob_skalarom(a.sila, dt).x.ToString()); a.hybnost = Vektor.scitaj_vektory(Vektor.vynasob_skalarom(a.sila, dt), a.hybnost); }
public static void update_pozicia(Teleso a) { a.pozicia = Vektor.scitaj_vektory(a.pozicia, Vektor.vynasob_skalarom(Vektor.vydel_skalarom(a.hybnost, a.hmotnost), dt)); }
public Vesmir() { plocha = new Panel { Size = new Size(1400, 950), Location = new Point(5, 10), BackColor = Color.Black, }; Controls.Add(plocha); plocha.Visible = false; cas = new Label { Parent = plocha, Location = new Point(plocha.Location.X + 10, plocha.Location.Y + 10), AutoSize = true, BackColor = Color.Black, ForeColor = Color.White, Text = "Day: 0\nYear: 0" }; Controls.Add(cas); cas.BringToFront(); //obrazky planet { slnko_pic = new PictureBox { Size = new Size(30, 30), Location = new Point(0, 0), Image = Properties.Resources.slnko1, //BackColor = Color.Black, Parent = plocha, SizeMode = PictureBoxSizeMode.StretchImage, }; Controls.Add(slnko_pic); slnko_pic.Visible = false; merkur_pic = new PictureBox { Size = new Size(30, 30), Location = new Point(0, 0), BackColor = Color.Transparent, Parent = plocha, Image = Properties.Resources.merkur, SizeMode = PictureBoxSizeMode.StretchImage, }; Controls.Add(merkur_pic); merkur_pic.Visible = false; venusa_pic = new PictureBox { Size = new Size(30, 30), Location = new Point(0, 0), Parent = plocha, Image = Properties.Resources.venusa, SizeMode = PictureBoxSizeMode.StretchImage, }; Controls.Add(venusa_pic); venusa_pic.Visible = false; zem_pic = new PictureBox { Size = new Size(30, 30), Location = new Point(0, 0), Parent = plocha, Image = Properties.Resources.zem, SizeMode = PictureBoxSizeMode.StretchImage, }; Controls.Add(zem_pic); zem_pic.Visible = false; mars_pic = new PictureBox { Size = new Size(30, 30), Location = new Point(0, 0), Parent = plocha, Image = Properties.Resources.mars, SizeMode = PictureBoxSizeMode.StretchImage, }; Controls.Add(mars_pic); mars_pic.Visible = false; jupiter_pic = new PictureBox { Size = new Size(30, 30), Location = new Point(0, 0), Parent = plocha, Image = Properties.Resources.jupiter, SizeMode = PictureBoxSizeMode.StretchImage, }; Controls.Add(jupiter_pic); jupiter_pic.Visible = false; saturn_pic = new PictureBox { Size = new Size(30, 30), Location = new Point(0, 0), BackColor = Color.Transparent, Parent = plocha, Image = Properties.Resources.saturn, SizeMode = PictureBoxSizeMode.StretchImage, }; Controls.Add(saturn_pic); saturn_pic.Visible = false; uran_pic = new PictureBox { Size = new Size(30, 30), Location = new Point(0, 0), BackColor = Color.Transparent, Parent = plocha, Image = Properties.Resources.uran, SizeMode = PictureBoxSizeMode.StretchImage, }; Controls.Add(uran_pic); uran_pic.Visible = false; neptun_pic = new PictureBox { Size = new Size(30, 30), Location = new Point(0, 0), BackColor = Color.Transparent, Parent = plocha, Image = Properties.Resources.neptun, SizeMode = PictureBoxSizeMode.StretchImage, }; Controls.Add(neptun_pic); neptun_pic.Visible = false; } G = 6.67 * Math.Pow(10, -11); G = G * (5.972 / 3.375) * Math.Pow(10, -9); //nacitanie vstupu { var data = Properties.Resources.planety.Split(Convert.ToChar("\n")); //nazov, m, e, a, r Slnko = new Teleso(data[1].Split(), slnko_pic); Merkur = new Teleso(data[2].Split(), merkur_pic); Venusa = new Teleso(data[3].Split(), venusa_pic); Zem = new Teleso(data[4].Split(), zem_pic); Mars = new Teleso(data[5].Split(), mars_pic); Jupiter = new Teleso(data[6].Split(), jupiter_pic); Saturn = new Teleso(data[7].Split(), saturn_pic); Uran = new Teleso(data[8].Split(), uran_pic); Neptun = new Teleso(data[9].Split(), neptun_pic); } objekty_k_dispozicii = new Teleso[] { Slnko, Merkur, Venusa, Zem, Mars, Jupiter, Saturn, Uran, Neptun}; viditelne_objekty = new List<Teleso>(); viditelne_objekty.Add(Slnko); viditelne_objekty.Add(Merkur); viditelne_objekty.Add(Venusa); viditelne_objekty.Add(Zem); viditelne_objekty.Add(Mars); viditelne_objekty.Add(Jupiter); viditelne_objekty.Add(Saturn); viditelne_objekty.Add(Uran); viditelne_objekty.Add(Neptun); //mod = true; sustava = new Sustava(G, dt, objekty_k_dispozicii); //posledne presne pre neptun: dt = 1000000 dt = 300000; t = 0; zapnut = new Button { Location = new Point(500, 500), Size = new Size(400, 50), Text = "Start the simulation", Parent = plocha }; Controls.Add(zapnut); zapnut.BringToFront(); zapnut.Click += new EventHandler(zapnut_Click); //zapnut.Visible = false; reset = new Button { Size = new Size(200,45), Location = new Point(1675,15), Text = "Reset", Font = new Font(Font.FontFamily, 12) }; Controls.Add(reset); reset.Click += new EventHandler(reset_Click); mode = new Button { Text = "Mode: Heliocentric", Location = new Point(1450,70), Size = new Size (430,40), Font = new Font(Font.FontFamily,12) }; Controls.Add(mode); mode.Click += new EventHandler(mode_Click); timer = new Timer { Interval = 1, }; timer.Tick += new EventHandler(tick); //timer.Start(); start_stop = new Button { Location = new Point(1450, 15), Size = new Size(200,45), Text = "Start", Font = new Font(Font.FontFamily, 12) }; Controls.Add(start_stop); start_stop.Click += new EventHandler(start_stop_Click); kresli = new Vykreslovanie(sustava, plocha); //kresli.preskaluj(sustava); //kresli.helio(); sustava.mod = true; InitializeComponent(); }