冲毕业第二、三周记录
中文网站上介绍星图绘制的文章挺少的,知乎这个系列介绍的挺好的
https://zhuanlan.zhihu.com/p/82496762
下载Hipparcos Catalog,用python进行简单处理
import numpy as np |
(117955, 20) |
完整处理为一个csv文件
import numpy as np |
生成4006个星等 小于等于6 的 单星。
研究换算公式
坐标系ICRS与ITRS相互转换,时间系统及转换 https://blog.csdn.net/wokaowokaowokao12345/article/details/127211085
研究sofa
https://zhuanlan.zhihu.com/p/226482319
http://www.iausofa.org/tandc.html
http://www.iausofa.org/2021_0512_C.html
处理星表文件 stars_0_0v0_8.cat,136KB ->139524位
139524 =32 + 20 4 + 4979 28
function [output] = myFunc(A, start, num) |
20个zone的星数为
184 174 317 235 209 254 201 210 311 341 179 158 298 383 290 206 165 346 293 225
总和为4979
验证了hip 和星图和星等。
C:\Users\hp\Desktop\stellarium-0.22.2\stellarium-0.22.2\src\gui\SkyGui.cpp
void InfoPanel::setTextFromObjects(const QList< StelObjectP >& selected) { |
StarWrapper.cpp
QString StarWrapper1::getInfoString(const StelCore *core, const InfoStringGroup& flags) const { |
调用StelObject.cpp的
QString StelObject::getCommonInfoString(const StelCore *core, const InfoStringGroup& flags) const { |
StelCore *core = StelApp::getInstance().getCore();
QFlags
在wrapper中的getAltAzPosApparent(core) 可以得到, s->getHip()也能得到 那么select 到底是怎么关联过来的呢
StelUtils::rectToSphe(&az, &alt, getAltAzPosGeometric(core)); |
if (flags & AltAzi) { |
在SkyGui.cpp中
StelCore *core = StelApp::getInstance().getCore(); |
可以显示选中星体的信息。
getAltAzPosGeometric
研究 Star1
在 C:\Users\hp\Desktop\stellarium-0.22.2\stellarium-0.22.2\util\ConvertCatToNative.C 文件中
int main(int argc,char *argv[]) { |
void PerformConversion(const char *fname_in,const char *fname_out) { |
void Convert(FILE *f_in,FILE *f_out,bool from_be,unsigned int nr_of_stars) { |
void Star1::repack(bool from_be) { |
研究s->getHip() , 哪里的s呢
QString StarWrapper1::getInfoString(const StelCore *core, const InfoStringGroup& flags) const |
class StelObject : public StelRegionObject |
class StarWrapper1 : public StarWrapper<Star1> |
按键按下之后发生的事
void StelMovementMgr::handleMouseClicks(QMouseEvent* event) { |
bool StelObjectMgr::findAndSelect(const StelCore* core, int x, int y, StelModule::StelModuleSelectAction action) { |
StelObjectP StelObjectMgr::cleverFind(const StelCore* core, int x, int y) const { |
StelObjectP StelObjectMgr::cleverFind(const StelCore* core, const Vec3d& v) const { |
C:\Users\hp\Desktop\stellarium-0.22.2\stellarium-0.22.2\src\core\modules\StarMgr.cpp
QList<StelObjectP > StarMgr::searchAround(const Vec3d& vv, double limFov, const StelCore* core) const |
qDebug() << “ 2222 now2 “ << bbb++; // 2531次
return s->createStelObject(a, z);
// qDebug() << “ 2222 now “ << aaa++; //24920次
StelObjectP so = s->createStelObject(a, z);
C:\Users\hp\Desktop\stellarium-0.22.2\stellarium-0.22.2\src\core\modules\ZoneArray.cpp的result.push_back(s->createStelObject(this, z)); // 调用27多次 点击也是这里调用
void SpecialZoneArray<Star>::searchAround(const StelCore* core, int index, const Vec3d &v, double cosLimFov, QList<StelObjectP > &result) { |
C:\Users\hp\Desktop\stellarium-0.22.2\stellarium-0.22.2\src\core\modules\StarWrapper.cpp中
StelObjectP Star1::createStelObject(const SpecialZoneArray<Star1> *a, const SpecialZoneData<Star1> *z) const |
class StarWrapper1 : public StarWrapper<Star1> { |
template <class Star> |
StarWrapper.s .a .z |
研究如何算j2000的赤经赤纬
C:\Users\hp\Desktop\stellarium-0.22.2\stellarium-0.22.2\src\core\StelObject.cpp文件中
QString StelObject::getCommonInfoString(const StelCore *core, const InfoStringGroup& flags) const { |
getJ2000EquatorialPos调用
C:\Users\hp\Desktop\stellarium-0.22.2\stellarium-0.22.2\src\core\modules\StarWrapper.hpp中的
template <class Star> |
C:\Users\hp\Desktop\stellarium-0.22.2\stellarium-0.22.2\src\core\modules\Star.hpp
struct Star1 { // 28 byte |
C:\Users\hp\Desktop\stellarium-0.22.2\stellarium-0.22.2\src\core\StelGeodesicGrid.cpp中
StelGeodesicGrid::StelGeodesicGrid(const int lev) : maxLevel(lev < 0 ? 0 : lev) |
static const float icosahedron_G = 0.5f * (1.0f + std::sqrt(5.0f)); |
正二十面体(Regular icosahedron ) 是由20个等边三角形所组成的正多面体,共有12个顶点,30条棱,20个面。为五个柏拉图多面体之一。
StelApp::getInstance().getCore()->getGeodesicGrid(maxGeodesicGridLevel)->visitTriangles(maxGeodesicGridLevel, initTriangleFunc, this); // 1次 |
void StelGeodesicGrid::visitTriangles(int maxVisitLevel, |
void StelGeodesicGrid::visitTriangles(int lev, int index, |
static void initTriangleFunc(int lev, int index, const Vec3f &c0, const Vec3f &c1, const Vec3f &c2, void *context) { // 100次调用 |
StarMgr::initTriangle(int lev, int index, const Vec3f &c0, const Vec3f &c1, const Vec3f &c2) { // 100次调用 |
有2层level ,第一层的index为20 第二层为80;
0 0 0 [0.850651, 0.525731, 0] [0.850651, -0.525731, 0] [0.525731, 0, -0.850651] |
自己研究了两周还是没结果,很失落,写不出第二周的总结,因为第二周没有收获。第三周末尾和一位天文学专业的同学请教了,才发现自己这2周方向都错了,顶多算是对c++代码的一次学习。