QCAD
Open Source 2D CAD
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
RMath Class Reference

Math functions. More...

#include <RMath.h>

List of all members.

Static Public Member Functions

static int absmod (int a, int b)
static QString angleToString (double a)
 Converts the given angle in rad to the given angle format.
static double deg2rad (double a)
 Converts degrees to radians.
static double eval (const QString &expression, bool *ok=NULL)
 Evaluates the given mathematical expression and returns the result.
static bool fuzzyCompare (double v1, double v2, double tolerance=RS::PointTolerance)
static double getAngleDifference (double a1, double a2)
static double getAngleDifference180 (double a1, double a2)
static void getBiQuadRoots (double p[], double r[][5])
static void getCubicRoots (double p[], double r[][5])
static QString getError ()
static int getGcd (int a, int b)
 Finds greatest common divider using Euclid's algorithm.
static double getNormalizedAngle (double a)
 Gets the normalized angle from a.
static void getQuadRoots (double p[], double r[][5])
static double getRelativeAngle (double a, double baseAngle)
static double gra2deg (double a)
 Converts grads to degrees.
static bool hasError ()
static void init ()
static bool isAngleBetween (double a, double a1, double a2, bool reversed)
 Tests if angle a is between a1 and a2.
static bool isAngleReadable (double angle, double tolerance=RS::AngleTolerance)
static bool isInf (double v)
static bool isNaN (double v)
static bool isNormal (double v)
static bool isSameDirection (double dir1, double dir2, double tol=RS::AngleTolerance)
 Tests if two angels point approximately in the same direction.
static double makeAngleReadable (double angle, bool readable=true, bool *corrected=NULL)
 Adds 180° to the given angle if a text constructed with that angle otherwise wouldn't be readable.
static int mround (double v)
 Rounds the given double to the next int.
static double parseScale (const QString &scaleString)
static double pow (double x, double y)
 Safe pow function.
static double rad2deg (double a)
 Converts radians to degrees.
static double rad2gra (double a)
 Converts radians to gradians.
static void simplify (int numerator, int denominator, int &numeratorRes, int &denominatorRes)
template<class T >
static void swap (T &a, T &b)
 Swaps two given values.
static void toFraction (double v, int maxDenominator, int &number, int &numerator, int &denominator)
static QString toFractionString (double v, int maxDenominator)
static double trunc (double v)
static void uninit ()

Static Private Attributes

static QString lastError = ""
 Copyright (c) 2011-2013 by Andrew Mustun.

Detailed Description

Math functions.

Scriptable:
This class is wrapped for script environments.

Member Function Documentation

int RMath::absmod ( int  a,
int  b 
)
static
Returns:
Absolute modulus.
QString RMath::angleToString ( double  a)
static

Converts the given angle in rad to the given angle format.

Todo:
Support different formats.
double RMath::deg2rad ( double  a)
static

Converts degrees to radians.

Parameters:
aangle in degrees
double RMath::eval ( const QString &  expression,
bool *  ok = NULL 
)
static

Evaluates the given mathematical expression and returns the result.

