Module: 几何学


Problem

5 /7


拾主

Theory Click to read/hide

十字路口

线
的交点

a1, b1, c1 - 第一行的系数,
a2, b2, c2 - 第二行的系数,
x, y - 交点。

\(x = {-(c1 \cdot b2 - c2 \cdot b1) \over (a1 \cdot b2 - a2 \cdot b1)} \\ y = {-(a1 \ cdot c2 - a2 \cdot c1) \over (a1 \cdot b2 - a2 \cdot b1)} \)

我们已经知道如何检查直线的交点(它们不平行),并找到它们的交点。

现在让我们学习如何使用来做到这一点。 

首先,让我们学习如何简单地检查它们的交集。

线段相交 如果一个线段的末端位于另一个线段的相对侧,反之亦然(这很容易通过叉积检查)。  唯一不起作用的情况 - 线段位于一条直线上。 为此,您需要检查所谓的交点。 bounding box(线段的边界框)- 检查线段投影在 XY 上的交点。

轴。

既然我们知道如何检查线段是否相交,让我们学习如何找到它们相交的点(或线段):
- 如果它们不相交,那么很明显这样的点不存在;
- 否则,我们将构建这些线段所在的直线。

如果它们是平行的,那么线段位于同一条线上,我们需要找到相交线段 - 从线段左边界的最大值到右边界的最小值(点小于另一个点,如果它在左边,在相等的情况下 X-coordinates - 如果它更低)。

如果线不平行,则找到它们的交点并将其返回。

Problem

Venceslav 最近读了一本新的接送书,现在他想在公园里测试他的知识。为简单起见,让我们将公园想象成一组路径,它们是平面上的部分。瓦茨拉夫已经在这个公园里走过了,他知道哪个女孩走的是哪条路。问题是瓦茨拉夫非常懒惰,只走一条路。而他也懒得去打听一路上能遇到什么样的姑娘,所以他请 他最好的朋友你帮他解决这个难题。
 
输入
第一行包含路径两端的坐标(X1, Y1)和 ( X2, Y2),Wenceslas 沿着它走 (\(- 20 <= X1, Y1, X2, Y2 <= 20\)).
第二行包含一个整数 N - 女孩们走过的路径数 (\(0 <= N <= 5\) ).
在接下来的 N 行中,输入女孩们走过的路径的终点坐标 (Xi1, Yi1) 和 (Xi2, Yi2 ), 通过 i i 路径行走的女孩 (\(-20 <= X_{i1}, Y_ {i1}, X_{i2}, Y_{i2} <= 20\))
 
输出
在第一行打印数字 M - 路径将与 Wenceslas 的路径相交的女孩的数量(接触路径被视为相交)。
在第二行打印M numbers - 我们的英雄会遇到的女孩的数量。女孩从一开始编号!
 
例子
<头> <日># <正文>

 

输入 输出
1
0 0 2 2
1
0 2 2 0
1
1