使用场景
监控摄像头对接不一样的云台,各云台设备的坐标系不一致。为了适配差异,提供给客户端的坐标系统一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;
}