protected MeridianCoor GetSouthBasin(MeridianCoor basin) { if (basin.Ring == MaxRing) { return(_symmetricPoles ? PixMan.Pixels[MaxRing - 2] : null); } return(PixMan.Pixels[basin.Ring]); }
/// <summary> /// PixMan.Pixels ordered asc /// PixMan.Pixels.Length often != HealpixManager.RingsCount and maybe PixMan.Pixels.Length == _maxRing /// </summary> protected new MeridianCoor GetNorthBasin(MeridianCoor basin) { if (basin.Ring == 1) { return(_symmetricPoles ? PixMan.Pixels[1] : null); } return(PixMan.Pixels[basin.Ring - 2]); }
/// <summary> /// for meridian projection /// </summary> internal double Move(MeridianCoor basin, MeridianCoor toBasin, NeighborVert to) { var from = 1 - (int)to; return(toBasin == null ? 0 : PutV(basin, toBasin, (basin.Hto[(int)to] - toBasin.Hto[from]) / 2, (int)to, from)); }
protected MeridianCoor GetNorthBasin(MeridianCoor basin) { if (basin.Ring == 1) { return(null); } var northBasin = PixMan.Pixels.Length == HealpixManager.Npix ? PixMan.Pixels[HealpixManager.Neibors.NorthMean(basin)] : (from p in PixMan.Pixels where p.Ring == basin.Ring - 1 select p).First(); /*slow*/ if (northBasin.Ring == basin.Ring) { throw new ApplicationException("northBasin.Ring == basin.Ring"); } return(northBasin); }
private MeridianWater <MeridianCoor> GetData( bool fullMeridian = false, bool excite = false, BottomForm bottomForm = BottomForm.No) { var man = new HealpixManager(9); //2 is good too northBasin = man.GetCenter <MeridianCoor>(0); basin = man.GetCenter <MeridianCoor>(4); southBasin = man.GetCenter <MeridianCoor>(12); var pix = fullMeridian // -.=.=.- ? new[] { northBasin, basin, southBasin } // -.=.- : new[] { northBasin, basin }; var data = new MeridianWater <MeridianCoor>(man, pix, false); data.GradientAndHeightCrosses(); if (excite) { //data.Water.Move() basin.hOQ = HeightExcitement; data.GradientAndHeightCrosses(); } switch (bottomForm) { case BottomForm.Shallow: foreach (var t in pix) { t.Depth = 0; } break; case BottomForm.InDepth: foreach (var t in pix) { t.Depth = HeightExcitement; } break; case BottomForm.BasinExcited: foreach (var t in pix) { t.Depth = t == basin ? -HeightExcitement : HeightExcitement; } break; case BottomForm.BasinInDepth: foreach (var t in pix) { t.Depth = t == basin ? HeightExcitement : 0; } break; case BottomForm.ShallowSouth: foreach (var t in pix) { t.Depth = t == southBasin ? 0 : HeightExcitement; } break; case BottomForm.NorthBasinInDepth: northBasin.Depth = HeightExcitement; basin.Depth = -HeightExcitement; southBasin.Depth = 0; break; case BottomForm.ReliefLikeWater: foreach (var t in pix) { t.Depth = (int)-t.hOQ; } break; } return(data); }
public override double?GetAltitude(MeridianCoor basin) { return(basin.gHpure * 1000); }