/// <summary> /// Hakee alfan taulukosta tuentatapauksen, sarakelisän ja sivujen suhteen avulla /// </summary> /// <param name="tapaus">Tuentatapaus</param> /// <param name="taulukonSarakeLisa">ays = 0, axs = 1, ayf = 2, axf = 3</param> /// <param name="sivujenSuhde">Kentän sivujen suhde</param> /// <returns>Palauttaa taulukosta alfan</returns> private double HaeTaulukostaAlfa(Kentta.Tuentatapaukset tapaus, int taulukonSarakeLisa, double sivujenSuhde) { double palautus = -1; int taulukonIndeksi = 0; if (sivujenSuhde >= 2) { taulukonIndeksi = (int)(sivujenSuhde * 10) % 10 + 10; } else { taulukonIndeksi = (int)(sivujenSuhde * 10) % 10; } switch (tapaus) { case Kentta.Tuentatapaukset.EiTukia: palautus = momenttiTaulukko[(int)Kentta.Tuentatapaukset.EiTukia + taulukonSarakeLisa, taulukonIndeksi]; break; case Kentta.Tuentatapaukset.TukiPitkallaSivulla: palautus = momenttiTaulukko[(int)Kentta.Tuentatapaukset.TukiPitkallaSivulla + taulukonSarakeLisa, taulukonIndeksi]; break; case Kentta.Tuentatapaukset.TukiLyhyellaSivulla: palautus = momenttiTaulukko[(int)Kentta.Tuentatapaukset.TukiLyhyellaSivulla + taulukonSarakeLisa, taulukonIndeksi]; break; case Kentta.Tuentatapaukset.TukiaKaksiVierekkain: palautus = momenttiTaulukko[(int)Kentta.Tuentatapaukset.TukiaKaksiVierekkain + taulukonSarakeLisa, taulukonIndeksi]; break; case Kentta.Tuentatapaukset.TukiaKaksiVastakkainLSivulla: palautus = momenttiTaulukko[(int)Kentta.Tuentatapaukset.TukiaKaksiVastakkainLSivulla + taulukonSarakeLisa, taulukonIndeksi]; break; case Kentta.Tuentatapaukset.TukiaKaksiVastakkainPSivulla: palautus = momenttiTaulukko[(int)Kentta.Tuentatapaukset.TukiaKaksiVastakkainPSivulla + taulukonSarakeLisa, taulukonIndeksi]; break; case Kentta.Tuentatapaukset.TukiaKolmeLSivuVapaa: palautus = momenttiTaulukko[(int)Kentta.Tuentatapaukset.TukiaKolmeLSivuVapaa + taulukonSarakeLisa, taulukonIndeksi]; break; case Kentta.Tuentatapaukset.TukiaKolmePSivuVapaa: palautus = momenttiTaulukko[(int)Kentta.Tuentatapaukset.TukiaKolmePSivuVapaa + taulukonSarakeLisa, taulukonIndeksi]; break; case Kentta.Tuentatapaukset.TukiaNelja: palautus = momenttiTaulukko[(int)Kentta.Tuentatapaukset.TukiaNelja + taulukonSarakeLisa, taulukonIndeksi]; break; } return(palautus); }
/// <summary> /// Hakee taulukosta ylös- ja alaspäin pyöristetyt arvot sivujen suhteesta ja laskee interpoloimalla /// alfan arvon /// </summary> /// <param name="tapaus"></param> /// <param name="pyoristysYlos">Sivujen suhde pyöristettynä yhden desimaalin tarkkuuteen ylöspäin</param> /// <param name="pyoristysAlas">Sivujen suhde pyöristettynä yhden desimaalin tarkkuuteen alaspäin</param> /// <param name="interpolointikerroin">Etukäteen laskettu toinen desimaali sivujen suhteesta</param> /// <param name="taulukkoindeksi">ays = 0, axs = 1, ayf = 2, axf = 3</param> /// <returns>Alfan interpoloituna double tietotyypissä</returns> private double LaskeAlfa(Kentta.Tuentatapaukset tapaus, double pyoristysYlos, double pyoristysAlas, double interpolointikerroin, int taulukkoindeksi) { double ays1 = HaeTaulukostaAlfa(tapaus, taulukkoindeksi, pyoristysYlos); double ays2 = HaeTaulukostaAlfa(tapaus, taulukkoindeksi, pyoristysAlas); if (virheenkorjausMomentti) { MessageBox.Show("\tAlfa taulukosta" + "\n\nTapaus: " + tapaus + "\nTaulukkoindeksi (ys = 0, xs = 1, yf = 2, xf = 3): " + taulukkoindeksi + "\nSivujen suhde: " + sivujenSuhde + "\nPyöristys alas alfa: " + ays2 + "\nPyöristys ylös alfa: " + ays1 + "\nInterpolointikerroin: " + interpolointikerroin, "Momentti"); } return(Math.Abs((ays2 - ays1)) * interpolointikerroin + Math.Min(ays1, ays2)); }