(lecture_05)计算几何基础_20090316
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
思考:此方法的缺点: 思考:此方法的缺点:
计算量大 精度损失 更好的方法?
2011-5-2
20
计算几何的方法: 计算几何的方法:
在计算几何里,我们知道,△ABC的面积 就是“向量AB”和“向量AC”两个向量叉 积的绝对值的一半。其正负表示三角形 顶点是在右手系还是左手系。
B C A ABC成左手系,负面积
36
分别求出每个三角形的面积Ai, 总面积为各个面积 相加根据物理学知识得:n个点(xi,yi)每个重量是mi, 则重心是 X = (x1*M1+x2*M2+...+xn*Mn) /(M1+M2+....+Mn) Y = (y1*M1+y2*M2+...+yn*Mn) /(M1+M2+....+Mn) 由于密度均匀,所以这里重量mi都用面积Ai代替。
Thank You ~
2011-5-2 70
2011-5-2
31
从三角形的重心谈起: 从三角形的重心谈起:
三角形的重心是: (x1+x2+x3) / 3,(y1+y2+y3) / 3 可以推广否? Sigma(xi)/N , sigma(yi)/N (i=1…N) ???
2011-5-2
32
看看一个特例: 看看一个特例:
2011-5-2
33
传统的计算线段相交的方法是什么? 1、传统的计算线段相交的方法是什么? 传统方法和本方法的区别是什么? 2、传统方法和本方法的区别是什么?
2011-5-2
12
特别提醒: 特别提醒:
以上介绍的线段的三个属性, 以上介绍的线段的三个属性,是计 算几何的基础, 算几何的基础,在很多方面都有应 用,比如求凸包等等,请务必掌握! 比如求凸包等等,请务必掌握!
2011-5-2
16
Any good idea?
2011-5-2
17
先看最简单的多边形——三角形 三角形 先看最简单的多边形
2011-5-2
18
三角形的面积: 三角形的面积:
在解析几何里, △ABC的面积可以通过 如下方法求得: 点坐标 => 边长 => 海伦公式 => 面积
2011-5-2
19
P3 P2 P4 P0 P5 P6
2011-5-2 26
P1
前面的三角剖分显然对于多边形内部 任意一点都是合适的! 任意一点都是合适的!
我们可以得到: A=sigma(Ai) ( i=1…N )
来自百度文库
即:A= ∣
sigma
2011-5-2
Xi – X0
Yi –Y0
X(i+1) – X0 Y(i+1) –Y0
也可把叉积看做以下平行四边形的面积
2011-5-2
5
2011-5-2
6
P0p1是否在p0p2的顺时针方向上?
2011-5-2
7
P0p1和p1p2在p1点向是向左转还是向右转?
2011-5-2
8
P1p2和p3p4是否相交?
2011-5-2
9
2011-5-2
10
2011-5-2
11
思考: 思考:
凸多边形的三角形剖分
很自然地,我们会想到以 P1为扇面中心, 连接P1Pi就得到N-2个三角形,由于凸性, 保证这些三角形全在多边形内,那么, 这个凸多边形的有向面积: A=sigma(Ai) (i=1…N-2)
P6 P1 A4 P5 A3 A1 P2
2011-5-2
A2 P3
P4
23
凹多边形的面积? 凹多边形的面积?
2011-5-2
C B A ABC成右手系,正面积
21
大功告成: 大功告成:
Area(A,B,C)= 1/2 * (↑AB) × (↑AC)
=∣
2011-5-2
Xb – X a Xc – X a
Yb –Y a
Yc –Y a
∣/2
22
特别注意: 以上得到是有向面积(有正负)! 有向面积( 有向面积 有正负)
ACM程序设计 程序设计
第五讲
计算几何初步
(Computational Geometry Basic)
2011-5-2
2
第一单元
线段属性
2011-5-2 3
P0p1是否在p0p2的顺时针方向上?
P0p1和p1p2在p1点向是向左转还是向右转?
P1p2和p3p4是否相交?
2011-5-2
4
叉积——线段算法的中心 可把叉积定义为以下行列式
2011-5-2 35
公式: 公式:
C=sigma(Ai * Ci) / A (i=1…N) Ci=Centroid(△ O Pi Pi+1) = (O + ↑Pi +↑Pi+1 )/3 ↑ C=sigma((↑Pi +↑Pi+1)(↑Pi ↑ ↑ ↑ ×↑Pi+1) ) /(6A)
2011-5-2
P3
P2 P4
P1
2011-5-2
24
依然成立!!! 依然成立!!!
多边形面积公式:A=sigma(Ai) (i=1…N-2)
结论: “有向面积”A比“面积”S其实更本 本 质!
2011-5-2
25
任意点为扇心的三角形剖分:
我们能把多边形分成N-2个三角形,为什么不 能分成N个三角形呢? 比如,以多边形内部的一个点为扇心,就可以 把多边形剖分成 N个三角形。
原因: 原因:
错误的推广公式是“质点系重心公式”, 即如果认为多边形的质量仅分布在其顶 点上,且均匀分布,则这个公式是对的。 但是,现在多边形的质量是均匀分布在 其内部区域上的,也就是说,是与面积 有关的!
2011-5-2
34
Solution:
剖分成N个三角形,分别求出其重心和面 积,这时可以想象,原来质量均匀分布 在内部区域上,而现在质量仅仅分布在 这N个重心点上(等假变换),这时候就 可以利用刚才的质点系重心公式了。 不过,要稍微改一改,改成加权平均 加权平均数, 加权平均 因为质量不是均匀分布的,每个质点代 表其所在三角形,其质量就是该三角形 的面积(有向面积 有向面积!),——这就是权! 有向面积
面积问题 搞定! 搞定!
Yi
A=
sigma
∣
Xi
X(i+1) Y(i+1)
∣/2
( i=1…N )
2011-5-2
30
基本问题( ): 基本问题(2):
给定一个简单多边形,求其重心。 给定一个简单多边形,求其重心。 输入:多边形( 输入:多边形(顶点按逆时针顺 序排列) 序排列) 输出:重心点C 输出:重心点C
2011-5-2
37
全部搞 定!
第三单元
凸包( Convex Hull ) 凸包(
2011-5-2
39
2011-5-2
40
2011-5-2
41
2011-5-2
42
2011-5-2
43
2011-5-2
44
2011-5-2
45
2011-5-2
46
2011-5-2
47
2011-5-2
2011-5-2
13
第二单元
多边形面积和重心
2011-5-2
14
基本问题( ): 基本问题(1):
给定一个简单多边形,求其面积。 给定一个简单多边形,求其面积。 输入:多边形( 输入:多边形(顶点按逆时针顺 序排列) 序排列) 输出:面积S 输出:面积S
2011-5-2
15
思考如下图形: 思考如下图形:
62
2011-5-2
63
2011-5-2
64
2011-5-2
65
2011-5-2
66
凸包模板: 凸包模板:
//xiaoxia版 #include <stdio.h> #include <math.h> #include <stdlib.h> typedef struct { double x; double y; }POINT; POINT result[102]; //保存凸包上的点 POINT a[102]; int n,top;
48
2011-5-2
49
2011-5-2
50
2011-5-2
51
2011-5-2
52
2011-5-2
53
2011-5-2
54
2011-5-2
55
2011-5-2
56
2011-5-2
57
2011-5-2
58
2011-5-2
59
2011-5-2
60
2011-5-2
61
2011-5-2
2011-5-2 67
double Distance(POINT p1,POINT p2)
//两点间的
Any question?
课后在线作业: 课后在线作业:
1086 1115 1392 2036 2108 1147 /*2324 2805 2948*/
2011-5-2
69
Welcome to HDOJ
∣/2
27
( i=1…N )
能否把扇心移到多边形以外呢? 能否把扇心移到多边形以外呢?
P3 P4
P2
P1
P0
2011-5-2
28
既然内外都可以,为什么不设 既然内外都可以,为什么不设P0 为坐标原点呢? 为坐标原点呢?
P3 P4
P2
P1
现在的公式?
O
2011-5-2 29
简化的公式: 简化的公式: