**计算几何**是一门兴起于二十世纪七十年代末的计算机科学的一个分支，主要研究解决几何问题的算法。

自从1946年世界上第一台电子计算机问世以来，计算机应用的一个重要里程碑是1962年美国麻省理工学院发明了世界上第一台图形显示器。自此之后，计算机可以透过图形显示器直接输入、输出图形，并且可以在显示屏上透過游标的移动，直接修改图形。而在这之前，工程师是透过一厚叠纸上密密麻麻的数字来间接表达工程图形的。

1962年被认为是美国和欧洲CAD开始发展的一年。首先的应用领域是汽车、飛機和造船工业。这3个行业，由于其产品的外形曲面特别复杂，要求特别苛刻，而成为CAD首先应用的领域。

与此同时，也就发展出了一门新兴学科——计算几何，它在美国常常被称为CAGD（Computer Aided Geometric Design，计算机辅助几何设计），专门研究"几何图形信息（曲面和三维实体）的计算机表示、分析、修改和综合"。1972年在美国举行CAGD第一次国际会议，标志计算几何学科的形成。

计算几何算法
------

* 判断点是否在直线上
* 判断两线段是否相交
* 判断线段和直线是否相交
* 判断点是否在矩形内
* 判断线段、折线、多边形是否在矩形内
* 判断矩形是否在矩形内
* 判断圆是否在矩形内
* 判断矩形是否在圆内
* 判断点是否在多边形内
* 判断线段是否在多边形内
* 判断点是否在圆内
* 判断圆是否在圆内
* 计算相交多边形的重叠区域
* 计算点到线段的最近点
* 计算点到圆的最近点及点坐标
* 凸包求法等

算法介绍
----

### 矢量概念

如果把一条线段的端点作出次序之分，则可将这种线段看作有向线段。如果有向线段{\displaystyle P\_{1}P\_{2}}的起点{\displaystyle P\_{1}}在坐标原点，则把它称为矢量{\displaystyle {\boldsymbol {P}}\_{2}}。这样，点{\displaystyle P(x,y)} 可以看作起点为原点{\displaystyle O(0,0)}的二维矢量。相应地，三维空间坐标系下的坐标也可以作类似理解为三维矢量。

设二维矢量{\displaystyle {\boldsymbol {P}}=(x\_{1},y\_{1}),{\boldsymbol {Q}}=(x\_{2},y\_{2})}，则矢量的加法定义为{\displaystyle {\boldsymbol {P}}+{\boldsymbol {Q}}=(x\_{1}+x\_{2},y\_{1}+y\_{2})}，矢量的减法定义为{\displaystyle {\boldsymbol {P}}-{\boldsymbol {Q}}=(x\_{1}-x\_{2},y\_{1}-y\_{2})}。矢量的加减法有以下性质：{\displaystyle {\boldsymbol {P}}+{\boldsymbol {Q}}={\boldsymbol {Q}}+{\boldsymbol {P}},{\boldsymbol {P}}-{\boldsymbol {Q}}=-({\boldsymbol {Q}}-{\boldsymbol {P}})}。因为点可视为坐标原点至该点的矢量，所以点的加减法就是矢量的加减法。

### 矢量的叉积

矢量的叉积，也称矢量的叉乘。矢量{\displaystyle {\boldsymbol {P}}}与{\displaystyle {\boldsymbol {Q}}}的叉乘记作{\displaystyle {\boldsymbol {P}}\times {\boldsymbol {Q}}}。定义{\displaystyle {\boldsymbol {P}}\times {\boldsymbol {Q}}=x\_{1}y\_{2}-x\_{2}y\_{1}}，其结果是一个标量。几何意义为由原点、点P、点{\displaystyle Q}、点{\displaystyle P+Q}四点共同组成的平行四边形的面积（带正负号）。计算矢量叉积是直线和线段相关算法的核心。矢量的叉积有以下性质：{\displaystyle {\boldsymbol {P}}\times {\boldsymbol {Q}}=-({\boldsymbol {Q}}\times {\boldsymbol {P}}),{\boldsymbol {P}}\times (-{\boldsymbol {Q}})=-({\boldsymbol {P}}\times {\boldsymbol {Q}})}。

叉乘的一个非常重要的性质是，可以通过它的正负号判断两矢量之间的顺逆时针关系：

* 若{\displaystyle {\boldsymbol {P}}\times {\boldsymbol {Q}}>0}，则{\displaystyle {\boldsymbol {P}}}在{\displaystyle {\boldsymbol {Q}}}的顺时针方向；
* 若{\displaystyle {\boldsymbol {P}}\times {\boldsymbol {Q}}<0}，则{\displaystyle {\boldsymbol {P}}}在{\displaystyle {\boldsymbol {Q}}}的逆时针方向；
* 若{\displaystyle {\boldsymbol {P}}\times {\boldsymbol {Q}}=0}，则{\displaystyle {\boldsymbol {P}}}和{\displaystyle {\boldsymbol {Q}}}共线，可能同向也可能反向。

