[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdeedu/kstars/kstars
From: Alexey Khudyakov <alexey.skladnoy () gmail ! com>
Date: 2009-11-06 21:13:03
Message-ID: 1257541983.241409.17807.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1045839 by khudyakov:
* Factor out duplicated code into a function
* Apply minor refactorings
M +35 -69 skymap.cpp
--- trunk/KDE/kdeedu/kstars/kstars/skymap.cpp #1045838:1045839
@@ -66,8 +66,32 @@
p2 = edge1;
}
}
+
+ // FIXME: describe what this function do and give descriptive name
+ double projectionK(double c) {
+ switch ( Options::projection() ) {
+ case SkyMap::Lambert:
+ return sqrt( 2.0/( 1.0 + c ) );
+ case SkyMap:: AzimuthalEquidistant: {
+ double crad = acos(c);
+ return crad/sin(crad);
+ }
+ case SkyMap:: Orthographic:
+ return 1.0;
+ case SkyMap:: Stereographic:
+ return 2.0/(1.0 + c);
+ case SkyMap:: Gnomonic:
+ return 1.0/c;
+ default: //should never get here
+ kWarning() << i18n("Unrecognized coordinate projection: ") << Options::projection();
+ }
+ // Default to orthographic
+ return 1.0;
+ }
+
}
+
SkyMap* SkyMap::pinstance = 0;
SkyMap* SkyMap::Create()
@@ -892,45 +916,18 @@
//QUATERNION
QPointF SkyMap::toScreenQuaternion( SkyPoint *o ) {
- QPointF p;
Quaternion oq = o->quat();
// Quaternion invRotAxis = m_rotAxis.inverse();
oq.rotateAroundAxis( m_rotAxis );
- double zoomscale = m_Scale*Options::zoomFactor();
- double k;
//c is the cosine of the angular distance from the center.
//I believe this is just the z coordinate.
double c = oq.v[Q_Z];
- switch ( Options::projection() ) {
- case Lambert:
- k = sqrt( 2.0/( 1.0 + c ) );
- break;
- case AzimuthalEquidistant:
- {
- double crad = acos(c);
- k = crad/sin(crad);
- break;
- }
- case Orthographic:
- k = 1.0;
- break;
- case Stereographic:
- k = 2.0/(1.0 + c);
- break;
- case Gnomonic:
- k = 1.0/c;
- break;
- default: //should never get here
- kWarning() << i18n("Unrecognized coordinate projection: ") << Options::projection();
- k = 1.0; //just default to Orthographic
- break;
- }
+ double k = projectionK(c);
+ double zoomscale = m_Scale*Options::zoomFactor();
- p.setX( 0.5*width() - zoomscale*k*oq.v[Q_X] );
- p.setY( 0.5*height() - zoomscale*k*oq.v[Q_Y] );
-
- return p;
+ return QPointF( 0.5*width() - zoomscale*k*oq.v[Q_X],
+ 0.5*height() - zoomscale*k*oq.v[Q_Y] );
}
void SkyMap::slotZoomIn() {
@@ -953,7 +950,6 @@
QPointF SkyMap::toScreen( SkyPoint *o, bool oRefract, bool *onVisibleHemisphere) {
- QPointF p;
double Y, dX;
double sindX, cosdX, sinY, cosY, sinY0, cosY0;
@@ -982,7 +978,7 @@
//Special case: Equirectangular projection is very simple
if ( Options::projection() == Equirectangular ) {
-
+ QPointF p;
p.setX( 0.5*Width - zoomscale*dX );
if ( Options::useAltAz() )
p.setY( 0.5*Height - zoomscale*(Y - focus()->alt()->radians()) );
@@ -1038,46 +1034,16 @@
//The Gnomonic projection has an infinite sky horizon, so don't allow the field
//angle to approach 90 degrees in thi scase (cut it off at c=0.2).
if ( c < 0.0 || ( Options::projection()==Gnomonic && c < 0.2 ) ) {
- if (onVisibleHemisphere == NULL) {
- p.setX( -10000000. );
- p.setY( -10000000. );
- return p;
- }
- else {
+ if( onVisibleHemisphere == NULL )
+ return QPointF( -1e+7, -1e+7 );
+ else
*onVisibleHemisphere = false;
- }
}
- double k;
- switch ( Options::projection() ) {
- case Lambert:
- k = sqrt( 2.0/( 1.0 + c ) );
- break;
- case AzimuthalEquidistant:
- {
- double crad = acos(c);
- k = crad/sin(crad);
- break;
- }
- case Orthographic:
- k = 1.0;
- break;
- case Stereographic:
- k = 2.0/(1.0 + c);
- break;
- case Gnomonic:
- k = 1.0/c;
- break;
- default: //should never get here
- kWarning() << i18n("Unrecognized coordinate projection: ") << Options::projection() ;
- k = 1.0; //just default to Orthographic
- break;
- }
+ double k = projectionK(c);
- p.setX( 0.5*Width - zoomscale*k*cosY*sindX );
- p.setY( 0.5*Height - zoomscale*k*( cosY0*sinY - sinY0*cosY*cosdX ) );
-
- return p;
+ return QPointF( 0.5*Width - zoomscale*k*cosY*sindX,
+ 0.5*Height - zoomscale*k*( cosY0*sinY - sinY0*cosY*cosdX ) );
}
QPoint SkyMap::toScreenI( SkyPoint *o, bool oRefract, bool *onVisibleHemisphere) {
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic