常用距离计算单片机C语言程序

26 篇文章 1 订阅
9 篇文章 0 订阅

一、欧几里得距离(Euclidean Distance)

1.定义

欧氏距离,即空间中两点的直线距离,设空间中X的坐标为在这里插入图片描述
Y的坐标为在这里插入图片描述
X与Y之间的欧式距离为
在这里插入图片描述

2.C语言程序

/*******************************************************************************
  * 函数名:EuclideanDistance
  * 功  能:计算空间中两个点的欧几里得距离
  * 参  数:*u16DataA点A的坐标,数组
			*u16DataB点B的坐标,数组
			u16Size数组大小,数据维度
  * 返回值:u16Dist距离
  * 说  明:无
*******************************************************************************/
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之间的切比雪夫距离为
在这里插入图片描述

2.C语言程序

/*******************************************************************************
  * 函数名:ChebyshevDistance
  * 功  能:计算空间中两个点的切比雪夫距离
  * 参  数:*u16DataA点A的坐标,数组
			*u16DataB点B的坐标,数组
			u16Size数组大小,数据维度
  * 返回值:u16Dist距离
  * 说  明:无
*******************************************************************************/
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之间的曼哈顿距离为
在这里插入图片描述

2.C语言程序

/*******************************************************************************
  * 函数名:ManhattanDistance
  * 功  能:计算空间中两个点的曼哈顿距离
  * 参  数:*u16DataA点A的坐标,数组
			*u16DataB点B的坐标,数组
			u16Size数组大小,数据维度
  * 返回值:u16Dist距离
  * 说  明:无
*******************************************************************************/
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 <math.h>

各程序均已在STM32F103系列单片机中测试成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值