欧氏距离,即空间中两点的直线距离,设空间中X的坐标为
Y的坐标为
X与Y之间的欧式距离为
uint16_t EuclideanDistance(uint16_t *u16DataA, uint16_t *u16DataB, uint16_t u16Size) { uint16_t u16Dist = 0; int16_t s16Temp = 0; uint16_t i; for (i = 0; i < u16Size; i++) { s16Temp = ((int16_t)*(u16DataA + i) - ((int16_t)*(u16DataB + i))); s16Temp = s16Temp * s16Temp; u16Dist += (uint16_t)s16Temp; } u16Dist = (uint16_t)sqrt(u16Dist); return u16Dist; }二、切比雪夫距离(Chebyshev Distance) 1.定义
又称“棋盘距离”,定义为两个点在任意坐标维度上的差值的最大值,设空间中X的坐标为
Y的坐标为
X与Y之间的切比雪夫距离为
uint16_t ChebyshevDistance(uint16_t *u16DataA, uint16_t *u16DataB, uint16_t u16Size) { int16_t s16Temp = 0; uint16_t i; s16Temp = 0; uint16_t u16Max = 0;; for (i = 0; i < u16Size; i++) { s16Temp = ((int16_t)*(u16DataA + i) - ((int16_t)*(u16DataB + i)));// s16Temp = abs(s16Temp); if (s16Temp > u16Max) { u16Max = s16Temp; } } return u16Max; }三、曼哈顿距离(Manhattan Distance) 1.定义
又被称为“出租车距离”、“街区距离”,设空间中X的坐标为
Y的坐标为
X与Y之间的曼哈顿距离为
uint16_t ManhattanDistance(uint16_t *u16DataA, uint16_t *u16DataB, uint16_t u16Size) { uint16_t u16Dist = 0; int16_t s16Temp = 0; uint16_t i; s16Temp = 0; for (i = 0; i < u16Size; i++) { s16Temp = ((int16_t)*(u16DataA + i) - ((int16_t)*(u16DataB + i)));// s16Temp = abs(s16Temp); u16Dist += (uint16_t)s16Temp; } return u16Dist; }
注意:以上各段程序均需包含math.h头文件
#include
各程序均已在STM32F103系列单片机中测试成功。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)