private static double GetHto(BasinDotProduct basin, NeighborVert direction) { Basin3 inter; /*if (basin.Type.HasValue && NeighborManager.GetVert(basin.Type.Value) == direction) * { * var neibor = basin.Neibors[NeighborManager.GetOppositeHor(basin.Type.Value)]; * inter = neibor; * } * else*/ { Basin3 east; Basin3 west; if (direction == NeighborVert.North) { east = basin.Neibors[Direction.Ne]; west = basin.Neibors[Direction.Nw]; } else { east = basin.Neibors[Direction.Se]; west = basin.Neibors[Direction.Sw]; } inter = new Basin3 { }; var lambda = (east.Lambda + west.Lambda).Value / 2; inter.Qb = new Point2D(.5 * (east.Qb.X + west.Qb.X) //correct projection * Math.Cos(basin.Lambda.Value - lambda), .5 * (east.Qb.Y + west.Qb.Y)); } return(basin.Intersect(inter)); }
private static void TestNeighbors(Basin3 basin) { // k6 2, k2 150, sphere .001 var accuracy = .001; var ne = basin.Neibors[Direction.Ne]; var nw = basin.Neibors[Direction.Nw]; Assert.AreEqual(ne.Hto[1], basin.Hto[0], accuracy); if (ne.Ring == nw.Ring) { Assert.AreEqual(ne.Hto[1], nw.Hto[1]); } var sw = basin.Neibors[Direction.Sw]; var se = basin.Neibors[Direction.Se]; Assert.AreEqual(sw.Hto[0], basin.Hto[1], accuracy); Assert.AreEqual(sw.Hto[1], se.Hto[1]); if (basin.Hto[0] > basin.Hto[1]) { Assert.IsTrue(basin.Beta - ne.Beta > sw.Beta - basin.Beta); } else { Assert.IsFalse(basin.Beta - ne.Beta > sw.Beta - basin.Beta); } Console.WriteLine( "Δβ {0:0.###}, ΔHto {1:0.###}", ////(basin.rOfEllipse + basin.Hto[0]) * Math.Sin((basin.Beta - ne.Beta).Value), ////(basin.rOfEllipse + basin.Hto[1]) * Math.Sin((se.Beta - basin.Beta).Value), (basin.Beta - ne.Beta) / (se.Beta - basin.Beta), basin.Hto[0] / basin.Hto[1]); }
internal void RecalcDelta_g(Basin3 basin) { if (_spheric) { basin.InitROfEllipse(HealpixManager, Ellipsoid.MeanRadius); basin.Delta_g_meridian = basin.Delta_g_traverse = 0; } }
public void SetUp() { var man = new HealpixManager(2); basin0 = man.GetCenter <Basin3>(0); basin7 = man.GetCenter <Basin3>(7); basin31 = man.GetCenter <Basin3>(31); basin77 = man.GetCenter <Basin3>(77); basin95 = man.GetCenter <Basin3>(95); }
public static double CentrifugalByMatrix(Basin3 b, double a, Line3D axisOrtohonal, out double aTraverse, out double aVertical) { var aOnSurface = axisOrtohonal.Direction * b.Matrix; aTraverse = -a * aOnSurface[1]; aVertical = Math.Abs(a * aOnSurface[0]); var aMerid = (b.Vartheta < 0 ? 1 : -1) * a * aOnSurface[2]; b.Visual = aVertical; return(aMerid); }
public double IntersectTraverse(Basin3 otherBasin) { var otherQtraverseProjection = otherBasin.Q3.ProjectOn(TraverseCalm); var Qt = otherQtraverseProjection.ToVector3D(); Lambda_meridian = Qt.AngleTo(Q3.ToVector3D()).Radians; return(Triangles.SinusesTheorem( Math.PI / 2 + Delta_g_traverse, r, Lambda_meridian) - //r; otherBasin.r); //there's deformation //Qt.Length; }