Angles may be expressed in degrees (default), rad (#r), gon (#g) or as surveyors angles (N::d#'#"E).

bool RMath::fuzzyCompare ( double  v1,
double  v2,
double  tolerance = RS::PointTolerance 
)
static
Returns:
True if the difference between v1 and v2 is less then the given tolerance.
double RMath::getAngleDifference ( double  a1,
double  a2 
)
static
Parameters:
a1first angle in rad
a2s second angle in rad
Returns:
The angle that needs to be added to a1 to reach a2. Always positive and less than 2*pi.
double RMath::getAngleDifference180 ( double  a1,
double  a2 
)
static
Parameters:
a1first angle in rad
a2s second angle in rad
Returns:
The angle that needs to be added to a1 to reach a2. Always between -pi and pi.
void RMath::getBiQuadRoots ( double  p[],
double  r[][5] 
)
static
   \par Non-Scriptable:

This function is not available in script environments.

void RMath::getCubicRoots ( double  p[],
double  r[][5] 
)
static
   \par Non-Scriptable:

This function is not available in script environments.

QString RMath::getError ( )
static
Returns:
Last error encountered by a math function.
int RMath::getGcd ( int  a,
int  b 
)
static

Finds greatest common divider using Euclid's algorithm.

See also:
http://en.wikipedia.org/wiki/Greatest_common_divisor
Parameters:
athe first number
bthe second number
Returns:
The greatest common divisor of a and b.
double RMath::getNormalizedAngle ( double  a)
static

Gets the normalized angle from a.

Used to make sure that an angle is in the range between 0 and 2 pi.

Parameters:
athe unnormalized angle, e.g. 8
Returns:
The angle a normalized to the range of $ 0 \ldots 2\pi $, e.g. normalized angle from 8 is 1.716.
void RMath::getQuadRoots ( double  p[],
double  r[][5] 
)
static
   \par Non-Scriptable:

This function is not available in script environments.

double RMath::getRelativeAngle ( double  a,
double  baseAngle 
)
static
Returns:
Angle a as angle relative to baseAngle. Result is in range -PI < result < PI.
double RMath::gra2deg ( double  a)
static

Converts grads to degrees.

Parameters:
aangle in grad (gon)
bool RMath::hasError ( )
static
Returns:
True if an error was encountered since the last check.
static void RMath::init ( )
inlinestatic
bool RMath::isAngleBetween ( double  a,
double  a1,
double  a2,
bool  reversed 
)
static

Tests if angle a is between a1 and a2.

a, a1 and a2 must be in the range between 0 and 2*PI. All angles in rad.

Parameters:
athe test angle
a1the lower limiting angle
a2the upper limiting angle
reversedTrue for clockwise testing. False for ccw testing.
Returns:
true if the angle a is between a1 and a2.
bool RMath::isAngleReadable ( double  angle,
double  tolerance = RS::AngleTolerance 
)
static
Parameters:
anglethe angle in rad
toleranceThe tolerance by which the angle still maybe in the unreadable range.
Returns:
true: If the given angle is in a range that is readable for texts created with that angle.
bool RMath::isInf ( double  v)
static
Returns:
true if v is Inf.
bool RMath::isNaN ( double  v)
static
Returns:
true if v is NaN.
bool RMath::isNormal ( double  v)
static
Returns:
true if v is non NaN and not Inf.
bool RMath::isSameDirection ( double  dir1,
double  dir2,
double  tolerance = RS::AngleTolerance 
)
static

Tests if two angels point approximately in the same direction.

Parameters:
dir1first direction
dir2second direction
toleranceTolerance in rad.
Return values:
trueThe two angles point in the same direction.
falseThe difference between the two angles is at least tolerance radians.
double RMath::makeAngleReadable ( double  angle,
bool  readable = true,
bool *  corrected = NULL 
)
static

Adds 180° to the given angle if a text constructed with that angle otherwise wouldn't be readable.

Used for dimension texts and for mirroring texts.

Parameters:
anglethe original angle
readabletrue: make angle readable, false: unreadable
correctedPointer to boolean that will point to true if the given angle was corrected, false otherwise, or null.
Returns:
The given angle or the given angle + pi, depending which one is readable from the bottom or right.
static int RMath::mround ( double  v)
inlinestatic

Rounds the given double to the next int.

double RMath::parseScale ( const QString &  scaleString)
static
Returns:
Value given as drawing scale (#:#).
double RMath::pow ( double  x,
double  y 
)
static

Safe pow function.

Parameters:
xthe base
ythe exponent
Returns:
The value of x raised to the power of y.
double RMath::rad2deg ( double  a)
static

Converts radians to degrees.

Parameters:
aangle in radians
double RMath::rad2gra ( double  a)
static

Converts radians to gradians.

Parameters:
aangle in radians
void RMath::simplify ( int  numerator,
int  denominator,
int &  numeratorRes,
int &  denominatorRes 
)
static
Returns:
Simlified fraction for the given fraction (numerator/denomiator).
template<class T >
static void RMath::swap ( T &  a,
T &  b 
)
inlinestatic

Swaps two given values.

   \par Non-Scriptable:

This function is not available in script environments.

void RMath::toFraction ( double  v,
int  maxDenominator,
int &  number,
int &  numerator,
int &  denominator 
)
static
Returns:
Representation of the given number as fraction (number numerator/denominator). Rounding occurs to satisfy the use of maxDenominator as maximum value for denominator.
QString RMath::toFractionString ( double  v,
int  maxDenominator 
)
static
Returns:
String representing the given number, expressed as fraction (# #/#).
double RMath::trunc ( double  v)
static
Returns:
v truncated (cut off) at decimal point.
static void RMath::uninit ( )
inlinestatic

Member Data Documentation

QString RMath::lastError = ""
staticprivate

Copyright (c) 2011-2013 by Andrew Mustun.

All rights reserved.

This file is part of the QCAD project.

QCAD is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

QCAD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with QCAD. Last error encountered.


The documentation for this class was generated from the following files: