📄 objectanglecheck.h
字号:
// ObjectAngleCheck.h: interface for the ObjectAngleCheck class.
//
//////////////////////////////////////////////////////////////////////
// ***************************************************************
// ObjectAngleCheck version: 1.0 ? date: 12/26/2007
// -------------------------------------------------------------
// 本类中包含对0~360度坐标系中角度的几个判断算法,供其它类继承使用
// 包括了判断一个夹角是否覆盖了0~360度分界线;判断两个角度所形成的最小夹角值;
//另有计算两个角度间的角度增量,两角度间的关系为逆时针则为正。
// -------------------------------------------------------------
// Copyright (C) 2007 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
#if !defined(AFX_OBJECTANGLECHECK_H__C8B2085D_0C9B_42FB_BA90_9A938F0DEBF6__INCLUDED_)
#define AFX_OBJECTANGLECHECK_H__C8B2085D_0C9B_42FB_BA90_9A938F0DEBF6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define CONSTTWOPI 6.283185307179586
#define PI 3.141592653589793
class ObjectAngleCheck
{
public:
ObjectAngleCheck();
virtual ~ObjectAngleCheck();
/**
*计算两个角间的最小角度偏差,无正负,两个角度输入无先后,角度单位为度
*
*/
double GetShortDistanceBetween2Angle(double Angle1, double Angle2);
/**
*@brief CheckObstacleIsBehind函数用于检测某障碍物是否横跨0、360度分界线,
*在-180~180坐标系中则检测是否横跨在+-180度分界线上
*
*输入依次为该物体的左边界角、中心角、右边界角,当是横跨时为真,否则为假。
*@todo 在本方法中横跨的情况所出问题最多,检测的依据也至今仍非完善。
*/
bool CheckObstacleIsBehind(double dLBoundaryAngle,double dCenterAngle,double dRightBoundaryAngle);
/**
*@brief GetAngulardisplacementIn2Angle函数用于获取两个角间的位移。
*
*计算两个角间的最小角度偏差,类似GetShortDistanceBetween2Angle,但考虑到了两个角间形成的偏差是
*由于顺时针旋转导致的还是逆时针旋转形成的偏差,因此输入的两个角度是有先后的.
*计算的是AngleLatter 相对于AnglePre的,角度单位为弧度
*
*@parm AnglePre 该参数输入的是前一时刻的角或称基准角
*@parm AngleLatter 该参数输入的是后一时刻的角或称偏移后角
*@output 输出带正负的差角,正则表示是由于AnglePre到AngleLatter逆时针旋转形成,负则表示顺时针旋转新城
*
*/
double GetAngulardisplacementIn2Angle(double AnglePre, double AngleLatter);
/**
*@brief GetAngulardisplacementIn2Angle函数用于获取两个角间的位移。
*
*计算两个角间的最小角度偏差,作用与GetAngulardisplacementIn2Angle一样,不过输入角度单位为度
*计算的是AngleLatter 相对于AnglePre的,角度单位为度
*
*@parm AnglePre 该参数输入的是前一时刻的角或称基准角
*@parm AngleLatter 该参数输入的是后一时刻的角或称偏移后角
*@output 输出带正负的差角,正则表示是由于AnglePre到AngleLatter逆时针旋转形成,负则表示顺时针旋转新城
*
*/
double GetAngulardisplacementIn2Angle_Degree(double AnglePre, double AngleLatter);
/**
*限制角度在0~2pi
*/
void LimitAngleIn0_2Pi(double &AngleInRadius);
void LimitAngleIn0_2Pi(float &AngleInRadius);
/**
*限制角度在0~360度
*/
void LimitAngleIn0_360Degree(double &AngleInDegree);
/**
*角度度到弧度的单位转化,带有正负
*/
double TransAngleToDegree(double Angle);
/**
*弧度到角度度的单位转化,带有正负
*/
double TransAngleToArc(double Angle);
};
#endif // !defined(AFX_OBJECTANGLECHECK_H__C8B2085D_0C9B_42FB_BA90_9A938F0DEBF6__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -