如何解决如何获得两点相对于第三点的对角?
我正在尝试开发一个简单的桌面UI,允许用户获取相对于第三点c的两个点a和b之间的角度。
用户将单击三个点,最后一个点是将计算对角的原点/参考点。
我该如何使用opencv做到这一点?
到目前为止,我已经能够在图像上插入三个视觉标记。我在图像上获得三个点。
如何使用点积方程获取point1和point2之间的夹角(以点3为原点)。
我对opencv如何定位像素以及如何获得对角感到有些困惑。非常感谢您的帮助。
这是一些代码:
Mat img;
int clickCount = 0;
Point _clickPoint1,_clickPoint2,_clickPoint3;
Point _clickPoint1Flag,_clickPoint2Flag,_clickPoint3Flag;
double subtendedAngle;
private void buttonCalculate_Click(object sender,EventArgs e)
{
// Can anyone help?
}
private void imageBox1_MouseDoubleClick(object sender,MouseEventArgs e)
{
if (clickCount < 3)
{
clickCount += 1;
// insert marker for visual identification
var _point = e.Location;
if (clickCount.Equals(1))
{
_clickPoint1 = new Point(e.X,e.Y);
_clickPoint1Flag = new Point(e.X,(e.Y - 25));
CvInvoke.Line(img,_clickPoint1,_clickPoint1Flag,new MCvScalar(0,0),3);
imageBox1.Image = img;
}
if (clickCount.Equals(2))
{
_clickPoint2 = new Point(e.X,e.Y);
_clickPoint2Flag = new Point(e.X,3);
imageBox1.Image = img;
}
if (clickCount.Equals(3))
{
_clickPoint3 = new Point(e.X,e.Y);
_clickPoint3Flag = new Point(e.X,_clickPoint3,_clickPoint3Flag,255,255),3);
imageBox1.Image = img;
}
}
else
{
Console.WriteLine("too many clicks");
}
}
The yellow marker is where I want to learn the angle
感谢您抽出宝贵的时间阅读这篇文章以及任何建议。
解决方法
使用Atan2
函数
fi = Math.Atan2(crossproduct,dotproduct)
其中
crossproduct = (point1.x - point3.x) * (point2.y - point3.y) -
(point1.y - point3.y) * (point2.x - point3.x)
dotproduct = (point1.x - point3.x) * (point1.y - point3.y) +
(point2.x - point3.x) * (point2.y - point3.y)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。