0误差的坐标系转换

使用场景

监控摄像头对接不一样的云台,各云台设备的坐标系不一致。为了适配差异,提供给客户端的坐标系统一8192。客户端在获取设置的过程中,存在坐标系转换和反转误差的问题。以下方案就是为了解决这种误差。有个前提,真实坐标系必须小于传输坐标系。

方案描述

在这里插入图片描述
N转M时
两个黑点间,最多只有一个圆圈。所以每个圆圈左边的黑点各不一样,可以一一对应。
找左边的黑点:(X*M)/N,整数运算,不用四舍五入。

M转N
因为N转M的时候已经可以一一对应,那M转N时,只要反着找对应的圆圈就可以。
找右边的圆圈:(X*N+(M-1))/M,也整除,不用四舍五入。

代码例子

#include <stdio.h>

int ntom(int n, int m, int x)
{
	return (x * m) / n;
}

int mton(int n, int m, int x)
{
	return ((x * n) + (m - 1)) / m;
}

void test_coor_trans(int n, int m)
{
	for (int i = 100;i < 100000;i++)
	{
		if (i != mton(n, m, ntom(n, m, i)))
		{
			printf("trans error n=%d m=%d x=%d\n", n, m , i);
		}
	}
}

int main()
{
	test_coor_trans(360, 8192);
	test_coor_trans(99, 8192);

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值