找到旋转角度,倒置的 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
}
我有两点,p1
和p2
。 X 轴从左到右增加。 Y 轴从上到下递增。我有一个点 d
,我想围绕它旋转一组点 p_set
.
如何找到从 p1
到 p2
关于 d
的旋转角度。
我正在做的是将 p1
、 p2
翻译成 -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-d
和 p1-d
,所以旋转角度类似于 atan((p2.y-d.y)/(p2.x-d.x)) - atan((p1.y-d.y)/(p1.x-d.x))
背景: 我正在实现一个应用程序,我需要在选定的行上进行仿射变换。线使用 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
}
我有两点,p1
和p2
。 X 轴从左到右增加。 Y 轴从上到下递增。我有一个点 d
,我想围绕它旋转一组点 p_set
.
如何找到从 p1
到 p2
关于 d
的旋转角度。
我正在做的是将 p1
、 p2
翻译成 -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-d
和 p1-d
,所以旋转角度类似于 atan((p2.y-d.y)/(p2.x-d.x)) - atan((p1.y-d.y)/(p1.x-d.x))