Skip to content

Commit 0611975

Browse files
committed
add aberration to geodesic corners and extend aberration range to 10000
1 parent 8808ffa commit 0611975

File tree

5 files changed

+35
-32
lines changed

5 files changed

+35
-32
lines changed

src/core/StelCore.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1289,7 +1289,7 @@ void StelCore::setAberrationFactor(double factor)
12891289
{
12901290
if (!fuzzyEquals(aberrationFactor, factor))
12911291
{
1292-
aberrationFactor=qBound(0.,factor, 5.);
1292+
aberrationFactor=qBound(0.,factor, 10000.);
12931293
StelApp::immediateSave("astro/aberration_factor", aberrationFactor);
12941294
emit aberrationFactorChanged(factor);
12951295
}

src/core/StelGeodesicGrid.cpp

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ int StelGeodesicGrid::getZoneNumberForPoint(const Vec3f &v,int searchLevel) cons
313313
// First iteration on the icosahedron base triangles
314314
void StelGeodesicGrid::searchZones(const QVector<SphericalCap>& convex,
315315
int **inside_list,int **border_list,
316-
int maxSearchLevel) const
316+
int maxSearchLevel,const Vec3d vel) const
317317
{
318318
if (maxSearchLevel < 0) maxSearchLevel = 0;
319319
else if (maxSearchLevel > maxLevel) maxSearchLevel = maxLevel;
@@ -329,12 +329,13 @@ void StelGeodesicGrid::searchZones(const QVector<SphericalCap>& convex,
329329
#else
330330
bool corner_inside[12][static_cast<size_t>(convex.size())];
331331
#endif
332+
const Vec3f velf = vel.toVec3f();
332333
for (int h=0;h<convex.size();h++)
333334
{
334335
const SphericalCap& half_space(convex.at(h));
335336
for (int i=0;i<12;i++)
336337
{
337-
corner_inside[i][h] = half_space.contains(icosahedron_corners[i]);
338+
corner_inside[i][h] = half_space.contains(icosahedron_corners[i]+velf);
338339
}
339340
}
340341
for (int i=0;i<20;i++)
@@ -344,7 +345,7 @@ void StelGeodesicGrid::searchZones(const QVector<SphericalCap>& convex,
344345
corner_inside[icosahedron_triangles[i].corners[0]],
345346
corner_inside[icosahedron_triangles[i].corners[1]],
346347
corner_inside[icosahedron_triangles[i].corners[2]],
347-
inside_list,border_list,maxSearchLevel);
348+
inside_list,border_list,maxSearchLevel,velf);
348349
}
349350
#if defined __STRICT_ANSI__ || !defined __GNUC__
350351
delete[] halfs_used;
@@ -360,7 +361,7 @@ void StelGeodesicGrid::searchZones(int lev,int index,
360361
const bool *corner1_inside,
361362
const bool *corner2_inside,
362363
int **inside_list,int **border_list,
363-
const int maxSearchLevel) const
364+
const int maxSearchLevel,const Vec3f vel) const
364365
{
365366
#if defined __STRICT_ANSI__ || !defined __GNUC__
366367
int *halfs_used = new int[static_cast<size_t>(halfSpacesUsed)];
@@ -416,26 +417,26 @@ void StelGeodesicGrid::searchZones(int lev,int index,
416417
{
417418
const int i = halfs_used[h];
418419
const SphericalCap& half_space(convex.at(i));
419-
edge0_inside[i] = half_space.contains(t.e0);
420-
edge1_inside[i] = half_space.contains(t.e1);
421-
edge2_inside[i] = half_space.contains(t.e2);
420+
edge0_inside[i] = half_space.contains(t.e0+vel);
421+
edge1_inside[i] = half_space.contains(t.e1+vel);
422+
edge2_inside[i] = half_space.contains(t.e2+vel);
422423
}
423424
searchZones(lev,index+0,
424425
convex,halfs_used,halfs_used_count,
425426
corner0_inside,edge2_inside,edge1_inside,
426-
inside_list,border_list,maxSearchLevel);
427+
inside_list,border_list,maxSearchLevel,vel);
427428
searchZones(lev,index+1,
428429
convex,halfs_used,halfs_used_count,
429430
edge2_inside,corner1_inside,edge0_inside,
430-
inside_list,border_list,maxSearchLevel);
431+
inside_list,border_list,maxSearchLevel,vel);
431432
searchZones(lev,index+2,
432433
convex,halfs_used,halfs_used_count,
433434
edge1_inside,edge0_inside,corner2_inside,
434-
inside_list,border_list,maxSearchLevel);
435+
inside_list,border_list,maxSearchLevel,vel);
435436
searchZones(lev,index+3,
436437
convex,halfs_used,halfs_used_count,
437438
edge0_inside,edge1_inside,edge2_inside,
438-
inside_list,border_list,maxSearchLevel);
439+
inside_list,border_list,maxSearchLevel,vel);
439440
#if defined __STRICT_ANSI__ || !defined __GNUC__
440441
delete[] edge0_inside;
441442
delete[] edge1_inside;
@@ -453,7 +454,7 @@ void StelGeodesicGrid::searchZones(int lev,int index,
453454
/*************************************************************************
454455
Return a search result matching the given spatial region
455456
*************************************************************************/
456-
const GeodesicSearchResult* StelGeodesicGrid::search(const QVector<SphericalCap>& convex, int maxSearchLevel) const
457+
const GeodesicSearchResult* StelGeodesicGrid::search(const QVector<SphericalCap>& convex, int maxSearchLevel,const Vec3d vel) const
457458
{
458459
// Try to use the cached version
459460
if (maxSearchLevel==lastMaxSearchlevel && convex==lastSearchRegion)
@@ -463,7 +464,7 @@ const GeodesicSearchResult* StelGeodesicGrid::search(const QVector<SphericalCap>
463464
// Else recompute it and update cache parameters
464465
lastMaxSearchlevel = maxSearchLevel;
465466
lastSearchRegion = convex;
466-
cacheSearchResult->search(convex, maxSearchLevel);
467+
cacheSearchResult->search(convex, maxSearchLevel,vel);
467468
return cacheSearchResult;
468469
}
469470

@@ -501,14 +502,14 @@ void GeodesicSearchResult::print() const
501502
}
502503
}
503504

