ippiGetRotateTransform和nppiRotate都采用 x 和 y 移位参数,但我不确定它们是如何工作的。IPP 和 NPP 都围绕 (0, 0) 旋转,然后移动结果。这个例子展示了使用ippiGetRotateShift围绕中心旋转,但没有解释它是如何使用的。
示例的相关部分:
Ipp8u src[4*4] = ...;
Ipp8u dst[6*6];
double xShift;
double yShift;
double xShiftTmp;
double yShiftTmp;
double xCenterSrc = 2.0;
double yCenterSrc = 2.0;
double xCenterDst = 3.5;
double yCenterDst = 2.5;
double angle = 35.0;
ippiGetRotateShift ( xCenterSrc, yCenterSrc, angle, &xShift, &yShift );
/* xShift = -0.79 , yShift = 1.51 */
ippiGetRotateShift ( 1.0, 1.0, angle, &xShiftTmp, &yShiftTmp);
xShift += xShiftTmp; yShift += yShiftTmp;
/* xShift = -1.18, yShift = 2.26 */
xShift += xCenterDst - xCenterSrc;
yShift += yCenterDst - yCenterSrc;
/* xShift = 0.32, yShift = 2.76 */
该示例记录了值更改为的内容,但没有记录更改方式或原因。甚至目的地中心点也无法解释。为什么是 (3.5, 2.5) 而不是 (3, 3)?
无论如何,x 和 y 位移参数的行为似乎相同。我如何在不依赖 IPP 的情况下为 NPP 计算它们?