线段相交可视化工具
以动画方式呈现线段相交检测——通过叉积(cross-product)方向判定(orientation test)来判断,并计算精确的交点,支持逐步操作。直接在浏览器中运行。
伪代码
Press Run to animate the algorithm.
Time · Space
使用方法
- 1 点击 Run 检测两条线段是否相交。
- 2 观察决定结果的四个叉积方向判定过程。
- 3 如果两条线段相交,交点会以绿色标出;如果不相交,线段会变为红色。
- 4 使用 Shuffle 随机生成一对新的线段。
为什么使用此工具
- 了解四个叉积方向判定如何在不使用除法运算的情况下检测线段相交。
- 理解判定规则:每条线段必须跨越另一条线段所在的直线。
- 查看两条线段相交时精确交点的计算过程。
- 完全在浏览器中运行,无需注册,无需上传任何数据。
常见问题
如何判断两条线段是否相交?
使用叉积方向判定:当每条线段的两个端点分别位于另一条线段所在直线的两侧时,两条线段才真正相交。
什么是叉积方向判定?
(b−a) × (c−a) 的符号表示点 c 位于从 a 到 b 的有向直线的左侧(正)、右侧(负),还是恰好在直线上(零)。
时间复杂度是多少?
O(1)——对两条线段只需固定数量的算术运算。若要高效求出 n 条线段之间的所有交点,则需要使用扫描线算法(sweep-line),其时间复杂度为 O((n+k) log n)。
交点是如何计算出来的?
通过行列式(克莱姆法则)求解两条直线方程组成的方程组,一旦确认两条线段相交,即可得到精确的交点。
什么是 线段相交可视化工具?
线段相交可视化工具以动画形式展示叉积方向判定(orientation test),用于判断两条线段是否相交:每条线段必须跨越另一条线段所在的直线。当两条线段相交时,工具会计算出精确的交点。
功能特性
方向判定测试
观察叉积转向测试如何判断线段是否相交。
复杂度
两条线段:O(1)。n 条线段(扫描线算法):O((n + k) log n)。空间复杂度:O(n)。
100% 隐私保护
完全在浏览器中运行 — 不会上传任何数据。
示例
Input
segments (0,0)-(4,4) and (0,4)-(4,0)
Output
intersect: yes, at (2, 2)
常见使用场景
-
1
几何与图形学
检测多边形、地图中的相交边,或用于碰撞检测。
-
2
学习方向判定数学
了解带符号叉积如何对转向和相交进行分类。
-
3
理解扫描线算法
理解扫描线算法如何高效地找到所有交点。
Zerethon 的线段相交可视化工具通过方向判定(叉积测试)在浏览器中动态演示两条线段是否相交以及交点位置。判断两条线段是否相交的时间复杂度为 O(1);检测 n 条线段之间所有交点时,使用扫描线算法(sweep-line,Bentley–Ottmann,k 为交点数)的时间复杂度为 O((n + k) log n),空间复杂度为 O(n)。
- 分类
- 算法
- 价格
- 免费
- 隐私
- 基于浏览器
- 注册
- 无需
参考资料
- Line segment intersection — 维基百科
- MIT OCW 6.006 — Introduction to Algorithms (CLRS) — MIT 开放课程网
隐私
除非另有说明,否则你的数据永远不会离开浏览器。线段相交可视化工具 完全在客户端运行 — 无需上传服务器,不记录日志,不追踪你输入的内容。
相关工具
冒泡排序可视化工具
带动画演示的冒泡排序模拟器,提供单步执行、速度调节、自定义输入数据、实时比较/交换计数器以及伪代码同步高亮。完全在浏览器中运行。
打开工具插入排序可视化工具
动画演示插入排序算法,支持单步执行、速度调节、自定义输入数据,并实时显示比较/写入次数与伪代码高亮。完全在浏览器本地运行。
打开工具选择排序可视化工具
以动画方式演示选择排序(Selection Sort),提供逐步执行、速度调节、自定义输入数据、实时的比较/交换计数器以及伪代码展示。完全在浏览器本地运行。
打开工具归并排序可视化工具
带动画演示的归并排序模拟器,支持单步执行、速度调节、自定义输入数据、实时比较/写入计数器以及伪代码高亮显示。完全在浏览器中运行。
打开工具在 Zerethon Social 上创作、分享与成长
免费注册。赚取积分,收集成就,与全球创作者建立联系。