### 算法举例

#### 判断折线段的拐向

折线段的拐向判断方法可以直接由矢量叉积的性质推出。
对于有公共端点的线段{\displaystyle AP}和{\displaystyle PB}，通过计算{\displaystyle \nabla =(B-P)\times (P-A)}的符号，就可以确定折线的拐向：

* 若{\displaystyle \nabla >0}，则{\displaystyle AP}在P点拐向右侧得到{\displaystyle PB}；
* 若{\displaystyle \nabla <0}，则{\displaystyle AP}在P点拐向左侧得到{\displaystyle PB}；
* 若{\displaystyle \nabla =0}，则A、P、B三点共线。

#### 判断点是否在线段上

外部链接
----

* 主要的学术会议网页（页面存档备份，存于）Symposium of Computation Geometry (SoCG)
* 刘鼎元.. （原始内容存档于2007-07-07）.

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
计算机科学的主要领域 |
| --- |
|  |
| 注：该模板大致遵循ACM 电脑分类系统。 |
|  |
| 计算机硬件 | 
* 印刷电路板
* 外部设备
* 集成电路
* 超大规模集成电路
* 绿色计算
* 電子設計自動化

 |
|  |
| 系统架构组织 | 
* 電腦系統架構
* 嵌入式系统
* 实时计算

 |
|  |
| 网络 | 
* 网络传输协议
* 路由
* 网络拓扑
* 网络服务

 |
|  |
| 软件组织 | 
* 直譯器
* 中间件
* 虛擬機器
* 操作系统
* 软件质量

 |
|  |
| 软件符号和工具 | 
* 编程范型
* 编程语言
* 編譯器
* 领域特定语言
* 軟體框架
* 集成开发环境
* 软件配置管理
* 函式庫

 |
|  |
| 软件开发 | 
* 软件开发过程
* 需求分析
* 软件设计
* 软件部署
* 軟體維護
* 开源模式

 |
|  |
| 计算理论 | 
* 自动机
* 可计算性理论
* 計算複雜性理論
* 量子计算
* 数值计算方法
* 计算机逻辑
* 形式语义学

 |
|  |
| 算法 | 
* 算法分析
* 算法设计
* 算法效率
* 随机化算法
* 计算几何

 |
|  |
| 计算数学 | 
* 离散数学
* 信息与计算科学
* 统计学
* 数学软件
* 数理逻辑
* 集合论
* 数论
* 图论
* 类型论
* 范畴论
* 信息论
* 数值分析
* 数学分析

 |
|  |
| 信息系统 | 
* 数据库管理系统
* 電腦數據
* 企业信息系统（英语：）
* 社会性软件
* 地理信息系统
* 决策支持系统
* 过程控制
* 数据挖掘
* 數位圖書館
* 系统平台
* 數位行銷
* 万维网
* 信息檢索

 |
|  |
| 安全 | 
* 密码学
* 形式化方法
* 入侵检测系统
* 网络安全
* 信息安全

 |
|  |
| 人机交互 | 
* 计算机辅助功能
* 用户界面
* 可穿戴计算机
* 普适计算
* 虚拟现实
* 聊天機器人

 |
|  |
| 并发性 | 
* 并发计算
* 并行计算
* 分布式计算
* 多线程
* 多元處理

 |
|  |
| 人工智能 | 
* 自动推理
* 计算语言学
* 计算机视觉
* 进化计算
* 专家系统
* 自然语言处理
* 机器人学

 |
|  |
| 机器学习 | 
* 監督式學習
* 無監督學習
* 强化学习
* 交叉驗證

 |
|  |
| 计算机图形学 | 
* 计算机动画
* 可视化
* 渲染
* 修飾照片
* 圖形處理器
* 混合现实
* 虚拟现实
* 图像处理
* 图像压缩
* 实体造型

 |
|  |
| 应用计算 | 
* 电子商务
* 企业级软件
* 计算数学
* 计算物理学
* 计算化学
* 计算生物学
* 計算社會科學
* 医学信息学
* 数字艺术
* 電子出版
* 網絡戰
* 电子游戏
* 文字处理器
* 運籌學
* 教育技术学
* 生物信息学
* 认知科学
* 文件管理系统（英语：）

 |
|  |
| 
* 分类 **分类**
* 主题 **主题**
* 专题**专题**
* 共享资源页面 **维基共享**

 |

 |

|  |  |  |
| --- | --- | --- |
| 

|  |  |
| --- | --- |
| 规范控制 編輯維基數據鏈接 | 
* GND: 4130267-9
* NKC: ph184844

 |

 |