protected override void CreatePiecePositionTable() { PiecePositions = new PiecePositionsType[GetMaxIndex()]; int max_ring = GetMaxRingIndex(); for (int i = 1, m = 0; i <= max_ring; i++) { int max_intra_ring = GetMaxIntraRingIndexAt(i); for (int j = 1; j <= max_intra_ring; j++, m++) { Healpix.HealpixIndex idx = new Healpix.HealpixIndex() { i = i, j = j }; Healpix.HealpixPolarCoord polar = pixelization.GetSphCoord(idx); Point3D point = pixelization.GetCartesianCoord(polar); PiecePositions[m] = new PiecePositionsType() { index = idx, position_polar = polar, position_cart = new Vector3D() { X = point.X, Y = point.Y, Z = point.Z } }; } } }
protected Healpix.HealpixIndex GetNearestPiece(Vector3D vec, int begin_i, int end_i) { int begin_n = GetIndexAt(begin_i, 1); int end_n = GetIndexAt(end_i, GetMaxIntraRingIndexAt(end_i)); double max_val = 0.0; Healpix.HealpixIndex?best_idx = null; for (int i = begin_n; i <= end_n; i++) { PiecePositionsType element = PiecePositions[i]; double val = Vector3D.DotProduct(vec, element.position_cart); if (val > max_val) { max_val = val; best_idx = element.index; } } if (best_idx == null) { return(new Healpix.HealpixIndex() { i = 1, j = 1 }); } else { return((Healpix.HealpixIndex)best_idx); } }
protected override void CreatePiecePositionTable() { PiecePositions = new PiecePositionsType[GetMaxIndex()]; int max_ring = GetMaxRingIndex(); for (int i = 1, m = 0; i <= max_ring; i++) { int max_intra_ring = GetMaxIntraRingIndexAt(i); if (max_intra_ring == 1) { PiecePositions[m++] = new PiecePositionsType() { index = new Healpix.HealpixIndex() { i = i, j = 1 }, position_polar = new Healpix.HealpixPolarCoord() { phi = 0, theta = (i == 1) ? 0 : Math.PI }, position_cart = new Vector3D() { X = 0, Y = 0, Z = (i == 1) ? 1 : -1 } }; continue; } for (int j = 1; j <= max_intra_ring; j++, m++) { Healpix.HealpixIndex idx = new Healpix.HealpixIndex() { i = i, j = j }; Healpix.HealpixIndex idx_act = new Healpix.HealpixIndex() { i = i - 1, j = j - 0.5 }; Healpix.HealpixPolarCoord polar = pixelization.GetSphCoord(idx_act); Point3D point = pixelization.GetCartesianCoord(polar); PiecePositions[m] = new PiecePositionsType() { index = idx, position_polar = polar, position_cart = new Vector3D() { X = point.X, Y = point.Y, Z = point.Z } }; } } }