(1)计算两点之间向量的 各种 范数(里面还有各种范数可以选择)
#include<pcl/point_cloud.h>
#include<pcl/point_types.h>
#include<pcl/visualization/pcl_visualizer.h> //cout endl
#include <pcl/common/norms.h>
typedef pcl::PointXYZ PointT;
int main()
{
//(1)计算两点之间向量的 各种 范数(里面还有各种范数可以选择)
// brief Enum that defines all the types of norms available.
// float pcl::selectNorm (FloatVectorT A, FloatVectorT B, int dim, NormType norm_type)
//{L1, L2_SQR, L2, LINF, JM, B, SUBLINEAR, CS, DIV, PF, K, KL, HIK};
//http://pointclouds.org/documentation/norms_8hpp_source.html
//brief Compute the L1 norm of the vector between two points
Eigen::Vector3f A(0, 0, 0);
Eigen::Vector3f B(1, 2, 3);
//float a = pcl::selectNorm(A, B, 3, pcl::L1); //norm += std::abs(a[i] - b[i]);
float a = pcl::selectNorm(A, B, 3, pcl::SUBLINEAR); //norm += std::sqrt (std::abs (a[i] - b[i]));
//(2)以下的函数都是根据第1个函数进行包装
//float pcl::L1_Norm (FloatVectorT A, FloatVectorT B, int dim)
float b = pcl::L1_Norm(A, B, 3);
//2.1 float L1_Norm(FloatVectorT A, FloatVectorT B, int dim)
//brief Compute the L1 norm of the vector between two points
//norm += std::abs(a[i] - b[i]);
//2.2 float L2_Norm_SQR(FloatVectorT A, FloatVectorT B, int dim);
//brief Compute the squared L2 norm of the vector between two points
//float diff = a[i] - b[i];
//norm += diff * diff;
//2.3 float L2_Norm(FloatVectorT A, FloatVectorT B, int dim);
//brief Compute the L2 norm of the vector between two points
//return std::sqrt (L2_Norm_SQR(a, b, dim));
//2.4 float Linf_Norm (FloatVectorT A, FloatVectorT B, int dim);
//brief Compute the L-infinity norm of the vector between two points
//norm = (std::max)(std::abs(a[i] - b[i]), norm);
//2.5 float JM_Norm(FloatVectorT A, FloatVectorT B, int dim);
//brief Compute the JM norm of the vector between two points
//norm += (std::sqrt (a[i]) - std::sqrt (b[i])) * (std::sqrt (a[i]) - std::sqrt (b[i]));
//2.6 float B_Norm(FloatVectorT A, FloatVectorT B, int dim);
//brief Compute the B norm of the vector between two points
//for (int i = 0; i < dim; ++i)
//norm += std::sqrt(a[i] * b[i]);
//if (norm > 0)
// result = -std::log(norm);
//else
// result = 0;
//2.7 float Sublinear_Norm(FloatVectorT A, FloatVectorT B, int dim);
//brief Compute the sublinear norm of the vector between two points
//norm += std::sqrt (std::abs (a[i] - b[i]));
//2.8 float CS_Norm(FloatVectorT A, FloatVectorT B, int dim);
//brief Compute the CS norm of the vector between two points
//for (int i = 0; i < dim; ++i)
//if ((a[i] + b[i]) != 0)
// norm += (a[i] - b[i]) * (a[i] - b[i]) / (a[i] + b[i]);
//else
// norm += 0;
//2.9 float Div_Norm(FloatVectorT a, FloatVectorT b, int dim)
//brief Compute the div norm of the vector between two points
//for (int i = 0; i < dim; ++i)
//if ((a[i] / b[i]) > 0)
// norm += (a[i] - b[i]) * std::log(a[i] / b[i]);
//else
// norm += 0;
//2.10 float PF_Norm(FloatVectorT a, FloatVectorT b, int dim, float P1, float P2)
//brief Compute the PF norm of the vector between two points
//norm += (P1 * a[i] - P2 * b[i]) * (P1 * a[i] - P2 * b[i]);
//2.11 float K_Norm(FloatVectorT A, FloatVectorT B, int dim, float P1, float P2);
//brief Compute the K norm of the vector between two points
//norm += std::abs (P1 * a[i] - P2 * b[i]);
//2.12 float KL_Norm(FloatVectorT A, FloatVectorT B, int dim);
//brief Compute the KL between two discrete probability density functions
//if ((b[i] != 0) && ((a[i] / b[i]) > 0))
// norm += a[i] * std::log(a[i] / b[i]);
//else
// norm += 0;
//2.13 float HIK_Norm(FloatVectorT A, FloatVectorT B, int dim);
//brief Compute the HIK norm of the vector between two points
//norm += (std::min)(a[i], b[i]);
system("pause");
return 0;
}
参考文章:
http://pointclouds.org/documentation/norms_8h.html
http://pointclouds.org/documentation/norms_8h_source.html
http://pointclouds.org/documentation/norms_8hpp_source.html
网友评论