저는 이미지 좌표계와 타일 좌표계를 가지고 있습니다.시프트, 스케일 및 회전 좌표계
타일 좌표계에서 Point (u_img/v_img)를 알고 싶습니다.
좌표계는 sigma로 조정됩니다. u_img = sigma * u_tile; 이동은 타일 좌표계에서 제공됩니다. 두 좌표계 간의 회전 각도가 표제입니다.
는 내가 원하는 것은 같은 것입니다 (u_tile v_tile) F를 = (u_img, v_img, 시그마, 제목, 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' 타입은 무엇입니까? 만약 정수형이라면 문제는 정수형으로 예상되는 결과는 나오지 않습니다. – denahiro
결과가 예상과 다르다. 변형이 올바르지 않다고 생각한다. – yokolini
imgPix와 tilePix가 모두 float이라는 것을 알 수 있도록 함수 헤더를 추가했습니다. – yokolini