You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.2 KiB
59 lines
1.2 KiB
package mightypork.utils.math.angles;
|
|
|
|
|
|
/**
|
|
* Common angles functionality
|
|
*
|
|
* @author Ondřej Hruška (MightyPork)
|
|
*/
|
|
class Angles {
|
|
|
|
/**
|
|
* Delta of two angles (positive or negative - positive is CCW)
|
|
*
|
|
* @param alpha first angle
|
|
* @param beta second angle
|
|
* @param fullAngle value of full angle
|
|
* @return delta of the two angles
|
|
*/
|
|
public static double delta(double alpha, double beta, double fullAngle)
|
|
{
|
|
while (Math.abs(alpha - beta) > fullAngle / 2D) {
|
|
alpha = norm(alpha + fullAngle / 2D, fullAngle);
|
|
beta = norm(beta + fullAngle / 2D, fullAngle);
|
|
}
|
|
|
|
return beta - alpha;
|
|
}
|
|
|
|
|
|
/**
|
|
* Difference of two angles (same as delta, but always positive)
|
|
*
|
|
* @param alpha first angle
|
|
* @param beta second angle
|
|
* @param fullAngle value of full angle
|
|
* @return delta of the two angles
|
|
*/
|
|
public static double diff(double alpha, double beta, double fullAngle)
|
|
{
|
|
return Math.abs(delta(alpha, beta, fullAngle));
|
|
}
|
|
|
|
|
|
/**
|
|
* Normalize angle to 0-full range
|
|
*
|
|
* @param angle angle
|
|
* @param fullAngle full angle
|
|
* @return angle normalized
|
|
*/
|
|
public static double norm(double angle, double fullAngle)
|
|
{
|
|
while (angle < 0)
|
|
angle += fullAngle;
|
|
while (angle > fullAngle)
|
|
angle -= fullAngle;
|
|
return angle;
|
|
}
|
|
}
|
|
|