gpt4 book ai didi

c++ - 如何计算两条线的交点

转载 作者:太空狗 更新时间:2023-10-29 19:58:55 26 4
gpt4 key购买 nike

我正在尝试使用霍夫变换为光流算法计算线之间的交点。但是,当我使用我的算法计算交点时,我没有得到应有的分数。

我将线条保存为我创建的名为 ImageLine 的类的实例。这是我的交集方法的代码。

Point ImageLine::intersectionWith(ImageLine other)
{
float A2 = other.Y2() - other.Y1();
float B2 = other.X2() - other.X1();
float C2 = A2*other.X1() + B2*other.Y1();

float A1 = y2 - y1;
float B1 = x2 - x1;
float C1 = A1 * x1 + B1 * y1;

float det = A1*B2 - A2*B1;
if (det == 0)
{
return Point(-1,-1);
}
Point d = Point((B2 * C1 - B1 * C2) / det, -(A1 * C2 - A2 * C1) / det);
return d;
}

这个方法是对的,还是我哪里做错了?据我所知,它应该可以工作,就像我硬编码的单个点一样,但是,在使用真实数据时我无法获得良好的交集。

最佳答案

考虑到数学方面:如果我们有两个线性方程:

y = m1 * x + c1
y = m2 * x + c2

交点:(X , Y),由以下等式描述的两条线:

Y = m1 * X + c1
Y = m2 * X + c2

是满足两个方程的点,即:

m1 * X + c1 = m2 * X + c2
(Y - c1) / m1 = (Y - c2) / m2

因此交点坐标为:

intersectionX = (c2 - c1) / (m1 - m2)
intersectionY = (m1*c1 - c2*m2) / m1-m2 or intersectionY = m1 * intersectionX + c1

注:c1、m1和c2、m2是通过取直线的任意2个点代入直线方程计算得到的。

关于c++ - 如何计算两条线的交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16524096/

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