计算几何

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))

原文地址:https://www.cnblogs.com/hxsyl/p/2676121.html