计算几何的一些代码。。。

 具体作用都有注释的

 

? View Code C
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// darkscope.cpp : Defines the entry point for the console application.
//
 
// darkscope.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include 
#include 
#include 
#include 
const double eps=1e-8;
const double pi=3.1415926535897;
using namespace std;
struct point                    //点
{
	double x,y;
	point()
	{}
	point(double xx,double yy)
	{
		x=xx;y=yy;
	}
};
struct vect                    //向量
{
	double x,y;
	vect()
	{}
	vect(double xx,double yy)
	{
		x=xx;
		y=yy;
	}
	vect(point a,point b)
	{
		x=b.x-a.x;
		y=b.y-a.y;
	}
};
double dot_product(vect a,vect b)			//点积
{
	return a.x*b.x+a.y*b.y;
}
double cha_product(vect a,vect b)				//叉积
{
	return a.x*b.y-b.x*a.y;
}
bool cross(point a,point b,point c,point d)			//线段ab,cd是否相交,不含边界
{
	return cha_product(vect(a,c),vect(a,d))*cha_product(vect(b,c),vect(b,d))0?1:-1;
}
double square_of_polygan(vector
 a)  //计算多边形面积,a是顺时针或者逆时针的点集
{
	a.push_back(a[0]);
	double ans=0;
	for (int i=1;i k;
	k.push_back(a);k.push_back(c);k.push_back(d);
	double sacd=square_of_polygan(k);
	k.clear();k.push_back(b);k.push_back(c);k.push_back(d);
	double sbcd=square_of_polygan(k);
	point ans=point(a.x*sbcd/(sacd+sbcd)+b.x*sacd/(sacd+sbcd),a.y*sbcd/(sacd+sbcd)+b.y*sacd/(sacd+sbcd));
	return ans;
}
double angle_of_vector(vect a,vect b)                 //求两个向量的夹角,返回值为弧度数,如果要度数需要ans*180/pi
{
	return acos((a.x*b.x+a.y*b.y)/(sqrt(a.x*a.x+a.y*a.y)*sqrt(b.x*b.x+b.y*b.y)));
}

本文出自 “DarkScope从这里开始(..” 博客,请务必保留此出处http://darkscope.blog.51cto.com/4254649/989030

㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 4. 矢量点乘 2 5. 判断点是否在线段上 2 6. 求一点饶某点旋转后的坐标 2 7. 求矢量夹角 2 ㈡ 线段及直线的基本运算 1. 点与线段的关系 3 2. 求点到线段所在直线垂线的垂足 4 3. 点到线段的最近点 4 4. 点到线段所在直线的距离 4 5. 点到折线集的最近距离 4 6. 判断圆是否在多边形内 5 7. 求矢量夹角余弦 5 8. 求线段之间的夹角 5 9. 判断线段是否相交 6 10.判断线段是否相交但不交在端点处 6 11.求线段所在直线的方程 6 12.求直线的斜率 7 13.求直线的倾斜角 7 14.求点关于某直线的对称点 7 15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 求多边形面积 9 5. 判断多边形顶点的排列方向,方法一 10 6. 判断多边形顶点的排列方向,方法二 10 7. 射线法判断点是否在多边形内 10 8. 判断点是否在凸多边形内 11 9. 寻找点集的graham算法 12 10.寻找点集凸包的卷包裹法 13 11.判断线段是否在多边形内 14 12.求简单多边形的重心 15 13.求凸多边形的重心 17 14.求肯定在给定多边形内的一个点 17 15.求从多边形外一点出发到该多边形的切线 18 16.判断多边形的核是否存在 19 ㈣ 圆的基本运算 1 .点是否在圆内 20 2 .求不共线的三点所确定的圆 21 ㈤ 矩形的基本运算 1.已知矩形三点坐标,求第4点坐标 22 ㈥ 常用算法的描述 22 ㈦ 补充 1.两圆关系: 24 2.判断圆是否在矩形内: 24 3.点到平面的距离: 25 4.点是否在直线同侧: 25 5.镜面反射线: 25 6.矩形包含: 26 7.两圆交点: 27 8.两圆公共面积: 28 9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值