504-
void GeodesicSearchResult::search(const QVector<SphericalCap>& convex, int maxSearchLevel)
505+
void GeodesicSearchResult::search(const QVector<SphericalCap>& convex, int maxSearchLevel, const Vec3d vel)
505506
{
506507
for (int i=grid.getMaxLevel();i>=0;i--)
507508
{
508509
inside[i] = zones[i];
509510
border[i] = zones[i]+StelGeodesicGrid::nrOfZones(i);
510511
}
511-
grid.searchZones(convex,inside,border,maxSearchLevel);
512+
grid.searchZones(convex,inside,border,maxSearchLevel,vel);
512513
}
513514

514515
void GeodesicSearchInsideIterator::reset(void)

src/core/StelGeodesicGrid.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class StelGeodesicGrid
7979
//! Return a search result matching the given spatial region
8080
//! The result is cached, meaning that it is very fast to search the same region consecutively
8181
//! @return a GeodesicSearchResult instance which must be used with GeodesicSearchBorderIterator and GeodesicSearchInsideIterator
82-
const GeodesicSearchResult* search(const QVector<SphericalCap>& convex, int maxSearchLevel) const;
82+
const GeodesicSearchResult* search(const QVector<SphericalCap>& convex, int maxSearchLevel, const Vec3d vel) const;
8383

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

105105
const Vec3f& getTriangleCorner(int lev, int index, int cornerNumber) const;
106106
void initTriangle(int lev,int index,
@@ -121,7 +121,7 @@ class StelGeodesicGrid
121121
const bool *corner0_inside,
122122
const bool *corner1_inside,
123123
const bool *corner2_inside,
124-
int **inside,int **border,int maxSearchLevel) const;
124+
int **inside,int **border,int maxSearchLevel, const Vec3f vel) const;
125125

