File indexing completed on 2024-04-21 03:44:43

0001 /*
0002     SPDX-FileCopyrightText: 2006 Jason Harris <kstarss@30doradus.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "skyline.h"
0008 
0009 #include "kstarsdata.h"
0010 #include "ksnumbers.h"
0011 
0012 #include <QDebug>
0013 
0014 SkyLine::~SkyLine()
0015 {
0016     clear();
0017 }
0018 
0019 void SkyLine::clear()
0020 {
0021     qDeleteAll(m_pList);
0022     m_pList.clear();
0023 }
0024 
0025 void SkyLine::append(SkyPoint *p)
0026 {
0027     m_pList.append(new SkyPoint(*p));
0028 }
0029 
0030 void SkyLine::setPoint(int i, SkyPoint *p)
0031 {
0032     if (i < 0 || i >= m_pList.size())
0033     {
0034         qDebug() << Q_FUNC_INFO << "SkyLine index error: no such point: " << i;
0035         return;
0036     }
0037     *m_pList[i] = *p;
0038 }
0039 
0040 dms SkyLine::angularSize(int i) const
0041 {
0042     if (i < 0 || i + 1 >= m_pList.size())
0043     {
0044         qDebug() << Q_FUNC_INFO << "SkyLine index error: no such segment: " << i;
0045         return dms();
0046     }
0047 
0048     SkyPoint *p1  = m_pList[i];
0049     SkyPoint *p2  = m_pList[i + 1];
0050     double dalpha = p1->ra().radians() - p2->ra().radians();
0051     double ddelta = p1->dec().radians() - p2->dec().radians();
0052 
0053     double sa = sin(dalpha / 2.);
0054     double sd = sin(ddelta / 2.);
0055 
0056     double hava = sa * sa;
0057     double havd = sd * sd;
0058 
0059     double aux = havd + cos(p1->dec().radians()) * cos(p2->dec().radians()) * hava;
0060 
0061     dms angDist;
0062     angDist.setRadians(2 * fabs(asin(sqrt(aux))));
0063 
0064     return angDist;
0065 }
0066 
0067 void SkyLine::update(KStarsData *d, KSNumbers *num)
0068 {
0069     foreach (SkyPoint *p, m_pList)
0070     {
0071         if (num)
0072             p->updateCoords(num);
0073         p->EquatorialToHorizontal(d->lst(), d->geo()->lat());
0074     }
0075 }