public void geo() { for (int i = 0; i < sustava.objekty.Length; i++) { posun[i] = new Vektor(panel.Width / 2, panel.Height / 2); pozicie_pix_vykr[i] = Vektor.scitaj_vektory(Vektor.odcitaj_vektor(pozicie_pix_zakl[i], pozicie_pix_zakl[3]), posun[i]); pom_body[i].Add(new Point((int)pozicie_pix_vykr[i].x, (int)pozicie_pix_vykr[i].y)); } }
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 void pretypuj_polohove_vektory() { //Console.WriteLine("posun: "+ posun.x.ToString()); for (int i = 0; i < pozicie_pix_zakl.Length; i++) { pozicie_pix_vykr[i] = Vektor.scitaj_vektory(posun[i], pozicie_pix_zakl[i]); pom_body[i].Add(new Point((int)pozicie_pix_vykr[i].x, (int)pozicie_pix_vykr[i].y)); //Console.WriteLine("nove pozicie: " + pozicie_pix_vykr[i].x.ToString() + " " + pozicie_pix_vykr[i].y.ToString()); } }
//prenasobi skutocne hodnoty konstantou public void preskaluj(Sustava sus) { for (int i = 0; i < pozicie_pix_zakl.Length; i++) { pozicie_pix_zakl[i] = Vektor.vynasob_skalarom(sus.objekty[i].pozicia, k); pozicie_pix_zakl[i].x = Math.Round(pozicie_pix_zakl[i].x); pozicie_pix_zakl[i].y = Math.Round(pozicie_pix_zakl[i].y); } }
public void nastav_pociatocny_stav() { objekty[0].pozicia = new Vektor(0, 0); for (int i = 1; i < objekty.Length; i++) { objekty[i].pozicia = objekty[i].pociatocna_pozicia; objekty[i].sila = new Vektor(0, 0); objekty[i].hybnost = Vektor.vynasob_skalarom(new Vektor(0, -1), objekty[i].hmotnost * objekty[i].zisti_init_rychlost()); } }
public Vykreslovanie(Sustava sus, Panel pan) { t = 0; stopa = new bool[sus.objekty.Length]; posun = new Vektor[sus.objekty.Length]; sustava = sus; telesa = new PictureBox[sus.objekty.Length]; pozicie_pix_zakl = new Vektor[sus.objekty.Length]; pozicie_pix_vykr = new Vektor[sus.objekty.Length]; polomery_pix = new int[sus.objekty.Length]; pom_body = new List <Point> [sus.objekty.Length]; vychodzia_pozicia = new Vektor[sus.objekty.Length]; last_index = sus.objekty.Length - 1; //polomery_pix = new int[sus.objekty.Length]; panel = pan; double pom1 = panel.Size.Height - 40; double pom2 = sus.objekty[last_index].hl_poloos * 2; k = pom1 / pom2; //Console.WriteLine(k); g = panel.CreateGraphics(); for (int i = 0; i < sus.objekty.Length; i++) { pom_body[i] = new List <Point>(); } preskaluj(sus); pen = new Pen(Brushes.Red); //potial ok if (sustava.mod == true) { helio(); } else { geo(); } //pretypuj_polohove_vektory(); for (int i = 0; i < sus.objekty.Length; i++) { telesa[i] = sustava.objekty[i].kruh; telesa[i].Location = new Point((int)(pozicie_pix_vykr[i].x - polomery_pix[i]), (int)(pozicie_pix_vykr[i].y - polomery_pix[i])); stopa[i] = sus.objekty[i].stopa; vychodzia_pozicia[i] = new Vektor(telesa[i].Location.X, telesa[i].Location.Y); //Console.WriteLine("rectangle: " + telesa[i].X + " " + telesa[i].Y + " " + telesa[i].Width + " " + telesa[i].Height); } }
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 helio() { double p = 1 - sustava.objekty[last_index].excentricita; Vektor pom = new Vektor(sustava.objekty[last_index].hl_poloos * p, 0); for (int i = 0; i < sustava.objekty.Length; i++) { posun[i] = Vektor.vynasob_skalarom(pom, k); posun[i].x += 50; posun[i].y = panel.Size.Height / 2; } pretypuj_polohove_vektory(); }
//public Teleso() { } public Teleso(string[] zoznam, PictureBox obrazok) { kruh = obrazok; viditelnost = true; polomer = (Convert.ToDouble(zoznam[4])); //[r_Zeme] hmotnost = (Convert.ToDouble(zoznam[1])); //[m_Zeme] hl_poloos = (Convert.ToDouble(zoznam[3])); //[AU] excentricita = Convert.ToDouble(zoznam[2]); pociatocna_pozicia = new Vektor(hl_poloos, 0); zisti_init_hybnost(); stopa = true; sila = new Vektor(0, 0); }
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 static Vektor odcitaj_vektor(Vektor a, Vektor b) { return(new Vektor(a.x - b.x, a.y - b.y)); }
public void zisti_init_hybnost() { hybnost = Vektor.vynasob_skalarom(new Vektor(0, -1), hmotnost * zisti_init_rychlost()); }
public static Vektor vynasob_skalarom(Vektor a, double b) { return(new Vektor(a.x * b, a.y * b)); }
public static Vektor vydel_skalarom(Vektor a, double b) { return(new Vektor(a.x / b, a.y / b)); }
public static double velkost_vektora(Vektor a) { return(Math.Sqrt(Math.Pow(a.x, 2) + Math.Pow(a.y, 2))); }
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 Vektor scitaj_vektory(Vektor a, Vektor b) { return(new Vektor(a.x + b.x, a.y + b.y)); }