• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

kstars

Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
Projector Class Referenceabstract

#include <projector.h>

Inheritance diagram for Projector:
Inheritance graph
[legend]

Public Member Functions

 Projector (const ViewParams &p)
 
virtual ~Projector ()
 
bool checkVisibility (SkyPoint *p) const
 
QPointF clipLine (SkyPoint *p1, SkyPoint *p2) const
 
Vector2f clipLineVec (SkyPoint *p1, SkyPoint *p2) const
 
double findPA (SkyObject *o, float x, float y) const
 
double fov () const
 
virtual SkyPoint fromScreen (const QPointF &p, dms *LST, const dms *lat) const
 
virtual QVector< Vector2f > groundPoly (SkyPoint *labelpoint=0, bool *drawLabel=0) const
 
bool onScreen (const QPointF &p) const
 
bool onScreen (const Vector2f &p) const
 
void setViewParams (const ViewParams &p)
 
QPointF toScreen (const SkyPoint *o, bool oRefract=true, bool *onVisibleHemisphere=0) const
 
virtual Vector2f toScreenVec (const SkyPoint *o, bool oRefract=true, bool *onVisibleHemisphere=0) const
 
virtual SkyMap::Projection type () const =0
 
virtual bool unusablePoint (const QPointF &p) const
 

Protected Member Functions

virtual double cosMaxFieldAngle () const
 
virtual double projectionK (double x) const
 
virtual double projectionL (double x) const
 
virtual double radius () const
 

Static Protected Member Functions

static SkyPoint pointAt (double az, KStarsData *data)
 

Protected Attributes

double m_cosY0
 
KStarsData * m_data
 
double m_fov
 
double m_sinY0
 
ViewParams m_vp
 

Detailed Description

This class serves as an interface to handle projections.

Definition at line 49 of file projector.h.

Constructor & Destructor Documentation

Projector::Projector ( const ViewParams &  p)
explicit

Constructor.

Parameters
pthe ViewParams for this projection

Definition at line 49 of file projector.cpp.

Projector::~Projector ( )
virtual

Definition at line 55 of file projector.cpp.

Member Function Documentation

bool Projector::checkVisibility ( SkyPoint *  p) const

Determine if the skypoint p is likely to be visible in the display window.

checkVisibility() is an optimization function. It determines whether an object appears within the bounds of the skymap window, and therefore should be drawn. The idea is to save time by skipping objects which are off-screen, so it is absolutely essential that checkVisibility() is significantly faster than the computations required to draw the object to the screen.

If the ground is to be filled, the function first checks whether the point is below the horizon, because they will be covered by the ground anyways. Importantly, it does not call the expensive EquatorialToHorizontal function. This means that the horizontal coordinates MUST BE CORRECT! The vast majority of points are already synchronized, so recomputing the horizontal coordinates is a waste.

The function then checks the difference between the Declination/Altitude coordinate of the Focus position, and that of the point p. If the absolute value of this difference is larger than fov, then the function returns false. For most configurations of the sky map window, this simple check is enough to exclude a large number of objects.

Next, it determines if one of the poles of the current Coordinate System (Equatorial or Horizontal) is currently inside the sky map window. This is stored in the member variable 'bool SkyMap::isPoleVisible, and is set by the function SkyMap::setMapGeometry(), which is called by SkyMap::paintEvent(). If a Pole is visible, then it will return true immediately. The idea is that when a pole is on-screen it is computationally expensive to determine whether a particular position is on-screen or not: for many valid Dec/Alt values, all values of RA/Az will indeed be onscreen, but for other valid Dec/Alt values, only most RA/Az values are onscreen. It is cheaper to simply accept all "horizontal" RA/Az values, since we have already determined that they are on-screen in the "vertical" Dec/Alt coordinate.

Finally, if no Pole is onscreen, it checks the difference between the Focus position's RA/Az coordinate and that of the point p. If the absolute value of this difference is larger than XMax, the function returns false. Otherwise, it returns true.

Parameters
ppointer to the skypoint to be checked.
Returns
true if the point p was found to be inside the Sky map window.
See also
SkyMap::setMapGeometry()
SkyMap::fov()
Note
If you are creating skypoints using equatorial coordinates, then YOU MUST CALL EQUATORIALTOHORIZONTAL BEFORE THIS FUNCTION!

To avoid calculating refraction, we just use the unrefracted altitude and add a 2-degree 'safety factor'

Definition at line 181 of file projector.cpp.

QPointF Projector::clipLine ( SkyPoint *  p1,
SkyPoint *  p2 
) const

ASSUMES *p1 did not clip but *p2 did.

Returns the QPointF on the line between *p1 and *p2 that just clips.

Definition at line 110 of file projector.cpp.

Vector2f Projector::clipLineVec ( SkyPoint *  p1,
SkyPoint *  p2 
) const

ASSUMES *p1 did not clip but *p2 did.

Returns the Vector2f on the line between *p1 and *p2 that just clips.

Definition at line 115 of file projector.cpp.

virtual double Projector::cosMaxFieldAngle ( ) const
inlineprotectedvirtual

This function returns the cosine of the maximum field angle, i.e., the maximum angular distance from the focus for which a point should be projected.

Default is 0, i.e., 90 degrees.

Reimplemented in GnomonicProjector.

Definition at line 219 of file projector.h.

double Projector::findPA ( SkyObject *  o,
float  x,
float  y 
) const

Determine the on-screen position angle of a SkyObject.

This is the sum of the object's sky position angle (w.r.t. North), and the position angle of "North" at the position of the object (w.r.t. the screen Y-axis). The latter is determined by constructing a test point with the same RA but a slightly increased Dec as the object, and calculating the angle w.r.t. the Y-axis of the line connecing the object to its test point.

