第一个是common.h。
#pragma once
//#pragma once
:这是一个非标准的预处理指令,用于在包含文件时防止同一个头文件被多次包含。它的作用类似于传统的宏保护,但它不需要在文件末尾添加取消宏定义的指令。这个指令在大多数现代编译器中都得到了支持。
#include <cmath>
#include <pcl/point_types.h>
typedef pcl::PointXYZI PointType;
//struct pcl::PointXYZI;Members: float x, y, z, intensity。
inline double rad2deg(double radians)
{
return radians * 180.0 / M_PI;
}
inline double deg2rad(double degrees)
{
return degrees * M_PI / 180.0;
}
//这两个函数是内联函数,用于将弧度转换为角度(rad2deg
),以及将角度转换为弧度(deg2rad
)。内联函数是一种优化手段,它建议编译器在每次调用函数时直接将函数体插入到调用点,而不是进行函数调用,这样可以减少函数调用的开销。
第二个是tic_toc.h。用于记录代码运行的时间。
#pragma once
#include <ctime>
#include <cstdlib>
#include <chrono>
class TicToc
{
public:
TicToc()
{
tic();
}
//当创建 TicToc
类的实例时,会自动调用 tic()
方法。这确保了时间测量从对象创建时就开始。
void tic()
{
start = std::chrono::system_clock::now();//获取当前的系统时间点。
}
double toc()
{
end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - start;
return elapsed_seconds.count() * 1000;
//std::chrono::duration<double>
来实现的,它允许以秒为单位表示时间间隔,然后乘以1000将其转换为毫秒。返回值是执行时间的毫秒数。
}
private:
std::chrono::time_point<std::chrono::system_clock> start, end;
//
std::chrono::time_point
:这是一个模板类,用于表示一个时间点。它需要一个时钟作为模板参数,这里使用的是std::chrono::system_clock
。std::chrono::system_clock
:这是一个标准的时钟类型,它提供了系统级的绝对时间。它的时间点表示的是自1970年1月1日(即Unix纪元)以来的时间。
};