Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/core/StelCore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1291,7 +1291,7 @@ void StelCore::setAberrationFactor(double factor)
{
if (!fuzzyEquals(aberrationFactor, factor))
{
aberrationFactor=qBound(0.,factor, 5.);
aberrationFactor=qBound(0.,factor, 10000.);
StelApp::immediateSave("astro/aberration_factor", aberrationFactor);
emit aberrationFactorChanged(factor);
}
Expand Down
31 changes: 16 additions & 15 deletions src/core/StelGeodesicGrid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ int StelGeodesicGrid::getZoneNumberForPoint(const Vec3f &v,int searchLevel) cons
// First iteration on the icosahedron base triangles
void StelGeodesicGrid::searchZones(const QVector<SphericalCap>& convex,
int **inside_list,int **border_list,
int maxSearchLevel) const
int maxSearchLevel,const Vec3d vel) const
{
if (maxSearchLevel < 0) maxSearchLevel = 0;
else if (maxSearchLevel > maxLevel) maxSearchLevel = maxLevel;
Expand All @@ -329,12 +329,13 @@ void StelGeodesicGrid::searchZones(const QVector<SphericalCap>& convex,
#else
bool corner_inside[12][static_cast<size_t>(convex.size())];
#endif
const Vec3f velf = vel.toVec3f();
for (int h=0;h<convex.size();h++)
{
const SphericalCap& half_space(convex.at(h));
for (int i=0;i<12;i++)
{
corner_inside[i][h] = half_space.contains(icosahedron_corners[i]);
corner_inside[i][h] = half_space.contains(icosahedron_corners[i]+velf);
}
}
for (int i=0;i<20;i++)
Expand All @@ -344,7 +345,7 @@ void StelGeodesicGrid::searchZones(const QVector<SphericalCap>& convex,
corner_inside[icosahedron_triangles[i].corners[0]],
corner_inside[icosahedron_triangles[i].corners[1]],
corner_inside[icosahedron_triangles[i].corners[2]],
inside_list,border_list,maxSearchLevel);
inside_list,border_list,maxSearchLevel,velf);
}
#if defined __STRICT_ANSI__ || !defined __GNUC__
delete[] halfs_used;
Expand All @@ -360,7 +361,7 @@ void StelGeodesicGrid::searchZones(int lev,int index,
const bool *corner1_inside,
const bool *corner2_inside,
int **inside_list,int **border_list,
const int maxSearchLevel) const
const int maxSearchLevel,const Vec3f vel) const
{
#if defined __STRICT_ANSI__ || !defined __GNUC__
int *halfs_used = new int[static_cast<size_t>(halfSpacesUsed)];
Expand Down Expand Up @@ -416,26 +417,26 @@ void StelGeodesicGrid::searchZones(int lev,int index,
{
const int i = halfs_used[h];
const SphericalCap& half_space(convex.at(i));
edge0_inside[i] = half_space.contains(t.e0);
edge1_inside[i] = half_space.contains(t.e1);
edge2_inside[i] = half_space.contains(t.e2);
edge0_inside[i] = half_space.contains(t.e0+vel);
edge1_inside[i] = half_space.contains(t.e1+vel);
edge2_inside[i] = half_space.contains(t.e2+vel);
}
searchZones(lev,index+0,
convex,halfs_used,halfs_used_count,
corner0_inside,edge2_inside,edge1_inside,
inside_list,border_list,maxSearchLevel);
inside_list,border_list,maxSearchLevel,vel);
searchZones(lev,index+1,
convex,halfs_used,halfs_used_count,
edge2_inside,corner1_inside,edge0_inside,
inside_list,border_list,maxSearchLevel);
inside_list,border_list,maxSearchLevel,vel);
searchZones(lev,index+2,
convex,halfs_used,halfs_used_count,
edge1_inside,edge0_inside,corner2_inside,
inside_list,border_list,maxSearchLevel);
inside_list,border_list,maxSearchLevel,vel);
searchZones(lev,index+3,
convex,halfs_used,halfs_used_count,
edge0_inside,edge1_inside,edge2_inside,
inside_list,border_list,maxSearchLevel);
inside_list,border_list,maxSearchLevel,vel);
#if defined __STRICT_ANSI__ || !defined __GNUC__
delete[] edge0_inside;
delete[] edge1_inside;
Expand All @@ -453,7 +454,7 @@ void StelGeodesicGrid::searchZones(int lev,int index,
/*************************************************************************
Return a search result matching the given spatial region
*************************************************************************/
const GeodesicSearchResult* StelGeodesicGrid::search(const QVector<SphericalCap>& convex, int maxSearchLevel) const
const GeodesicSearchResult* StelGeodesicGrid::search(const QVector<SphericalCap>& convex, int maxSearchLevel,const Vec3d vel) const
{
// Try to use the cached version
if (maxSearchLevel==lastMaxSearchlevel && convex==lastSearchRegion)
Expand All @@ -463,7 +464,7 @@ const GeodesicSearchResult* StelGeodesicGrid::search(const QVector<SphericalCap>
// Else recompute it and update cache parameters
lastMaxSearchlevel = maxSearchLevel;
lastSearchRegion = convex;
cacheSearchResult->search(convex, maxSearchLevel);
cacheSearchResult->search(convex, maxSearchLevel,vel);
return cacheSearchResult;
}

Expand Down Expand Up @@ -501,14 +502,14 @@ void GeodesicSearchResult::print() const
}
}

