如何检查 2 条线的交集
How to check for intersection of 2 lines?
可能的重复项:
了解 2 条线是否相交
如果将 2 条线传递给一个函数,它如何推断它们是否相交?每行都是 2 个CPoint
对象的形式——所以我总共有 4 分。以下是我想出的。它计算每条线的斜率和 Y 截距,并从中计算交点。然后,它检查交点是否位于线段上;如果是,则返回假;如果否,即它们不相交,则返回 true。 虽然,它显示出许多问题。有没有更简单、更有效的方法可以做到这一点?
注意:我不太确定斜率和Y截距使用什么数据类型。
bool CShortestPathFinderDoc::edgeTest(CPoint P,CPoint P2,CPoint E,CPoint E2)
{
bool status=true;
double m1,m2; //slopes
double b1,b2; //y-intercepts
double y,x; //intersection point
m1=((double)P.y-P2.y)/((double)P.x-P2.x);
m2=((double)E.y - E2.y)/( (double)E.x - E2.x);
if(m1 == m2) //if lines are colinear
return true;
b1=P.y-(m1*P.x) // Get the..
b2=E->y - (m2*E.x); // Y-intercepts.
x=(b2-b1)/(m1-m2);
y=m1*x + b1; //x,y is the intersection point!!!
if((x<P2.x && x>P.x)) //if intersection point lies on line!!!!!
{
if(P2.y > P.y)
if(y<P2.y && y>P.y)
status=false;
if(P2.y < P.y)
if(y<P.y && y>P2.y)
status=false;
}
return status;
}
Wolfram 拥有您需要的一切,特别是线-线距离,即线之间的距离。如果线为零(+-epsilon),则它们相交。
线段相交是您要查找的。也许您可以根据需要调整扫描线算法。
顺便说一句:在上面的代码片段中,为了找出两条二维线是否平行,您只需从输入点定义的向量计算标量乘积。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 清除前检查矢量
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- C++LDAP检查用户是否是特定组的成员
- 检查TCHAR数组输入是否为带符号整数C++
- 英特尔检查检查dll