public HourStemAndBranchChart Step8(List <HourStemAndBranchChart> chart, Stems stem) { HourStemAndBranchChart hourStemAndBranchChart = new HourStemAndBranchChart(); foreach (HourStemAndBranchChart c in chart) { if (c.DayStems.Contains(stem)) { hourStemAndBranchChart = c; break; } } return(hourStemAndBranchChart); }
public BaZiCalculator(DateTime birthDate, long birthTime) { FourPillarsResult = new FourPillarsTable(); BirthDate = birthDate; BirthTime = birthTime; BirthYear = BirthDate.Year; BirthMonth = BirthDate.Month; BirthDay = BirthDate.Day; DataLoad dataLoad = new DataLoad(); List <TwelveStageGrowthCycleChart> twelveStageGrowthCycleChart = dataLoad.LoadTwelveStageGrowthCycleChartData(); List <ChineseCalendarChart> chineseCalendarChart = dataLoad.LoadChineseCalendarChartData(); List <DayBinomialsChart> dayBinomialsChart = dataLoad.LoadDayBinomialsChartData(); List <HourStemAndBranchChart> hourStemAndBranchChart = dataLoad.LoadHourStemAndBranchChartData(); List <HiddenElementsChart> hiddenElementsChart = dataLoad.LoadHiddenElementsChartData(); List <LeapYearMonthBinomialChart> leapYearMonthBinomialChart = dataLoad.LoadLeapYearMonthBinomialChartData(); List <MonthBinomialChart> monthBinomialChart = dataLoad.LoadMonthBinomialChartData(); List <StemsAndBranchesCycleOf60> stemsAndBranchesCycleOf60 = dataLoad.LoadStemsAndBranchesCycleOf60Data(); List <YinYangMeridianChart> yinYangMeridianChart = dataLoad.LoadYinYangMeridianChartData(); //step 2 int yearNum = chineseCalendarChart.Find((ChineseCalendarChart obj) => obj.Year.Year == BirthYear).Year.Number; //step 3 FourPillarsResult.YearStem = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == yearNum).Stem; FourPillarsResult.YearBranch = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == yearNum).Branch; //step 4 int monthNum = Step4(chineseCalendarChart.Find((obj) => obj.Year.Year == BirthYear)); //step 5 FourPillarsResult.MonthStem = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == monthNum).Stem; FourPillarsResult.MonthBranch = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == monthNum).Branch; //step 6 int dayBinomial = Step6(dayBinomialsChart.Find((obj) => obj.Year == BirthYear), monthBinomialChart.Find((obj) => obj.Month == BirthMonth)); //step 7 FourPillarsResult.DayStem = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == dayBinomial).Stem; FourPillarsResult.DayBranch = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == dayBinomial).Branch; //step 8 HourStemAndBranchChart hsbc = Step8(hourStemAndBranchChart, FourPillarsResult.DayStem); FourPillarsResult.HourStem = hsbc.HourStems.Find((obj) => obj.TimeOfBirth.TimeStart <= BirthTime && obj.TimeOfBirth.TimeEnd >= BirthTime).Stem; FourPillarsResult.HourBranch = hsbc.HourStems.Find((obj) => obj.TimeOfBirth.TimeStart <= BirthTime && obj.TimeOfBirth.TimeEnd >= BirthTime).Animal; //step 9 HiddenElementsChart hiddenElements = new HiddenElementsChart(); hiddenElements = hiddenElementsChart.Find((obj) => obj.Animal == FourPillarsResult.YearBranch); FourPillarsResult.YearHiddenElements = new HiddenElementsChart(); FourPillarsResult.YearHiddenElements.HiddenElement = hiddenElements.MainElement; FourPillarsResult.YearHiddenElements.HiddenElementValue = hiddenElements.MainElementValue; FourPillarsResult.YearHiddenElements.HiddenElement2 = hiddenElements.HiddenElement; FourPillarsResult.YearHiddenElements.HiddenElement2Value = hiddenElements.HiddenElementValue; FourPillarsResult.YearHiddenElements.HiddenElement3 = hiddenElements.HiddenElement2; FourPillarsResult.YearHiddenElements.HiddenElement3Value = hiddenElements.HiddenElement2Value; hiddenElements = hiddenElementsChart.Find((obj) => obj.Animal == FourPillarsResult.MonthBranch); FourPillarsResult.MonthHiddenElements = new HiddenElementsChart(); FourPillarsResult.MonthHiddenElements.HiddenElement = hiddenElements.MainElement; FourPillarsResult.MonthHiddenElements.HiddenElementValue = hiddenElements.MainElementValue; FourPillarsResult.MonthHiddenElements.HiddenElement2 = hiddenElements.HiddenElement; FourPillarsResult.MonthHiddenElements.HiddenElement2Value = hiddenElements.HiddenElementValue; FourPillarsResult.MonthHiddenElements.HiddenElement3 = hiddenElements.HiddenElement2; FourPillarsResult.MonthHiddenElements.HiddenElement3Value = hiddenElements.HiddenElement2Value; hiddenElements = hiddenElementsChart.Find((obj) => obj.Animal == FourPillarsResult.DayBranch); FourPillarsResult.DayHiddenElements = new HiddenElementsChart(); FourPillarsResult.DayHiddenElements.HiddenElement = hiddenElements.MainElement; FourPillarsResult.DayHiddenElements.HiddenElementValue = hiddenElements.MainElementValue; FourPillarsResult.DayHiddenElements.HiddenElement2 = hiddenElements.HiddenElement; FourPillarsResult.DayHiddenElements.HiddenElement2Value = hiddenElements.HiddenElementValue; FourPillarsResult.DayHiddenElements.HiddenElement3 = hiddenElements.HiddenElement2; FourPillarsResult.DayHiddenElements.HiddenElement3Value = hiddenElements.HiddenElement2Value; hiddenElements = hiddenElementsChart.Find((obj) => obj.Animal == FourPillarsResult.HourBranch); FourPillarsResult.HourHiddenElements = new HiddenElementsChart(); FourPillarsResult.HourHiddenElements.HiddenElement = hiddenElements.MainElement; FourPillarsResult.HourHiddenElements.HiddenElementValue = hiddenElements.MainElementValue; FourPillarsResult.HourHiddenElements.HiddenElement2 = hiddenElements.HiddenElement; FourPillarsResult.HourHiddenElements.HiddenElement2Value = hiddenElements.HiddenElementValue; FourPillarsResult.HourHiddenElements.HiddenElement3 = hiddenElements.HiddenElement2; FourPillarsResult.HourHiddenElements.HiddenElement3Value = hiddenElements.HiddenElement2Value; //step 10 FourPillarsResult.YearStemValue = 100; FourPillarsResult.MonthStemValue = 100; FourPillarsResult.DayStemValue = 100; FourPillarsResult.HourStemValue = 100; //step 11 ElementTotals = new ElementTotal(); ElementTotals.WoodTotal = Step11(FourPillarsResult, Stems.YangWood) + Step11(FourPillarsResult, Stems.YinWood); ElementTotals.FireTotal = Step11(FourPillarsResult, Stems.YangFire) + Step11(FourPillarsResult, Stems.YinFire); ElementTotals.EarthTotal = Step11(FourPillarsResult, Stems.YangEarth) + Step11(FourPillarsResult, Stems.YinEarth); ElementTotals.MetalTotal = Step11(FourPillarsResult, Stems.YangMetal) + Step11(FourPillarsResult, Stems.YinMetal); ElementTotals.WaterTotal = Step11(FourPillarsResult, Stems.YangWater) + Step11(FourPillarsResult, Stems.YinWater); //step 12 TwelveStageGrowthCycleChart twelveStage = twelveStageGrowthCycleChart.Find((obj) => obj.Wood.Animal == FourPillarsResult.MonthBranch); ElementTotals.WoodTotal = ElementTotals.WoodTotal * twelveStage.Wood.Percent / 100; ElementTotals.FireTotal = ElementTotals.FireTotal * twelveStage.Fire.Percent / 100; ElementTotals.EarthTotal = ElementTotals.EarthTotal * twelveStage.Earth.Percent / 100; ElementTotals.MetalTotal = ElementTotals.MetalTotal * twelveStage.Metal.Percent / 100; ElementTotals.WaterTotal = ElementTotals.WaterTotal * twelveStage.Water.Percent / 100; //step 13 double elementTotals = ElementTotals.WoodTotal + ElementTotals.FireTotal + ElementTotals.EarthTotal + ElementTotals.MetalTotal + ElementTotals.WaterTotal; ElementTotals.WoodPercent = (int)(ElementTotals.WoodTotal / elementTotals * 100); ElementTotals.FirePercent = (int)(ElementTotals.FireTotal / elementTotals * 100); ElementTotals.EarthPercent = (int)(ElementTotals.EarthTotal / elementTotals * 100); ElementTotals.MetalPercent = (int)(ElementTotals.MetalTotal / elementTotals * 100); ElementTotals.WaterPercent = (int)(ElementTotals.WaterTotal / elementTotals * 100); // Step 14 FourPillarsResult.DayMasterLabel = Step14(FourPillarsResult.DayStem); //step 16 Step16(FourPillarsResult, yinYangMeridianChart); YinYangMeridianResult = yinYangMeridianChart; }
public BaZiCalculator(DateTime birthDate, long birthTime, bool noBirthTime) { FourPillarsResult = new FourPillarsTable(); BirthDate = birthDate; BirthTime = birthTime; NoBirthTime = noBirthTime; BirthYear = BirthDate.Year; BirthMonth = BirthDate.Month; BirthDay = BirthDate.Day; DataLoad dataLoad = new DataLoad(); List <TwelveStageGrowthCycleChart> twelveStageGrowthCycleChart = dataLoad.LoadTwelveStageGrowthCycleChartData(); List <ChineseCalendarChart> chineseCalendarChart = dataLoad.LoadChineseCalendarChartData(); List <DayBinomialsChart> dayBinomialsChart = dataLoad.LoadDayBinomialsChartData(); List <HourStemAndBranchChart> hourStemAndBranchChart = dataLoad.LoadHourStemAndBranchChartData(); List <HiddenElementsChart> hiddenElementsChart = dataLoad.LoadHiddenElementsChartData(); List <LeapYearMonthBinomialChart> leapYearMonthBinomialChart = dataLoad.LoadLeapYearMonthBinomialChartData(); List <MonthBinomialChart> monthBinomialChart = dataLoad.LoadMonthBinomialChartData(); List <StemsAndBranchesCycleOf60> stemsAndBranchesCycleOf60 = dataLoad.LoadStemsAndBranchesCycleOf60Data(); List <YinYangMeridianChart> yinYangMeridianChart = dataLoad.LoadYinYangMeridianChartData(); //step 2 ChineseCalendarChart cal = chineseCalendarChart.Find((obj) => obj.Year.Year == BirthYear); int yearNum = 0; if (BirthDate < cal.MonthNumberChart[1].Month) { yearNum = chineseCalendarChart.Find((ChineseCalendarChart obj) => obj.Year.Year == BirthYear - 1).Year.Number; } else { yearNum = chineseCalendarChart.Find((ChineseCalendarChart obj) => obj.Year.Year == BirthYear).Year.Number; } //step 3 FourPillarsResult.YearStem = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == yearNum).Stem; FourPillarsResult.YearBranch = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == yearNum).Branch; //step 4 DateTime monthDay = BirthDate; if (BirthDate < cal.MonthNumberChart[1].Month) { //monthDay = monthDay.AddYears(-1); cal = chineseCalendarChart.Find((obj) => obj.Year.Year == BirthYear - 1); } int monthNum = Step4(cal, monthDay); //step 5 FourPillarsResult.MonthStem = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == monthNum).Stem; FourPillarsResult.MonthBranch = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == monthNum).Branch; //step 6 DayBinomialsChart dbc = dayBinomialsChart.Find((obj) => obj.Year == BirthYear); IMonthBinomialChart bc; if (dbc.LeapYear) { bc = leapYearMonthBinomialChart.Find((obj) => obj.Month == BirthMonth); } else { bc = monthBinomialChart.Find((obj) => obj.Month == BirthMonth); } int dayBinomial = Step6(dbc, bc); //step 7 FourPillarsResult.DayStem = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == dayBinomial).Stem; FourPillarsResult.DayBranch = stemsAndBranchesCycleOf60.Find((obj) => obj.Number == dayBinomial).Branch; //step 8 HourStemAndBranchChart hsbc = Step8(hourStemAndBranchChart, FourPillarsResult.DayStem); HourStem hs = new HourStem(); if (!NoBirthTime) { if (BirthTime < 2300 && BirthTime >= 100) { hs = hsbc.HourStems.Find((obj) => obj.TimeOfBirth.TimeStart <= BirthTime && obj.TimeOfBirth.TimeEnd >= BirthTime); } else { if (BirthTime >= 2300) { hs = hsbc.HourStems.Find((obj) => obj.TimeOfBirth.TimeStart >= 2300 && obj.TimeOfBirth.TimeEnd < 100); } else { hs = hsbc.HourStems.Find((obj) => obj.TimeOfBirth.TimeStart >= 2300 && BirthTime <= obj.TimeOfBirth.TimeEnd); } } FourPillarsResult.HourStem = hs.Stem; // hsbc.HourStems.Find((obj) => obj.TimeOfBirth.TimeStart <= BirthTime && obj.TimeOfBirth.TimeEnd >= BirthTime).Stem; FourPillarsResult.HourBranch = hs.Animal; // hsbc.HourStems.Find((obj) => obj.TimeOfBirth.TimeStart <= BirthTime && obj.TimeOfBirth.TimeEnd >= BirthTime).Animal; } else { FourPillarsResult.HourStem = Stems.Empty; FourPillarsResult.HourBranch = Animals.Empty; } //step 9 HiddenElementsChart hiddenElements = new HiddenElementsChart(); hiddenElements = hiddenElementsChart.Find((obj) => obj.Animal == FourPillarsResult.YearBranch); FourPillarsResult.YearHiddenElements = new HiddenElementsChart(); FourPillarsResult.YearHiddenElements.HiddenElement = hiddenElements.MainElement; FourPillarsResult.YearHiddenElements.HiddenElementValue = hiddenElements.MainElementValue; FourPillarsResult.YearHiddenElements.HiddenElement2 = hiddenElements.HiddenElement; FourPillarsResult.YearHiddenElements.HiddenElement2Value = hiddenElements.HiddenElementValue; FourPillarsResult.YearHiddenElements.HiddenElement3 = hiddenElements.HiddenElement2; FourPillarsResult.YearHiddenElements.HiddenElement3Value = hiddenElements.HiddenElement2Value; hiddenElements = hiddenElementsChart.Find((obj) => obj.Animal == FourPillarsResult.MonthBranch); FourPillarsResult.MonthHiddenElements = new HiddenElementsChart(); FourPillarsResult.MonthHiddenElements.HiddenElement = hiddenElements.MainElement; FourPillarsResult.MonthHiddenElements.HiddenElementValue = hiddenElements.MainElementValue; FourPillarsResult.MonthHiddenElements.HiddenElement2 = hiddenElements.HiddenElement; FourPillarsResult.MonthHiddenElements.HiddenElement2Value = hiddenElements.HiddenElementValue; FourPillarsResult.MonthHiddenElements.HiddenElement3 = hiddenElements.HiddenElement2; FourPillarsResult.MonthHiddenElements.HiddenElement3Value = hiddenElements.HiddenElement2Value; hiddenElements = hiddenElementsChart.Find((obj) => obj.Animal == FourPillarsResult.DayBranch); FourPillarsResult.DayHiddenElements = new HiddenElementsChart(); FourPillarsResult.DayHiddenElements.HiddenElement = hiddenElements.MainElement; FourPillarsResult.DayHiddenElements.HiddenElementValue = hiddenElements.MainElementValue; FourPillarsResult.DayHiddenElements.HiddenElement2 = hiddenElements.HiddenElement; FourPillarsResult.DayHiddenElements.HiddenElement2Value = hiddenElements.HiddenElementValue; FourPillarsResult.DayHiddenElements.HiddenElement3 = hiddenElements.HiddenElement2; FourPillarsResult.DayHiddenElements.HiddenElement3Value = hiddenElements.HiddenElement2Value; if (!NoBirthTime) { hiddenElements = hiddenElementsChart.Find((obj) => obj.Animal == FourPillarsResult.HourBranch); FourPillarsResult.HourHiddenElements = new HiddenElementsChart(); FourPillarsResult.HourHiddenElements.HiddenElement = hiddenElements.MainElement; FourPillarsResult.HourHiddenElements.HiddenElementValue = hiddenElements.MainElementValue; FourPillarsResult.HourHiddenElements.HiddenElement2 = hiddenElements.HiddenElement; FourPillarsResult.HourHiddenElements.HiddenElement2Value = hiddenElements.HiddenElementValue; FourPillarsResult.HourHiddenElements.HiddenElement3 = hiddenElements.HiddenElement2; FourPillarsResult.HourHiddenElements.HiddenElement3Value = hiddenElements.HiddenElement2Value; } //step 10 FourPillarsResult.YearStemValue = 100; FourPillarsResult.MonthStemValue = 100; FourPillarsResult.DayStemValue = 100; FourPillarsResult.HourStemValue = 100; //step 11 ElementTotals = new ElementTotal(); ElementTotals.WoodTotal = Step11(FourPillarsResult, Stems.YangWood) + Step11(FourPillarsResult, Stems.YinWood); ElementTotals.FireTotal = Step11(FourPillarsResult, Stems.YangFire) + Step11(FourPillarsResult, Stems.YinFire); ElementTotals.EarthTotal = Step11(FourPillarsResult, Stems.YangEarth) + Step11(FourPillarsResult, Stems.YinEarth); ElementTotals.MetalTotal = Step11(FourPillarsResult, Stems.YangMetal) + Step11(FourPillarsResult, Stems.YinMetal); ElementTotals.WaterTotal = Step11(FourPillarsResult, Stems.YangWater) + Step11(FourPillarsResult, Stems.YinWater); //step 12 TwelveStageGrowthCycleChart twelveStage = twelveStageGrowthCycleChart.Find((obj) => obj.Wood.Animal == FourPillarsResult.MonthBranch); ElementTotals.WoodTotal = ElementTotals.WoodTotal * twelveStage.Wood.Percent / 100; twelveStage = twelveStageGrowthCycleChart.Find((obj) => obj.Fire.Animal == FourPillarsResult.MonthBranch); ElementTotals.FireTotal = ElementTotals.FireTotal * twelveStage.Fire.Percent / 100; twelveStage = twelveStageGrowthCycleChart.Find((obj) => obj.Earth.Animal == FourPillarsResult.MonthBranch); ElementTotals.EarthTotal = ElementTotals.EarthTotal * twelveStage.Earth.Percent / 100; twelveStage = twelveStageGrowthCycleChart.Find((obj) => obj.Metal.Animal == FourPillarsResult.MonthBranch); ElementTotals.MetalTotal = ElementTotals.MetalTotal * twelveStage.Metal.Percent / 100; twelveStage = twelveStageGrowthCycleChart.Find((obj) => obj.Water.Animal == FourPillarsResult.MonthBranch); ElementTotals.WaterTotal = ElementTotals.WaterTotal * twelveStage.Water.Percent / 100; //step 13 double elementTotals = ElementTotals.WoodTotal + ElementTotals.FireTotal + ElementTotals.EarthTotal + ElementTotals.MetalTotal + ElementTotals.WaterTotal; ElementTotals.WoodPercent = (int)Math.Round(ElementTotals.WoodTotal / elementTotals * 100); ElementTotals.FirePercent = (int)Math.Round(ElementTotals.FireTotal / elementTotals * 100); ElementTotals.EarthPercent = (int)Math.Round(ElementTotals.EarthTotal / elementTotals * 100); ElementTotals.MetalPercent = (int)Math.Round(ElementTotals.MetalTotal / elementTotals * 100); ElementTotals.WaterPercent = (int)Math.Round(ElementTotals.WaterTotal / elementTotals * 100); // Step 14 FourPillarsResult.DayMasterLabel = Step14(FourPillarsResult.DayStem); //step 16 Step16(FourPillarsResult, yinYangMeridianChart); YinYangMeridianResult = yinYangMeridianChart; }