Здоровая сетка дисплея и средние точки

Используя python healpy, я хочу отобразить (и экспортировать) сетки healpix, которые используются для тесселяции неба (на разных уровнях). Как мне это сделать? В идеале мне нужны средние точки, вершины сеток и линии, которые их соединяют.

Буду признателен за любую оказанную помощь.


person John    schedule 21.03.2017    source источник


Ответы (1)


Я работал над этим, есть еще способы:

1) вы можете использовать библиотеку IDL, которая имеет функцию pix2vec_nest (и pix2vec_ring), которая может дополнительно возвращать 4 вершины пикселя в векторе (n,3,4).

2) можно использовать java версию, где есть метод HealpixBase.boundaries

3) вы можете использовать библиотеку HEALPix_cxx, которая имеет T_Healpix_Base::boundaries, которая действует так же.

С границами вы можете отображать сетку. Обратите внимание, что последний метод очень красиво закодирован, его легко понять и использовать в другой программе! Ему нужен только индекс пикселя и выходной вектор:

 template<typename I> void T_Healpix_Base<I>::boundaries(I pix, tsize step,
  vector<vec3> &out) const
  {
  out.resize(4*step);
  int ix, iy, face;
  pix2xyf(pix, ix, iy, face);
  double dc = 0.5 / nside_;
  double xc = (ix + 0.5)/nside_, yc = (iy + 0.5)/nside_;
  double d = 1.0/(step*nside_);
  for (tsize i=0; i<step; ++i)
    {
    double z, phi, sth;
    bool have_sth;
    xyf2loc(xc+dc-i*d, yc+dc, face, z, phi, sth, have_sth);
    out[i] = locToVec3(z, phi, sth, have_sth);
    xyf2loc(xc-dc, yc+dc-i*d, face, z, phi, sth, have_sth);
    out[i+step] = locToVec3(z, phi, sth, have_sth);
    xyf2loc(xc-dc+i*d, yc-dc, face, z, phi, sth, have_sth);
    out[i+2*step] = locToVec3(z, phi, sth, have_sth);
    xyf2loc(xc+dc, yc-dc+i*d, face, z, phi, sth, have_sth);
    out[i+3*step] = locToVec3(z, phi, sth, have_sth);
    }
  }
person Francisco Bordin    schedule 10.06.2019