【发布时间】:2012-08-16 08:18:36
【问题描述】:
我有一个图像坐标系和一个平铺坐标系。
我想知道平铺坐标系中的点(u_img / v_img)。
坐标系使用 sigma 进行缩放。 u_img = sigma * u_tile; 位移在瓦片坐标系中给出。 两个坐标系之间的旋转角度就是航向。
我想要的是类似 (u_tile v_tile) = f( u_img, v_img, sigma, heading, u_trans, v_trans)
我开始:
void image2tile( uint u_img, uint v_img,
int u_trans_tile, int v_trans_tile,
float imgPixelSize, float tilePixelSize,
float heading,
int& u_tile, int& v_tile )
{
float ratio = imgPixelSize / tilePixelSize;
int u_trans = u_img * ratio + u_trans_tile;
int v_trans = v_img * ratio + v_trans_tile;
v_tile = floor( v_trans * cos( heading ) + u_trans * sin ( heading ) );
u_tile = floor( -v_trans * sin( heading ) + u_trans * cos ( heading ) );
}
有些结果似乎是合理的,但如果我输入 u_img = 0 和 v_img = 0,我应该以 u_trans_tile 和 v_trans_tile 结束,但实际上并非如此。
我认为解决方案可能如下所示:
1.) 将平铺坐标中的平移转换为图像坐标 2.) 之后就是一个正常的变换,使用比例因子乘以旋转矩阵乘以点向量并加上新的平移向量。
u_trans_tile -> u_trans_img v_trans_tile -> u_trans_img
v_tile = floor( ratio*( v_img * cos( heading ) + u_img * sin ( heading ) + u_trans_img);
u_tile = floor( ratio*(-v_img * sin( heading ) + u_img * cos ( heading ) + v_trans_img);
但实际上我无法让它工作.. 任何解决方案?
【问题讨论】:
-
结果不是预期的还是有其他错误?
imgPixelSize和tilePixelSize是什么类型?如果它们是整数,那么您的问题是整数除法,它不会产生预期的结果。 -
结果不是预期的,我认为我的转换不正确。
-
我更改了添加函数头,这样你就可以看到 imgPix 和 tilePix 都是浮动的
-
您是否检查过
cos(m_currGpsPos_s.heading)返回您期望的值?否则,您的转换看起来是正确的,尽管在您切换v_tile和u_tile的顺序时代码有些混乱。 -
我编辑了我的问题,也许这会对你有所帮助。我真的不认为我有正确的转变。
标签: c++ rotation system translation coordinate