计算几何
2012-09-07 23:13
120 查看
1.判断线段相交
用向量叉积,把一条线段两个端点(a与b)与另一条线段上的点(c)相连,然后进行叉乘,根据叉乘的正负可以判断这个c点与(a,b)这条线段的关系,再把d与(a与b)这条线段上的两个端点相连,在求一次叉积,根据两者正负关系可以判断出来。
2.直线相交(注意垂直情况)
这是个数学上的问题,两点可以确定一条直线,你列个方程就行啦
(y2-y1)/(x2-x1),计算AB斜率
(y4-y3)/(x4-x3),计算CD斜率
二者相等的话就不相交(平行哦)
3. 判断线段和直线是否相交:
有了上面的基础,这个算法就很容易了。如果线段 P1P2和直线Q1Q2相交,则P1P2跨立
Q1Q2,即:( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) >= 0 。
4. 判断圆是否在矩形中:
很容易证明,圆在矩形中的充要条件是:圆心在矩形中且圆的半径小于等于圆心到矩形四边
的距离的最小值。
5.点在多边形内
面积判别法(只适用于凸多边形)
第四点分别与三角形的两个点组成的面积分别设为S1,S2,S3,只要S1+S2+S3>原来的三角形面积就不在三角形范围中.可以使用海伦公式 。推广一下是否可以得到面向凸多边形的算法?
我给一个比较完整的判断方法吧。
如果要判断的点为A,则过A作平行于X轴的射线(向左),求射线与多边形的边的交点的个数,奇在内,偶在外。
1。多边形中若存在与与X轴平行的边,这些平行边不作处理,不要去求交点;
2。当交点在一条边的端点上时,如果这个端点是Y值较大的那个点则算一个交点,否则不算交点;
3。如果A点在边上则算在边内,不用去求交点了。
至于如何求两条线的交点,通过一点数学公式就行了,这里就不再提了。
设要判断的点位A。
1. 在多边形内取一个点B。(可以用4个顶点,取对角线的交叉点。也可以用3个顶点,从一个顶点向另2个顶点构成的线段的引线,取线上一点。)
2. 依次判断A、B是否在每个边所对应直线的同一侧。如果不是,则A在多边形外。
6.线段在多边形内
线段在多边形内的一个必要条件是线段的两个端点都在多边形内,但由于多边形可能为凹,
所以这不能成为判断的充分条件。
如果线段和多边形的两相邻交点 P1 ,P2的中点P' 也在多边形内,则P1, P2 之间的所有
点都在多边形内。
7. 判断多边形是否在多边形内:
只要判断多边形的每条边是否都在多边形内即可。判断一个有 m个顶点的多边形是否在一个
有n个顶点的多边形内复杂度为O(m*n)。
8.判断三角形
a+b>c,同时加c,则p>c,同理p>a,P>b;
面积s=sqrt(p*(p-a)*(p-b)*(p-c))
用向量叉积,把一条线段两个端点(a与b)与另一条线段上的点(c)相连,然后进行叉乘,根据叉乘的正负可以判断这个c点与(a,b)这条线段的关系,再把d与(a与b)这条线段上的两个端点相连,在求一次叉积,根据两者正负关系可以判断出来。
2.直线相交(注意垂直情况)
这是个数学上的问题,两点可以确定一条直线,你列个方程就行啦
(y2-y1)/(x2-x1),计算AB斜率
(y4-y3)/(x4-x3),计算CD斜率
二者相等的话就不相交(平行哦)
3. 判断线段和直线是否相交:
有了上面的基础,这个算法就很容易了。如果线段 P1P2和直线Q1Q2相交,则P1P2跨立
Q1Q2,即:( P1 - Q1 ) × ( Q2 - Q1 ) * ( Q2 - Q1 ) × ( P2 - Q1 ) >= 0 。
4. 判断圆是否在矩形中:
很容易证明,圆在矩形中的充要条件是:圆心在矩形中且圆的半径小于等于圆心到矩形四边
的距离的最小值。
5.点在多边形内
面积判别法(只适用于凸多边形)
第四点分别与三角形的两个点组成的面积分别设为S1,S2,S3,只要S1+S2+S3>原来的三角形面积就不在三角形范围中.可以使用海伦公式 。推广一下是否可以得到面向凸多边形的算法?
我给一个比较完整的判断方法吧。
如果要判断的点为A,则过A作平行于X轴的射线(向左),求射线与多边形的边的交点的个数,奇在内,偶在外。
1。多边形中若存在与与X轴平行的边,这些平行边不作处理,不要去求交点;
2。当交点在一条边的端点上时,如果这个端点是Y值较大的那个点则算一个交点,否则不算交点;
3。如果A点在边上则算在边内,不用去求交点了。
至于如何求两条线的交点,通过一点数学公式就行了,这里就不再提了。
设要判断的点位A。
1. 在多边形内取一个点B。(可以用4个顶点,取对角线的交叉点。也可以用3个顶点,从一个顶点向另2个顶点构成的线段的引线,取线上一点。)
2. 依次判断A、B是否在每个边所对应直线的同一侧。如果不是,则A在多边形外。
6.线段在多边形内
线段在多边形内的一个必要条件是线段的两个端点都在多边形内,但由于多边形可能为凹,
所以这不能成为判断的充分条件。
如果线段和多边形的两相邻交点 P1 ,P2的中点P' 也在多边形内,则P1, P2 之间的所有
点都在多边形内。
7. 判断多边形是否在多边形内:
只要判断多边形的每条边是否都在多边形内即可。判断一个有 m个顶点的多边形是否在一个
有n个顶点的多边形内复杂度为O(m*n)。
8.判断三角形
a+b>c,同时加c,则p>c,同理p>a,P>b;
面积s=sqrt(p*(p-a)*(p-b)*(p-c))
相关文章推荐
- POJ 1556 计算几何+最短路
- POJ 2318:TOYS & POJ 2398:Toy Storage 计算几何
- ACdream 1106 游泳水平有限的瑶瑶 (计算几何)(点到直线的最短距离)
- HDU 5733 tetrahedron(计算几何)
- POJ计算几何题目列表
- POJ 1556 计算几何 判断线段相交
- ACM计算几何题目推荐
- nyoj_3:多边形重心问题(计算几何)
- UVALIVE 5893 计算几何+搜索
- 算法系列之九:计算几何与图形学有关的几种常用算法(二)
- HDU 1392 Surround the Trees(计算几何,求凸包周长)
- hdu5533Dancing Stars on Me(简单计算几何)
- 【计算几何初步-代码好看了点线段相交】【HDU2150】Pipe
- LightOJ Circle in Square (简单计算几何)
- HDU 4173 Party Location(计算几何,枚举)
- bnuoj 4209 Triangle(计算几何)
- 【计算几何】Exactness of Projectile Hit
- zzulioj 1805: SC和ta的游泳池 (简单计算几何)
- 【计算几何】bzoj1043 [HAOI2008]下落的圆盘
- Gym 100825 H - Trick Shot[计算几何]