转自:http://blog.sina.com.cn/s/blog_93d2ceba010145ci.html
一、(叉乘法求任意多边形面积)
语法:result=polygonarea(Point | |
参数: | |
*polygon: | 多变形顶点数组 |
N: | 多边形顶点数目 |
返回值: | 多边形面积 |
注意: | |
| 支持任意多边形,凹、凸皆可 |
| 多边形顶点输入时按顺时针顺序排列 |
源程序: | |
| typedef double |
二、(求三角形面积)
语法:result=area3(float | |
参数: | |
x1~3: | 三角形3个顶点x坐标 |
y1~3: | 三角形3个顶点y坐标 |
返回值: | 三角形面积 |
注意: | |
| 需要 |
源程序: | |
| float |
三、(两矢量间角度)
语法:result=angle(double | |
参数: | |
x/y1~2: | 两矢量的坐标 |
返回值: | 两的角度矢量 |
注意: | |
| 返回角度为弧度制,并且以逆时针方向为正方向 |
| 需要 |
源程序: | |
| #define |
四、(两点距离(2D、3D))
语法:result=distance_2d(float | |
参数: | |
x/y/z1~2: | 各点的x、y、z坐标 |
返回值: | 两点之间的距离 |
注意: | |
| 需要 |
源程序: | |
| float |
五、(射向法判断点是否在多边形内部)
语法:result=insidepolygon(Point | |
参数: | |
*polygon: | 多边形顶点数组 |
N: | 多边形顶点个数 |
p: | 被判断点 |
返回值: | 0:点在多边形内部;1:点在多边形外部 |
注意: | |
| 若p点在多边形顶点或者边上,返回值不确定,需另行判断 |
| 需要 |
源程序: | |
| #define typedef int |
六、(判断点是否在线段上)
语法:result=Pointonline(Point | |
参数: | |
p1、p2: | 线段的两个端点 |
p: | 被判断点 |
返回值: | 0:点在不在线段上;1:点在线段上 |
注意: | |
| 若p线段端点上返回1 |
| 需要 |
源程序: | |
| #define typedef int |
七、(判断两线段是否相交)
语法:result=sectintersect(Point | |
参数: | |
p1~4: | 两条线段的四个端点 |
返回值: | 0:两线段不相交;1:两线段相交;2两线段首尾相接 |
注意: | |
| p1!=p2;p3!=p4; |
源程序: | |
| #define typedef int //跨立试验 |
八、(判断线段与直线是否相交)
语法:result=lineintersect(Point | |
参数: | |
p1、p2: | 线段的两个端点 |
p3、p4: | 直线上的两个点 |
返回值: | 0:线段直线不相交;1:线段和直线相交 |
注意: | |
| 如线段在直线上,返回 |
源程序: | |
| typedef int |
九、(点到线段最短距离)
语法:result=mindistance(Point | |
参数: | |
p1、p2: | 线段的两个端点 |
q: | 判断点 |
返回值: | 点q到线段p1p2的距离 |
注意: | |
| 需要 |
源程序: | |
| #define typedef double |
十、(求两直线的交点)
语法:result=mindistance(Point | |
参数: | |
p1~p4: | 直线上不相同的两点 |
*p: | 通过指针返回结果 |
返回值: | 1:两直线相交;2:两直线平行 |
注意: | |
| 如需要判断两线段交点,检验k和对应k1(注释中)的值是否在0~1之间,用在0~1之间的那个求交点 |
源程序: | |
| typedef int //k1=((p2.x-p1.x)*(p1.y-p3.y)-(p2.y-p1.y)*(p1.x-p3.x))/((p4.y-p3.y)*(p2.x-p1.x)-(p4.x-p3.x)*(p2.y-p1.y)); |
十一、(判断一个封闭图形是凹集还是凸集)
语法:result=convex(Point | |
参数: | |
*p: | 封闭曲线顶点数组 |
n: | 封闭曲线顶点个数 |
返回值: | 1:凸集;-1:凹集;0:曲线不符合要求无法计算 |
注意: | |
| 默认曲线为简单曲线:无交叉、无圈 |
源程序: | |
| typedef int |
十二、(Graham扫描法寻找凸包)
语法:Graham_scan(Point | |
参数: | |
PointSet[]: | 输入的点集 |
ch[]: | 输出的凸包上的点集,按照逆时针方向排列 |
n: | PointSet中的点的数目 |
len: | 输出的凸包上的点的个数 |
返回值: | null |
源程序: | |
| struct float float void |