126126
const int maxLevel;
127127
struct Triangle
@@ -149,7 +149,7 @@ class GeodesicSearchResult
149149
friend class GeodesicSearchBorderIterator;
150150
friend class StelGeodesicGrid;
151151

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

154154
const StelGeodesicGrid &grid;
155155
int **const zones;

src/core/modules/StarMgr.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,10 +1288,6 @@ void StarMgr::draw(StelCore* core)
12881288

12891289
QVector<SphericalCap> viewportCaps = prj->getViewportConvexPolygon(margin, margin)->getBoundingSphericalCaps();
12901290
viewportCaps.append(core->getVisibleSkyArea());
1291-
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxSearchLevel)->search(viewportCaps,maxSearchLevel);
1292-
1293-
// Set temporary static variable for optimization
1294-
const float names_brightness = labelsFader.getInterstate() * starsFader.getInterstate();
12951291

12961292
// prepare for aberration: Explan. Suppl. 2013, (7.38)
12971293
const bool withAberration=core->getUseAberration();
@@ -1301,6 +1297,11 @@ void StarMgr::draw(StelCore* core)
13011297
vel = core->getAberrationVec(core->getJDE());
13021298
}
13031299

1300+
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxSearchLevel)->search(viewportCaps, maxSearchLevel, vel);
1301+
1302+
// Set temporary static variable for optimization
1303+
const float names_brightness = labelsFader.getInterstate() * starsFader.getInterstate();
1304+
13041305
// Prepare openGL for drawing many stars
13051306
StelPainter sPainter(prj);
13061307
QFont font=QGuiApplication::font();
@@ -1424,7 +1425,8 @@ QList<StelObjectP > StarMgr::searchAround(const Vec3d& vv, double limFov, const
14241425
e3 *= f;
14251426
// Search the triangles
14261427
SphericalConvexPolygon c(e3, e2, e2, e0);
1427-
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(lastMaxSearchLevel)->search(c.getBoundingSphericalCaps(),lastMaxSearchLevel);
1428+
Vec3d vel(0.);
1429+
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(lastMaxSearchLevel)->search(c.getBoundingSphericalCaps(),lastMaxSearchLevel,vel);
14281430

14291431
double withParallax = core->getUseParallax() * core->getParallaxFactor();
14301432
Vec3d diffPos(0., 0., 0.);
@@ -1473,19 +1475,19 @@ QList<StelObjectP > StarMgr::searchWithin(const SphericalRegionP region, const S
14731475
#endif
14741476
largerCaps.append(SphericalCap(cap.n, qMin(cap.d, 0.75))); // 0.83 seemed still too small, unclear why. 0.75 seems to work.
14751477
}
1476-
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxGeodesicGridLevel)->search(largerCaps,maxGeodesicGridLevel);
1477-
1478-
#ifndef NDEBUG
1479-
// Just some temporary debug output.
1480-
geodesic_search_result->print();
1481-
#endif
14821478
// prepare for aberration: Explan. Suppl. 2013, (7.38)
14831479
const bool withAberration=core->getUseAberration();
14841480
Vec3d vel(0.);
14851481
if (withAberration)
14861482
{
14871483
vel = core->getAberrationVec(core->getJDE());
14881484
}
1485+
const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxGeodesicGridLevel)->search(largerCaps,maxGeodesicGridLevel,vel);
1486+
1487+
#ifndef NDEBUG
1488+
// Just some temporary debug output.
1489+
geodesic_search_result->print();
1490+
#endif
14891491

14901492
#ifndef NDEBUG
14911493
qDebug() << "We have" << gridLevels.count() << " ZoneArrays in gridLevels at maxGeodesicGridLevel:" << maxGeodesicGridLevel;

src/gui/configurationDialog.ui

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2306,7 +2306,7 @@
23062306
<number>1</number>
23072307
</property>
23082308
<property name="maximum">
2309-
<double>5.000000000000000</double>
2309+
<double>10000.000000000000000</double>
23102310
</property>
23112311
<property name="singleStep">
23122312
<double>0.100000000000000</double>

0 commit comments

Comments
 (0)