Definition at line 227 of file projector.cpp.

double Projector::fov ( ) const

Return the FOV of this projection.

Definition at line 88 of file projector.cpp.

SkyPoint Projector::fromScreen ( const QPointF &  p,
dms *  LST,
const dms *  lat 
) const
virtual

Determine RA, Dec coordinates of the pixel at (dx, dy), which are the screen pixel coordinate offsets from the center of the Sky pixmap.

Parameters
thescreen pixel position to convert
LSTpointer to the local sidereal time, as a dms object.
latpointer to the current geographic laitude, as a dms object

N.B. We don't cache these sin/cos values in the inverse projection because it causes 'shaking' when moving the sky.

Reimplemented in EquirectangularProjector.

Definition at line 353 of file projector.cpp.

QVector< Vector2f > Projector::groundPoly ( SkyPoint *  labelpoint = 0,
bool *  drawLabel = 0 
) const
virtual

Get the ground polygon.

Parameters
labelpointThis point will be set to something suitable for attaching a label
drawLabelthis tells whether to draw a label.
Returns
the ground polygon

Reimplemented in EquirectangularProjector.

Definition at line 252 of file projector.cpp.

bool Projector::onScreen ( const QPointF &  p) const

Check whether the projected point is on-screen.

Definition at line 98 of file projector.cpp.

bool Projector::onScreen ( const Vector2f &  p) const

Definition at line 104 of file projector.cpp.

SkyPoint Projector::pointAt ( double  az,
KStarsData *  data 
)
staticprotected

Helper function for drawing ground.

Returns
the point with Alt = 0, az = az

Definition at line 40 of file projector.cpp.

virtual double Projector::projectionK ( double  x) const
inlineprotectedvirtual

This function handles some of the projection-specific code.

See also
toScreen()

Reimplemented in LambertProjector, AzimuthalEquidistantProjector, GnomonicProjector, OrthographicProjector, and StereographicProjector.

Definition at line 207 of file projector.h.

virtual double Projector::projectionL ( double  x) const
inlineprotectedvirtual

This function handles some of the projection-specific code.

See also
toScreen()

Reimplemented in LambertProjector, AzimuthalEquidistantProjector, GnomonicProjector, OrthographicProjector, and StereographicProjector.

Definition at line 212 of file projector.h.

virtual double Projector::radius ( ) const
inlineprotectedvirtual

Get the radius of this projection's sky circle.

Returns
the radius in radians

Reimplemented in LambertProjector, AzimuthalEquidistantProjector, GnomonicProjector, OrthographicProjector, StereographicProjector, and EquirectangularProjector.

Definition at line 202 of file projector.h.

void Projector::setViewParams ( const ViewParams &  p)

Update cached values for projector.

Precompute cached values

Definition at line 60 of file projector.cpp.

QPointF Projector::toScreen ( const SkyPoint *  o,
bool  oRefract = true,
bool *  onVisibleHemisphere = 0 
) const

This is exactly the same as toScreenVec but it returns a QPointF.

It just calls toScreenVec and converts the result.

See also
toScreenVec()

Definition at line 93 of file projector.cpp.

Vector2f Projector::toScreenVec ( const SkyPoint *  o,
bool  oRefract = true,
bool *  onVisibleHemisphere = 0 
) const
virtual

Given the coordinates of the SkyPoint argument, determine the pixel coordinates in the SkyMap.

Since most of the projections used by KStars are very similar, if this function were to be reimplemented in each projection subclass we would end up changing maybe 5 or 6 lines out of 150. Instead, we have a default implementation that uses the projectionK and projectionL functions to take care of the differences between e.g. Orthographic and Stereographic. There is also the cosMaxFieldAngle function, which is used for testing whether a point is on the visible part of the projection, and the radius function which gives the radius of the projection in screen coordinates.

While this seems ugly, it is less ugly than duplicating 150 loc to change 5.

Returns
Vector2f containing screen pixel x, y coordinates of SkyPoint.
Parameters
opointer to the SkyPoint for which to calculate x, y coordinates.
oRefracttrue = use Options::useRefraction() value. false = do not use refraction. This argument is only needed for the Horizon, which should never be refracted.
onVisibleHemispherepointer to a bool to indicate whether the point is on the visible part of the Celestial Sphere.

Reimplemented in EquirectangularProjector.

Definition at line 402 of file projector.cpp.

virtual SkyMap::Projection Projector::type ( ) const
pure virtual

Return the type of this projection.

Implemented in LambertProjector, AzimuthalEquidistantProjector, GnomonicProjector, OrthographicProjector, StereographicProjector, and EquirectangularProjector.

bool Projector::unusablePoint ( const QPointF &  p) const
virtual

Check if the current point on screen is a valid point on the sky.

This is needed to avoid a crash of the program if the user clicks on a point outside the sky (the corners of the sky map at the lowest zoom level are the invalid points).

Parameters
pthe screen pixel position

Reimplemented in EquirectangularProjector.

Definition at line 338 of file projector.cpp.

Member Data Documentation

double Projector::m_cosY0
protected

Definition at line 228 of file projector.h.

KStarsData* Projector::m_data
protected

Definition at line 226 of file projector.h.

double Projector::m_fov
protected

Definition at line 229 of file projector.h.

double Projector::m_sinY0
protected

Definition at line 228 of file projector.h.

ViewParams Projector::m_vp
protected

Definition at line 227 of file projector.h.


The documentation for this class was generated from the following files:
  • projector.h
  • projector.cpp
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:36:23 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kstars

Skip menu "kstars"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal