const int odsazeni = 5; //čím menší tím budou šipky blíže k sobě #endregion Fields #region Constructors public ElektronovyDiagram(Konfigurace subKonfigurace) { InitializeComponent(); //rozpoznání orbitalu int elektronyKeKonfiguraci = subKonfigurace.PocetElektronu; ToolTip = subKonfigurace.ToString(); Width = (int) (subKonfigurace.TypOrbitalu)*100 + 50; //přizpůsobení šířky //vykreslení potřebného množství čtverečku for (int count = 0; count < (int) subKonfigurace.TypOrbitalu * 2 + 1; count++) { Rectangle rect = new Rectangle() {Width = 50,Height = 50, Stroke = Brushes.Gray, Fill = Brushes.White,StrokeThickness = 3}; Canvas.SetLeft(rect,count * 50); KresliciPlocha.Children.Add(rect); } //výstavbový princip //spinové pravidlo //elektrony s kladným spinem for (int count = 0; count < (int)subKonfigurace.TypOrbitalu * 2 + 1; count++) { if (elektronyKeKonfiguraci > 0) { KresliciPlocha.Children.Add(sipkaNahoru(count*50 + 25)); elektronyKeKonfiguraci--; } } //elektrony s opačným spinem for (int count = 0; count < (int)subKonfigurace.TypOrbitalu * 2 + 1; count++) { if (elektronyKeKonfiguraci > 0) { KresliciPlocha.Children.Add(sipkaDolu(count * 50 + 25)); elektronyKeKonfiguraci--; } } }
/// <summary> /// Vytvoří konfiguraci pro orbital s /// </summary> /// <param name="cisloPeriody"></param> /// <returns>Konfiguraci pro orbital s</returns> private Konfigurace Skonfigurace(int cisloPeriody) { if (elektronyKeKonfiguraci == 0) return null; Konfigurace orbitalS; if (elektronyKeKonfiguraci >= 2) // pokud tam je 2 a více elektronů { orbitalS = new Konfigurace(cisloPeriody, TypOrbitalu.s, 2); elektronyKeKonfiguraci -= 2; } else { orbitalS = new Konfigurace(cisloPeriody, TypOrbitalu.s, elektronyKeKonfiguraci); elektronyKeKonfiguraci = 0; } return orbitalS; }
/// <summary> /// Vytvoří konfiguraci pro orbital P /// </summary> /// <param name="cisloPeriody"></param> /// <returns>Konfigurace orbitalu P</returns> private Konfigurace Pkonfigurace(int cisloPeriody) { if (elektronyKeKonfiguraci == 0) return null; Konfigurace orbitalP; if (elektronyKeKonfiguraci >= 6) // pokud tam je 6 a více elektronů { orbitalP = new Konfigurace(cisloPeriody, TypOrbitalu.p, 6); elektronyKeKonfiguraci -= 6; } else { orbitalP = new Konfigurace(cisloPeriody, TypOrbitalu.p, elektronyKeKonfiguraci); elektronyKeKonfiguraci = 0; } return orbitalP; }
/// <summary> /// Vytvoří konfiguraci pro orbital F /// </summary> /// <param name="cisloPeriody"></param> /// <returns>Konfigurace orbitalu F</returns> private Konfigurace Fkonfigurace(int cisloPeriody) { if (elektronyKeKonfiguraci == 0) return null; Konfigurace orbitalF; if (elektronyKeKonfiguraci >= 14) // pokud tam je 14 a více elektronů { orbitalF = new Konfigurace(cisloPeriody - 2, TypOrbitalu.f, 14); elektronyKeKonfiguraci -= 14; } else { orbitalF = new Konfigurace(cisloPeriody - 2, TypOrbitalu.f, elektronyKeKonfiguraci); elektronyKeKonfiguraci = 0; } return orbitalF; }
/// <summary> /// Vytvoří konfiguraci pro orbital D /// </summary> /// <param name="cisloPeriody"></param> /// <returns>Konfigurace orbitalu D</returns> private Konfigurace Dkonfigurace(int cisloPeriody) { if (elektronyKeKonfiguraci == 0) return null; Konfigurace orbitalD; if (elektronyKeKonfiguraci >= 10) // pokud tam je 10 a více elektronů { orbitalD = new Konfigurace(cisloPeriody - 1, TypOrbitalu.d, 10); elektronyKeKonfiguraci -= 10; } else { orbitalD = new Konfigurace(cisloPeriody - 1, TypOrbitalu.d, elektronyKeKonfiguraci); elektronyKeKonfiguraci = 0; } return orbitalD; }