void GeodesicSearchResult::search(const QVector<SphericalCap>& convex, int maxSearchLevel)
void GeodesicSearchResult::search(const QVector<SphericalCap>& convex, int maxSearchLevel, const Vec3d vel)
{
for (int i=grid.getMaxLevel();i>=0;i--)
{
inside[i] = zones[i];
border[i] = zones[i]+StelGeodesicGrid::nrOfZones(i);
}
grid.searchZones(convex,inside,border,maxSearchLevel);
grid.searchZones(convex,inside,border,maxSearchLevel,vel);
}

void GeodesicSearchInsideIterator::reset(void)
Expand Down
8 changes: 4 additions & 4 deletions src/core/StelGeodesicGrid.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class StelGeodesicGrid
//! Return a search result matching the given spatial region
//! The result is cached, meaning that it is very fast to search the same region consecutively
//! @return a GeodesicSearchResult instance which must be used with GeodesicSearchBorderIterator and GeodesicSearchInsideIterator
const GeodesicSearchResult* search(const QVector<SphericalCap>& convex, int maxSearchLevel) const;
const GeodesicSearchResult* search(const QVector<SphericalCap>& convex, int maxSearchLevel, const Vec3d vel) const;

private:
friend class GeodesicSearchResult;
Expand All @@ -100,7 +100,7 @@ class StelGeodesicGrid
//! In order to restrict search depth set maxSearchLevel < maxLevel,
//! for full search depth set maxSearchLevel = maxLevel,
void searchZones(const QVector<SphericalCap>& convex,
int **inside,int **border,int maxSearchLevel) const;
int **inside,int **border,int maxSearchLevel, const Vec3d vel) const;

const Vec3f& getTriangleCorner(int lev, int index, int cornerNumber) const;
void initTriangle(int lev,int index,
Expand All @@ -121,7 +121,7 @@ class StelGeodesicGrid
const bool *corner0_inside,
const bool *corner1_inside,
const bool *corner2_inside,
int **inside,int **border,int maxSearchLevel) const;
int **inside,int **border,int maxSearchLevel, const Vec3f vel) const;

const int maxLevel;
struct Triangle
Expand Down Expand Up @@ -149,7 +149,7 @@ class GeodesicSearchResult
friend class GeodesicSearchBorderIterator;
friend class StelGeodesicGrid;

void search(const QVector<SphericalCap>& convex, int maxSearchLevel);
void search(const QVector<SphericalCap>& convex, int maxSearchLeve, const Vec3d vel);

const StelGeodesicGrid &grid;
int **const zones;
Expand Down
24 changes: 13 additions & 11 deletions src/core/modules/StarMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1348,10 +1348,6 @@ void StarMgr::draw(StelCore* core)

QVector<SphericalCap> viewportCaps = prj->getViewportConvexPolygon(margin, margin)->getBoundingSphericalCaps();
viewportCaps.append(core->getVisibleSkyArea());
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxSearchLevel)->search(viewportCaps,maxSearchLevel);

// Set temporary static variable for optimization
const float names_brightness = labelsFader.getInterstate() * starsFader.getInterstate();

// prepare for aberration: Explan. Suppl. 2013, (7.38)
const bool withAberration=core->getUseAberration();
Expand All @@ -1361,6 +1357,11 @@ void StarMgr::draw(StelCore* core)
vel = core->getAberrationVec(core->getJDE());
}

const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxSearchLevel)->search(viewportCaps, maxSearchLevel, vel);

// Set temporary static variable for optimization
const float names_brightness = labelsFader.getInterstate() * starsFader.getInterstate();

// Prepare openGL for drawing many stars
StelPainter sPainter(prj);
QFont font=QGuiApplication::font();
Expand Down Expand Up @@ -1484,7 +1485,8 @@ QList<StelObjectP > StarMgr::searchAround(const Vec3d& vv, double limFov, const
e3 *= f;
// Search the triangles
SphericalConvexPolygon c(e3, e2, e2, e0);
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(lastMaxSearchLevel)->search(c.getBoundingSphericalCaps(),lastMaxSearchLevel);
Vec3d vel(0.);
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(lastMaxSearchLevel)->search(c.getBoundingSphericalCaps(),lastMaxSearchLevel,vel);

double withParallax = core->getUseParallax() * core->getParallaxFactor();
Vec3d diffPos(0., 0., 0.);
Expand Down Expand Up @@ -1533,19 +1535,19 @@ QList<StelObjectP > StarMgr::searchWithin(const SphericalRegionP region, const S
#endif
largerCaps.append(SphericalCap(cap.n, qMin(cap.d, 0.75))); // 0.83 seemed still too small, unclear why. 0.75 seems to work.
}
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxGeodesicGridLevel)->search(largerCaps,maxGeodesicGridLevel);

#ifndef NDEBUG
// Just some temporary debug output.
geodesic_search_result->print();
#endif
// prepare for aberration: Explan. Suppl. 2013, (7.38)
const bool withAberration=core->getUseAberration();
Vec3d vel(0.);
if (withAberration)
{
vel = core->getAberrationVec(core->getJDE());
}
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxGeodesicGridLevel)->search(largerCaps,maxGeodesicGridLevel,vel);

#ifndef NDEBUG
// Just some temporary debug output.
geodesic_search_result->print();
#endif

#ifndef NDEBUG
qDebug() << "We have" << gridLevels.count() << " ZoneArrays in gridLevels at maxGeodesicGridLevel:" << maxGeodesicGridLevel;
Expand Down
2 changes: 1 addition & 1 deletion src/gui/configurationDialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -2306,7 +2306,7 @@
<number>1</number>
</property>
<property name="maximum">
<double>5.000000000000000</double>
<double>10000.000000000000000</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
Expand Down
Loading