判断线段相交
跨立实验+排斥实验
排斥:矩形相交
跨立:叉积判点位置
射影坐标
点X(x,y,1)
直线U(a,b,c)(一般式)
两点求直线X1 X X2
直线交点 U1 X U2(无交点即x3=0)
点在直线上 X * U=0
过X的U的垂线 X X U(有待商榷,感觉有问题,但陈可卿ppt是这么写的)
X在U上的垂点 (X X U)X U
过X的U的垂线,自己推了一下,应该是X X (X沿U的法向量移动的一个点,U的法向量为(a,b))
三点共线(X1 X X2)*X3=0
三线共点(U1 X U2)*U3=0
射影坐标看起来很好用,但是它不是定量研究,更多是关于比值的,到后来的矩阵运算就令人难以接受了。
求线段集的交点集(还没抽时间实现)
交点一般情况下不是n^2的,所以有mlogn算法(m为交点数)
沿x轴方向从左到右,碰到端点和交点都是调度事件
碰到一个新的开始端点,只要求它与在y轴上相邻两条线段的交点即可。如果它和其它非相邻线段有交点,随着扫描点的右移,肯定有机会求交点
碰到下一个交点之前,线段在扫描线上的次序不变;碰到一个交点,则交点对应的两条线段交换扫描线上的次序
碰到下一个结束端点,则需要删除它所在的线段
比较抽象,画图比较好懂,百度文库中有此ppt
poj1066
每条线段中点为门,问进入矩形中特定点,最少经过几个点
#include <cstdio>
#include <cstdlib>
#include <cstring>