我有 4 条线段,A、B、C 和 D。每条线都表示为两个点。例如。线A由点A1和点A2表示。
我想要的是
- 点 X,即线 A 射线与线 B 相交的点
- X与A1(原点)之间的距离
测试相交时,线 A 射线不应
- 与线段 D 相交
- 与线段C相交
我该怎么做呢?
终于在 OpenCV C++ 上运行了。基于此https://stackoverflow.com/a/32146853/457030 https://stackoverflow.com/a/32146853/457030.
// return the distance of ray origin to intersection point
double GetRayToLineSegmentIntersection(Point2f rayOrigin, Point2f rayDirection, Point2f point1, Point2f point2)
{
Point2f v1 = rayOrigin - point1;
Point2f v2 = point2 - point1;
Point2f v3 = Point2f(-rayDirection.y, rayDirection.x);
float dot = v2.dot(v3);
if (abs(dot) < 0.000001)
return -1.0f;
float t1 = v2.cross(v1) / dot;
float t2 = v1.dot(v3) / dot;
if (t1 >= 0.0 && (t2 >= 0.0 && t2 <= 1.0))
return t1;
return -1.0f;
}
// use this to normalize rayDirection
Point2f NormalizeVector(Point2f pt)
{
float length = sqrt(pt.x*pt.x + pt.y*pt.y);
pt = pt / length;
return pt;
}
// gets the intersection point
Point2f GetRayIntersectionPoint(Point2f origin, Point2f vector, double distance)
{
Point2f pt;
pt.x = origin.x + vector.x * distance;
pt.y = origin.y + vector.y * distance;
return pt;
}
应该是不言自明的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)