找到旋转角度,倒置的 y 轴,在 2D 中的两点之间

Find angle of rotation, inverted y axis, between two points in 2D

背景: 我正在实现一个应用程序,我需要在选定的行上进行仿射变换。线使用 2 个点表示。所有代码都在鼠标事件中完成。

void mousePressEvent(){
    lastPoint = event.point();
}
void mouseMoveEvent(){
    currentPoint = event.point();

    //Do transformations here.

    translate_factor = currentPoint - lastPoint
    scale_factor = currentPoint / lastPoint

    rotation_angle = f(current_point,last_point) //FIND f

    //Apply transformation
    lastPoint = currentPoint
}

我有两点,p1p2。 X 轴从左到右增加。 Y 轴从上到下递增。我有一个点 d,我想围绕它旋转一组点 p_set .
如何找到从 p1p2 关于 d 的旋转角度。

我正在做的是将 p1p2 翻译成 -d 并使用 atan2f 计算 theta,如以下代码所示。

请注意,y 是倒置的:从上到下。 这是代码

const auto about = stroke->getMidPoint();
Eigen::Affine2f t1(Eigen::Translation2f(0-about.x(),0-about.y()));

Eigen::Vector3f p1 = t1.matrix()*Eigen::Vector3f(lastPoint.x(),lastPoint.y(),1.0);
Eigen::Vector3f p2 = t1.matrix()*Eigen::Vector3f(currentPoint.x(),currentPoint.y(),1.0);

float theta = atan2f(p2[1]-p1[1],p2[0]-p1[0]);

当我使用它进行变换时,我得到了非常奇怪的旋转。 我想要的是找到作为当前点和最后点的函数的角度

在我看来,您正在寻找向量 p2-p1 的斜率。 如果我理解正确的话,你想要两个向量的斜率差 p2-dp1-d,所以旋转角度类似于 atan((p2.y-d.y)/(p2.x-d.x)) - atan((p1.y-d.y)/(p1.x-d.x))