gpt4 book ai didi

c++ - 为什么我不能在 opencv 中围绕一个点旋转 90 度?

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:47 24 4
gpt4 key购买 nike

我想将一组点顺时针旋转 90°,如下所示:

enter image description here

但我使用此处显示的代码,并将角度设置为 90°,中心设置为 (100,100),我得到的结果如下:

enter image description here

我查了一下公式,和我的代码是一样的:

cv::Point2f rotate2d(const cv::Point2f& inPoint, const double& angRad)
{
cv::Point2f outPoint;
//CW rotation
outPoint.x = std::cos(angRad)*inPoint.x - std::sin(angRad)*inPoint.y;
outPoint.y = std::sin(angRad)*inPoint.x + std::cos(angRad)*inPoint.y;
return outPoint;
}

cv::Point2f rotatePoint(const cv::Point2f& inPoint,
const cv::Point2f& center,
const double& angRad)
{
return rotate2d(inPoint - center, angRad) + center;
}

最佳答案

问题可能隐藏在第二个函数的重调值中:

cv::Point2f rotatePoint(const cv::Point2f& inPoint, const cv::Point2f& center, const double& angRad){
return rotate2d(inPoint - center, angRad) + center;
------------^ --------------^
}

您首先应用它,然后来回转换中心。如果要围绕轴心点旋转:减去它(围绕原点执行旋转),然后在应用转换后添加它。您可以直接在您的第一个函数中执行此操作,方法是将转换修改为:

int x = cos(angRad) * (inPoint.x - axisOfRotation.x)
- sin(angRad) * (inPoint.y - axisOfRotation.y) + axisOfRotation.x;
-------^
int y = sin(angRad) * (inPoint.x - axisOfRotation.x)
+ cos(angRad) * (inPoint.y - axisOfRotation.y) + axisOfRotation.y;
// added to both coordinates -------^

其中:inPoint 是要旋转的点,axisOfRotation 是枢轴点,angRad = angInDegrees * PI/180. 的角度顺时针旋转。

检查 this以获得进一步的见解。

关于c++ - 为什么我不能在 opencv 中围绕一个点旋转 90 度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32774662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com