/// <summary> /// /// </summary> /// <param name="anaTimePeriod"></param> /// <param name="win"></param> /// <param name="sun"></param> /// <param name="influencedLine"></param> /// <returns></returns> internal string AddInfluencedTime( AnalysisTimePeriod anaTimePeriod, Windows win, Sun sun, IrraditedBuilding irraditedBuiding) { Dictionary <string, int> partialInfTimeTable = new Dictionary <string, int>(); double startTime, endTime, interval; startTime = dataTime2Hour(anaTimePeriod.StartTime); endTime = dataTime2Hour(anaTimePeriod.EndTime); interval = anaTimePeriod.IntervalInHour; double now; for (now = startTime; now <= endTime; now += interval) { double h0 = sun.CalcElevation(win.Latitude, win.Longitude, now); double alpha = sun.CalcAzimuth(win.Latitude, win.Longitude, now); if (h0 <= 0 || (alpha + win.Direction >= Math.PI / 2 && win.Direction != Math.PI) || (alpha + win.Direction <= -1 * Math.PI / 2 && win.Direction != Math.PI) || (win.Direction == Math.PI && (alpha + win.Direction <= 1.50 * Math.PI) && (alpha + win.Direction >= Math.PI / 2.0) )) { int cnt = partialInfTimeTable.Count; if (cnt == 0 || partialInfTimeTable.ElementAt(cnt - 1).Value != 0) { partialInfTimeTable.Add(convertTimeDouble2String(now), 0); } } else { ed.WriteMessage("\n Time : " + convertTimeDouble2String(now) + " "); Point3dCollection points = GetReflectedLinePoints(win, sun); //irraditedBuiding.Sun = sun; double dist = irraditedBuiding.midP2LineInDirection(win.Entity, points[0] - points[1]); irraditedBuiding.AngleOfBuildingGap = Math.Atan((win.Top - irraditedBuiding.Height) / dist); irraditedBuiding.AngleOfIrraditedBuilding = Math.Atan(irraditedBuiding.Height / dist); irraditedBuiding.IrraditedStatus = irraditedBuiding.GetIrraditedStatus(points, sun.Elevation); PartialTimePeriod(points, irraditedBuiding, now, partialInfTimeTable); } } return(convertDict2String(partialInfTimeTable, endTime)); }