1 /* 2 SPDX-FileCopyrightText: 2010 Akarsh Simha <akarshsimha@gmail.com> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #pragma once 8 9 #include <QHash> 10 #include <QList> 11 12 class QStringList; 13 14 class SkyPoint; 15 class StarObject; 16 17 /** 18 * @class StarHopper 19 * @short Helps planning star hopping 20 * 21 * @version 1.0 22 * @author Akarsh Simha 23 */ 24 class StarHopper 25 { 26 public: 27 /** 28 * @short Computes path for Star Hop 29 * @param src SkyPoint to source of the Star Hop 30 * @param dest SkyPoint to destination of the Star Hop 31 * @param fov__ Field of view within which stars are considered 32 * @param maglim__ Magnitude limit of stars to consider 33 * @param metadata_ Directions for starhopping 34 * @return QList of StarObject pointers which are the resultant path to Star Hop 35 * @note The StarObjects in the list returned are mutable and not constant 36 */ 37 QList<StarObject *> *computePath(const SkyPoint &src, const SkyPoint &dest, float fov__, float maglim__, 38 QStringList *metadata_ = nullptr); 39 40 protected: 41 // Returns a list of constant StarObject pointers which form the resultant path of Star Hop 42 QList<const StarObject *> computePath_const(const SkyPoint &src, const SkyPoint &dest, float fov_, float maglim_, 43 QStringList *metadata = nullptr); 44 45 private: 46 /** 47 * @short The cost function for hopping from current position to the a given star, in view of the final destination 48 * @param curr Source SkyPoint 49 * @param next Next point in the hop. 50 * @note If 'next' is neither the starting point of the hop, nor 51 * the ending point, it _has_ to be a StarObject. A dynamic cast 52 * followed by a Q_ASSERT will ensure this. 53 */ 54 float cost(const SkyPoint *curr, const SkyPoint *next); 55 56 /** 57 * @short For internal use by the A* Search Algorithm. Completes 58 * the star-hop path. See https://en.wikipedia.org/wiki/A*_search_algorithm for details 59 */ 60 void reconstructPath(SkyPoint const *curr_node); 61 62 float fov { 0 }; 63 float maglim { 0 }; 64 QString starHopDirections; 65 // Useful for internal computations 66 SkyPoint const *start { nullptr }; 67 SkyPoint const *end { nullptr }; 68 QHash<const SkyPoint *, const SkyPoint *> came_from; // Used by the A* search algorithm 69 QList<StarObject const *> result_path; 70 QHash<SkyPoint const *, QString> patternNames; // if patterns were identified, they are added to this hash. 71 }; 72