一种基于计算几何方法的最小包容圆求解算法.kdh

一种基于计算几何方法的最小包容圆求解算法.kdh
一种基于计算几何方法的最小包容圆求解算法.kdh

2007年 工 程 图 学 学 报2007

第3期 JOURNAL OF ENGINEERING GRAPHICS No.3一种基于计算几何方法的最小包容圆求解算法

张 勇, 陈 强

(清华大学机械工程系先进成形制造重点实验室,北京 100084)

摘要:为实现点集最小包容圆(最小外接圆)的求解,将计算几何中的α-壳的概

念应用到最小包容圆的计算过程,提出了一种精确有效的最小包容圆求解算法。根据α-壳定

义及最小包容圆性质,证明当1/α等于最小包容圆半径时点集的α-壳顶点共圆,1/α小于最小

包容圆半径时α-壳不存在,1/α大于最小包容圆半径时随着1/α减小α-壳顶点数逐渐减小的规

律。将α-壳顶点数目作为搜索最小包容圆半径的依据,实现了最小包容圆半径的搜索和最小包容圆的求解。

关键词:计算机应用;优化算法;计算几何;最小包容圆;α-壳

中图分类号:TP 391

文献标识码:A 文章编号:1003-0158(2007)03-0097-05

Algorithm for Minimum Circumscribed Circle Detection Based on

Computational Geometry Technique

ZHANG Yong, CHEN Qiang

( Key Laboratory for Advanced Manufacturing by Materials Processing Technology,

Department of Mechanical Engineering, Tsinghua University, Beijing 100084, China )

Abstract: α-hulls are applied to calculate the minimum circumscribed circle (MCC) of point set and an accurate and effective method for MCC detection is established through finding the least squares circle of the point set and iteratively approaching the MCC with recursive subdivision. Several theorems concerning the properties of α-hulls are presented. If 1/α is equal to

the radius of points’ MCC, all vertices of the α-hull will be on the same circle. When 1/α is larger than the MCC’s radius, the number of vertices of α-hulls will decrease with decreasing of 1/α, and

the number of vertices’ number will reach zero when 1/α is smaller than MCC’s radius. From the above rules, an algorithm for detecting MCC is developed, and experimental results show this algorithm is reliable.

Key words: computer application; optimized algorithm; computational geometry; minimum circumscribed circle; α-hull

收稿日期:2005-12-20

基金项目:国家自然科学基金资助项目(50275083);高校博士点基金资助项目(20020003053)

点集P的最小包容圆(有些文献称最小外接圆)是指包容P的所有圆中半径最小的圆(在该文中,若称“区域A包容集合B”是指B中所与元素均位于区域A的内部或A的边界上,下同)。最小包容圆的概念广泛应用于计算机图形学、计量学、机械加工等领域。最小包容圆(最小外接圆)法是进行圆度误差评定的一种重要方法。目前对最小包容圆的求解大多采用优化搜索算法。这些算法通常是将圆心作为优化参数、半径作为优化目标。但是,这些优化算法通常计算时间长、效率低,甚至有时不能找到真正的最小包容圆。计算几何是20世纪70年代出现的一个研究领域。文献[1],[2]将计算几何中的V oronoi图应用到最小包容圆的求解,但是V oronoi图的计算比较复杂。该文引入了计算几何中α-壳的概念,提出了一种精确、高效的最小包容圆求解算法。

1 α-壳(α-hull)的定义

文献[3]中给出了平面内点集P的α-壳的定义,α-壳是凸壳概念的延伸。在定义α-壳之前,先给出了α-盘(α-disc)的定义(如图1)如下:定义1 对于任意实数α:

当α>0时,α-盘定义为平面内半径为1/α的圆内包容的所有区域;

当α=0时,α-盘定义为一条直线一侧的半平面;

当α<0时,α-盘定义为平面内半径为-1/α的圆外及圆上的所有区域。

α>0α=0α<0

图1 不同取值情况下的α-盘

α-壳的定义如下:

定义2 对于平面内有限点集P及实数α,所有包容P的α-盘的交集定义为点集P的α-壳,P中位于α-壳边界上的点称为α-壳的顶点。

从定义2可知,当α >0时,P的α-壳为所有包容P的半径为1/α的圆盘的交集;当α=0时,P的α-壳就是P的凸壳;当α<0时,P的α-壳的为所有不包含P中任意一点半径为-1/α的圆盘的补集的交集。图2给出了上面3种情况下的α-壳。

(a) (b)

-1/

(c) (d)

(a) α>0; (b) α =0; (c, d) α <0

图2不同取值情况下α-壳

根据α-壳的定义易得出下面结论:

(1)当α >0时,对于点集P内的某一点,若能够找到一个通过该点且半径为1/α的圆包容点集P的所有点,那么该点必为点集P的α-壳顶点;

(2)当α<0时,对于点集P内的某一点,若能够找到一个通过该点且半径为-1/α的圆使得P的所有点在圆外或者在圆上,那么该点必为点集P的α-壳顶点。

文献[4]对文献[5]计算凸壳的算法进行了拓展,得出平面点集α-壳的计算算法,该算法的时间复杂度为O(n)

2 几则定理的提出

根据α-壳的定义及有关性质,该文推导出如下定理。

定理1设P为平面内有限点集;P的最小包容圆为圆C0,半径为R0;R为实数,且满足R>R0。那么,点集P中位于圆C0上的点一定为

·98· 工 程 图 学 学 报 2007年

P的α-壳(1/α =R)的顶点。

证明设点p为P中位于最小包容圆上的点,那么过p一定能作一个半径为R0的圆,且该圆包容P中所有点。因R >R0,那么,过p一定能够作一个半径为R的圆包容P中所有点。根据α-壳的定义,点p一定是P的α-壳(1/α = R)的顶点。

定理1证毕。

定理2设P为平面内有限点集;P的最小包容圆为圆C0,半径为R0;R为正实数,且满足R

证明假设点集P的α-壳(1/α =R)存在,那么至少有一点p为α-壳的一个顶点,根据α-壳的定义,过点p至少可以做一个半径为R的圆C 包容P的所有点。由于圆C包容P的所有点,那么R一定大于或等于P的最小包容圆半径R0,这与已知条件R

定理2证毕。

定理3设P为平面内有限点集,那么,点集P只有一个最小包容圆。

证明如图3,假设点集P有两个最小包容圆C1和C2,其半径分别为R1和R2。若C1和C2同时为P的最小包容圆成立,那么,必有R1=R2成立。由于圆C1和C2为两个不同的圆,那么,两圆的圆心点必为平面内不同的两个点。圆C1和C2相交于两个点A和点B,因为圆C1和C2均包容点集P,记P?C1和P?C2,那么,有

P?(C1∩C2)

从图3可以看出,以AB为直径作圆C3,必有

(C1∩C2)?C3

那么,

P?C3

即圆C3包容点集P。

因|AB|<2R1,即圆C3的半径小于圆C1、C2的半径,这与圆C1、C2为最小包容圆相矛盾,假设不成立。

定理3证毕。

定理4 设P为平面内有限点集,点集P1和点集P2分别为P的α1-壳(1/α1=R1)和α2-壳(1/α2=R2)的顶点,R0为P的最小包容圆半径,且满足0

A

B

C2

C3

C1

图3 定理3证明用图

证 明 设点p为点集P1中的任意一点,那么过点p至少一定可以做一个半径为R1的圆C1包容P中的所有点,即

P?C1

因R1

C1?C2

那么

P?C2

即圆C2包容P,又点p在圆C2上,那么,点p为点集P的α2-壳(1/α2=R2)的顶点,即

p?P2

因p为P1中的任意一点,那么P1中所有点都属于P2,即

P1?P2

定理4得证。

从定理4可以看出,对于某一已知点集P,当1/α由R2减小到R1时,P的α-壳顶点数目减少或不变。

定理5 设P为平面内有限点集,R0为P的最小包容圆半径,那么,P的α-壳(1/α =R0)所有顶点共圆。

证明设点p为P的α-壳(1/α =R0)的任意顶点,那么过点p至少能过作一个半径为R0的圆C包容P的所有点。因R0为P的最小包容圆半径,由定理3可知圆C必为P的最小包容圆。那么,点p在P的最小包容圆上。同理可证,对于P的α-壳(1/α =R0)的任意顶点均在P的最小包容圆上。

定理5得证。

第3期 张 勇等:一种基于计算几何方法的最小包容圆求解算法 ·99·

3 最小包容圆求解算法

由前面定理1~5可知,对于已知的平面中点集P={p1, p2, …, p m},P的最小包容圆半径为R0,任意的正实数r,P的α-壳(1/α=r)的顶点数目n与r有关,并满足下面规律:

(1)r =+∞时,n为P的凸壳顶点数目;

(2)r>R0时,随着r的减小,n逐渐减小;

(3)r =R0时,α-壳(1/α =r)的所有顶点共圆;

(4)r

从n与r的上述变化关系,对于某一点集P 可以根据其α-壳(1/α =r)的顶点数目判断r与其最小包容圆半径R0的大小关系,并不断改变r,计算P的α-壳(1/α =r)的顶点,当α-壳(1/α =r)的所有顶点共圆时的顶点即为位于P的最小包容圆上的点,求得最小包容圆半径即可。具体算法如下:

算法求解最小包容圆

输入平面内有限点集P={p1, p2, …, p m}

输出点集P的最小包容圆半径R0和圆心C0

步骤1 求点集P的最小二乘圆,圆心为C,求P中的点到C的最近距离r a和最远距离r b;

步骤2 r =r b,P′=P;

步骤3 作点集P′的α-壳(1/α =r),顶点为点集P1;

步骤4 如果P1为空集,r =(r a+r b)/2,r a=(r a+ r b)/2,转步骤3;否则转步骤5;

步骤5 如果P1中所有点共圆,计算P的最小包容圆圆心C0和半径R0,返回R0和C0,算法结束;否则转步骤6;

步骤6 r =(r a+r b)/2,r b=(r a+r b)/2,P′=P1,转步骤3。

从上面算法可以看出,该算法是一个以α-壳半径为变量,α-壳顶点数目为目标函数的一个二分法搜索过程。算法的主要计算消耗在步骤3和步骤5,以及步骤4和步骤6中向步骤3转移的次数。判断一定数量的点是否共圆时,只要有3点的外接圆半径与其它不同组不同即可认为不共圆。在实际测量过程中4点共圆出现的情况很少,因而一般两次运算就可判断出不共圆,所以步骤5中的计算复杂度一般很小,可忽略。算法中α-壳的计算采用文献[4]给出的算法,该算法的时间复杂度为O(n)。经分析,如果点集中点数为m个,α-壳顶点数为m′个,那么该算法进行的计算次数为2m-m′次。设点集P原有点数为m,经过各次α-壳计算后,α-壳顶点的数目依次为m1,m2,…,m k,(m k=2或3),且满足m≥m1≥m2≥…≥m k,那么,整个算法进行的运算次数n为

112231 2222

k k

n m m m m m m m m

?

=?+?+?++?=

"

121

22(1)/2

k k

m m m m m m m m

?

++++++?

"≤

4 最小包容圆求解实验

为验证上述算法的可靠性,该文对某一圆形工件若干个截面的测量点数据进行了最小包容圆求解。作为对比,还采用遗传算法对相同的数据进行计算。计算在PIII733计算机上进行,采用MATLAB编程实现算法。表1为计算几何法和遗传算法的计算结果和时间消耗的对比。

表1 遗传算法与计算几何法计算结果对比

遗传算法计算几何法

号半径时间(ms) 半径时间(ms)

1 510.71975197 510.7195 205

2 509.26135239 509.2612 251

3 509.83644998 509.8363 210

4 510.37285034 510.3728 196

5 508.6153468

6 508.6150 222

6 508.36905150 508.3689 188

7 509.45984623 509.4597 310

8 510.76065266 510.7604 406

9 507.96584962 507.9658 290 10511.24695067 511.2466 305 表2为某一个截面的计算过程,截面原始采样共有数据点445个,通过最小二乘法计算其最小二乘包容外圆半径r a=513.0609,内圆半径r b=504.8399,计算过程中1/α、α-壳顶点数目的变化如表2所示。

经过12次迭代以后,当1/α =510.7207时,测量点的α-壳顶点数目为3个,分别是(506.1752,-42.8304),(-462.9598,-211.3977),(510.6335,53.1987)。求得这3个点的最小包

·100· 工 程 图 学 学 报 2007年

容圆半径为510.7195,圆心坐标(2.9206,-2.1373)。

表1 1/α、α-壳顶点数目的变化

迭代次数1/α顶点数是否共圆

1513.060911否

2508.95040/

3511.00576否

4509.97800/

5510.49180/

6510.74885否

7510.62030/

8510.68450/

9510.71660/

10510.73274否

11510.72474否

12510.72073是

5 结论

采用计算几何中的α -壳的概念,可实现点集最小包容圆的求解。该文在给出了α -壳的定义的基础上,证明了点集的最小包容圆半径R0、1/α、α-壳顶点数目间的关系:

(1)当1/α =R0时,点集的α-壳顶点共圆,且均位于最小包容圆上;

(2)当1/α

(3)当1/α >R0时,随着1/α 的减小点集的α -壳顶点数逐渐减小。

根据上述规律,该文将α-壳顶点数目作为搜索最小包容圆半径的依据,实现了最小包容圆半径的搜索。

参 考 文 献

[1]Samuel G L, Shunmugam M S. Evaluation of

circularity from coordinate and form data using

computational geometric techniques [J]. Precision

Engineering, 2000, 24(3): 251-263.

[2] 刘书桂, 杨芳, 陶晋. 计算几何在测试计量技

术中的应用——求解最小外接圆[J]. 工程图学学报,

2000, 21(3): 83-89.

[3] Herbert Edelsbrunner. Algorithms in combinatorial

geometry [M]. Berlin: Springer-Verlag, 1987.

309-315.

[4] Olivier D, Franco P P. Culling a set of points for

roundness or cylindricity evaluations [J]. International

Journal of Computational Geometry, 2003, 13(2):

231-240.

[5] Graham R L. An efficient algorithm for determining

the convex hull of a finite planar set [J]. Information

Processing Letter,1972, 2(1): 132-133.

第3期 张 勇等:一种基于计算几何方法的最小包容圆求解算法 ·101·

计算几何基础知识整理

计算几何基础知识整理 一、序言 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题。作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法。在现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸多领域有着十分重要的应用。在本文中,我们将对计算几何常用的基本算法做一个全面的介绍,希望对您了解并应用计算几何的知识解决问题起到帮助。 二、本基础目录 本文整理的计算几何基本概念和常用算法包括如下内容: 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. 凸包的求法 三、算法介绍 1.矢量的概念: 如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed

最新几何图形计算公式汇总

小学数学图形计算公式 (C :周长 S :面积 a :边长、长 、底、上底、棱长 b: 宽 、下底 h: 高 d :直径 r :半径 V:体积 ) 1、长方形周长=(长+宽)×2 C=2(a+b) 长方形面积=长×宽 S=ab 2、正方形周长=边长×4 C = 4a 正方形面积=边长×边长 S = a×a = a 2 3、平行四边形面积=底×高 s=ah 4、三角形面积=底×高÷2 s=ah÷2 三角形高=面积 ×2÷底 h = 2s ÷a 三角形底=面积 ×2÷高 5、梯形面积=(上底+下底)×高÷2 s=(a+b)× h÷2 6、圆的周长=直径×圆周率=2×圆周率×半径 C=лd=2лr d=C π r=C 2π 圆的面积=半径×半径×圆周率 S = πr 2 环形的面积=外圆的面积-内圆的面积 S 环=π(R 2-r 2) 7、长方体的棱长总和 = 长×4 + 宽×4 + 高×4 =(长 + 宽 + 高)×4 长方体表面积=(长×宽+长×高+宽×高)×2 S = 2( ab + ah + bh ) 长方体体积=长×宽×高 = 底面积×高 V=abh = sh 8、正方体的棱长总和=棱长×12 正方体表面积=棱长×棱长×6 S 表 = a×a×6 = 6a 2 正方体体积=棱长×棱长×棱长=底面积×高 V = a×a×a = a 3 = sh 9、圆柱的侧面积=底面周长×高 s 侧=ch=πdh=2πrh 圆柱表面积=侧面积+底面积×2 s 表=s 侧+s 底×2 圆柱体积=底面积×高 V 柱 = sh =πr 2h 10、圆锥体体积=底面积×高×13 V 锥 = 13 sh = 1 3 πr 2h 小学数学图形计算公式 (C :周长 S :面积 a :边长、长 、底、上底、棱长 b: 宽 、下底 h: 高 d :直径 r :半径 V:体积 ) 1、长方形周长=(长+宽)×2 C=2(a+b) 长方形面积=长×宽 S=ab 2、正方形周长=边长×4 C = 4a 正方形面积=边长×边长 S = a×a = a 2 3、平行四边形面积=底×高 s=ah 4、三角形面积=底×高÷2 s=ah÷2 三角形高=面积 ×2÷底 h = 2s ÷a 三角形底=面积 ×2÷高 5、梯形面积=(上底+下底)×高÷2 s=(a+b)× h÷2 6、圆的周长=直径×圆周率=2×圆周率×半径 C=лd=2лr d=C π r=C 2π 圆的面积=半径×半径×圆周率 S = πr 2 环形的面积=外圆的面积-内圆的面积 S 环=π(R 2-r 2) 7、长方体的棱长总和 = 长×4 + 宽×4 + 高×4 =(长 + 宽 + 高)×4 长方体表面积=(长×宽+长×高+宽×高)×2 S = 2( ab + ah + bh ) 长方体体积=长×宽×高 = 底面积×高 V=abh = sh 8、正方体的棱长总和=棱长×12 正方体表面积=棱长×棱长×6 S 表 = a×a×6 = 6a 2 正方体体积=棱长×棱长×棱长=底面积×高 V = a×a×a = a 3 = sh 9、圆柱的侧面积=底面周长×高 s 侧=ch=πdh=2πrh 圆柱表面积=侧面积+底面积×2 s 表=s 侧+s 底×2 圆柱体积=底面积×高 V 柱 = sh =πr 2h 10、圆锥体体积=底面积×高×13 V 锥 = 13 sh = 1 3 πr 2h 中小学教师信息技术考试理论试题 一选择题(40分,每一题1分) 1.下面选项是对信息的实质的理解和说明,其中错误的选项是________. A. 信息就是计算机的处理对象 B. 信息就是关于事物运动的状态和规律的知识 C. 信息就是信息,既不是物质,也不是能量 D. 信息就是人类同外部世界进行交换的内容的名称 2. 信息技术在教学中常用作获取学习资源的工具,人们常说,"因特网是知识的海洋".

ACM经典算法及配套练习题

POJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,p oj2255,poj3094) 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法: (1)图的深度优先遍历和广度优先遍历. (2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra) (poj1860,poj3259,poj1062,poj2253,poj1125,poj2240) (3)最小生成树算法(prim,kruskal) (poj1789,poj2485,poj1258,poj3026) (4)拓扑排序(poj1094) (5)二分图的最大匹配(匈牙利算法) (poj3041,poj3020) (6)最大流的增广路算法(KM算法). (poj1459,poj3436) 三.数据结构. (1)串(poj1035,poj3080,poj1936) (2)排序(快排、归并排(与逆序数有关)、堆排) (poj2388,poj2299) (3)简单并查集的应用. (4)哈希表和二分查找等高效查找法(数的Hash,串的Hash) (poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503) (5)哈夫曼树(poj3253) (6)堆 (7)trie树(静态建树、动态建树) (poj2513) 四.简单搜索 (1)深度优先搜索(poj2488,poj3083,poj3009,poj1321,poj2251) (2)广度优先搜索(poj3278,poj1426,poj3126,poj3087.poj3414) (3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129) 五.动态规划 (1)背包问题. (poj1837,poj1276) (2)型如下表的简单DP(可参考lrj的书page149): 1.E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533) 2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列) (poj3176,poj1080,poj1159) 3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题) 六.数学 (1)组合数学:

GIS算法的计算几何基础

GIS算法的计算几何基础 矢量的概念: 如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment)。 如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。 矢量加减法: 设二维矢量P = ( x1, y1 ),Q = ( x2 , y2 ), 则矢量加法定义为: P + Q = ( x1 + x2 , y1 + y2 ), 矢量减法定义为: P - Q = ( x1 - x2 , y1 - y2 )。 显然有性质 P + Q = Q + P,P - Q = - ( Q - P )。 矢量叉积: 计算矢量叉积是与直线和线段相关算法的核心部分。 设矢量P = ( x1, y1 ),Q = ( x2, y2 ), 则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形的带符号的面积, 即:P × Q = x1*y2 - x2*y1,其结果是一个标量。 显然有性质P × Q = - ( Q × P ) 和P × ( - Q ) = - ( P × Q )。 两点的加减法就是矢量相加减,而点的乘法则看作矢量叉积。 叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系: 若P × Q > 0 , 则P在Q的顺时针方向。 若P × Q < 0 , 则P在Q的逆时针方向。 若P × Q = 0 , 则P与Q共线,但可能同向也可能反向。 折线段的拐向判断: 折线段的拐向判断方法可以直接由矢量叉积的性质推出。 对于有公共端点的线段p0p1和p1p2,通过计算(p2 - p0) × (p1 - p0)的符号便可以确定折线段的拐向: 若(p2 - p0) × (p1 - p0) > 0,则p0p1在p1点拐向右侧后得到p1p2。 若(p2 - p0) × (p1 - p0) < 0,则p0p1在p1点拐向左侧后得到p1p2。

常见的几何体计算公式

常见几何体的面积、体积求法与应用 要计算某材料的密度、重量,研究某物体性能及其物质结构等,特别对于机械专业的学生,必须要求工件的面积、体积等,若按课本上公式来计算,而课本上公式不统一,不好记住,并且很繁杂,应用时要找公式,对号入座很麻烦。笔者在教学与实践中总结出一种计算常见几何体的面积、体积方法。其公式统一,容易记住,且计算简单。对技校学生来说,排除大部分繁琐的概念、定理,以及公式的推导应用等。 由统计学中的用加权平均数对估计未来很准确。比如,估计某商品下个月销售量,若去年平均销售量为y ,设本月权为4,上月权数为1,下月权数为1,各月权数分别乘销售量相加后除以6等于y 。这样能准确地确定下个月销售量。能不能以这种思想方法用到求几何体的面积、体积呢?通过推导与实践,对于常见的几何体确实可用这种方法来求得其面积、体积。下面分别说明求常见几何体的面积、体积统一公式的正确性与可用性。 常见几何体的面积、体积统一公式: ) 4(6 )4(621002100S S S h V C C C h A ++= ++= (其中A 为几何体侧面积,C 0为上底面周长,C 1为中间横截面周长,C 2 为下底面周长,V 为几何体体积,S 0为上底面面积,S 1为中间横截面面积,S 2为下底面面积,h 为高,h 0为斜高或母线长。注:中间横截面为上、下底等距离的截面。) 一、棱柱、棱锥、棱台、圆柱、圆锥、圆台的面积 、体积用统一公式的正确性 1、棱柱: ⑴据棱柱上底周长、下底周长、中间横截面周长相等,即2 1 C C C ==, 可得: 2020210066 )4(6 C h C h C C C h =?= ++,这与课本中的棱柱侧面积公式等同。 以下每个几何体都能推得与课本中相应公式等同,说明这统一公式的正确性。 ⑵据棱柱上底面、下底面、中间横截面相等,可知:2 1 S S S ==,即: h S S S S h S S S h V 2222210)4(6 )4(6 =++= ++= 。 2、棱锥 ⑴设底边长为a 2,边数为n ,斜高为h 0,侧面三角形中位线为a 1,则

计算几何算法的实现

度。下图是个例子:

四、实验结果与分析(源程序及相关说明) 1)#include #include #include #include using namespace std; typedef pair POINT;//线段 //fuction dirction determines the direction that the seqment //p1p turns to p2p with respect to point p //if return value is positive,means clockwise; //if return value is negative,means counter-clockwise; //naught means on the same line; double direction(POINT p,POINT p1,POINT p2){ POINT v1,v2; v1.first=p2.first-p1.first; v1.second=p2.second-p1.first; v2.first=p1.first-p.first; v2.second=p1.second-p.second; return v1.first*v2.second-v1.second*v2.second;} //fuction on_seqment determines whether the point p is on the segment p1p2 bool on_segment(POINT p,POINT p1,POINT p2){ double min_x=p1.firstp2.first?p1.first:p2.first; double min_y=p1.secondp2.second?p1.second:p2.second; if(p.first>=min_x&&p.first= min_y&&p.second<=max_y) return true; else return false;} //point startPoint is the polor point that is needed for comparing two other poinr; POINT startPoint; //function sortByPolorAngle provides the realizing of comparing two points,which support //the STL function sort(); bool sortByPolorAngle(const POINT &p1,const POINT &p2) {

计算几何算法概览.

计算几何算法概览 [ 2001-03-23 ] 怒火之袍出处:放飞技术网 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题。作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法。在现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸多领域有着十分重要的应用。 一、引言 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题。作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法。在现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸多领域有着十分重要的应用。在本文中,我们将对计算几何常用的基本算法做一个全面的介绍,希望对您了解并应用计算几何的知识解决问题起到帮助。 二、目录 本文整理的计算几何基本概念和常用算法包括如下内容: 1.矢量的概念 2.矢量加减法 3.矢量叉积 4.折线段的拐向判断 5.判断点是否在线段上 6.判断两线段是否相交 7.判断线段和直线是否相交 8.判断矩形是否包含点 9.判断线段、折线、多边形是否在矩形中 10.判断矩形是否在矩形中 11.判断圆是否在矩形中 12.判断点是否在多边形中 13.判断线段是否在多边形内 14.判断折线是否在多边形内 15.判断多边形是否在多边形内 16.判断矩形是否在多边形内 17.判断圆是否在多边形内 18.判断点是否在圆内 19.判断线段、折线、矩形、多边形是否在圆内 20.判断圆是否在圆内

ACM 计算几何 最小圆覆盖算法

平面上有n个点,给定n个点的坐标,试找一个半径最小的圆,将n 个点全部包围,点可以在圆上。 1. 在点集中任取3点A,B,C。 2. 作一个包含A,B,C三点的最小圆,圆周可能通过这3点,也可能只通过其中两点,但包含第3点.后一种情况圆周上的两点一定是位于圆的一条直径的两端。 3. 在点集中找出距离第2步所建圆圆心最远的D点,若D点已在圆内或圆周上,则该圆即为所求的圆,算法结束.则,执行第4步。 4. 在A,B,C,D中选3个点,使由它们生成的一个包含这4个点的圆为最小,这3 点成为新的A,B,C,返回执行第2步。若在第4步生成的圆的圆周只通过A,B,C,D 中的两点,则圆周上的两点取成新的A 和B,从另两点中任取一点作为新的C。 程序设计题解上的解题报告: 对于一个给定的点集A,记MinCircle(A)为点集A的最小外接圆,显然,对于所有的点集情况A,MinCircle(A)都是存在且惟一的。需要特别说明的是,当A为空集时,MinCircle(A)为空集,当A={a}时,MinCircle(A)圆心坐标为a,半径为0;显然,MinCircle(A)可以有A 边界上最多三个点确定(当点集A中点的个数大于1时,有可能两个点确定了MinCircle(A)),也就是说存在着一个点集B,|B|<=3 且B 包含与A,有MinCircle(B)=MinCircle(A).所以,如果a不属于B,则MinCircle(A-{a})=MinCircle(A);如果MinCircle(A-{a})不等于

MinCircle(A),则a属于B。所以我们可以从一个空集R开始,不断的把题目中给定的点集中的点加入R,同时维护R的外接圆最小,这样就可以得到解决该题的算法。 不断添加圆,维护最小圆。如果添加的点i在圆内,不动,否则: 问题转化为求1~I的最小圆:求出1与I的最小圆,并且扫描j=2~I-1,维护(1)+(i)+(2~j)的最小圆,如果找到J不在最小圆内,问题转化为:求(1~J)+(i)的最小圆。求出I与J的最小圆,继续扫描K=1~j-1,找到第一个不在最小圆内的,求出I J K三者交点即可,此时找到了(1~j)+(i)的最小圆,可以回到上一步(三点定一圆,所以1~J-1一定都在求出的最小圆上)。 实际上利用了这么个定理: 若I不在1~I-1的最小圆上,则I在1~I的最小圆上。 若J不在(i)+(1~j-1)的最小圆上,则j在(i)+(1~J)的最小圆上。 证明可以考虑这么做:最小圆必定是可以通过不断放大半径,直到所有以任意点为圆心,半径为半径的圆存在交点,此时的半径就是最小圆。所以上述定理可以通过这个思想得到。 这个做法复杂度是O(n)的,当加入圆的顺序随机时,因为三点定一圆,所以不在圆内概率是3/i,求出期望可得是On.

GIS中的计算几何

GIS中的计算几何 GIS是一个图形系统,必然会涉及到几何学上理论应用,比如,图形的可视化,空间拓扑分析,GIS图形编辑等都需要借助几何。向量几何是用代数的方法来研究几何问题,首先,请大家翻一翻高等数学里有关向量的章节,熟悉一下几个重要的概念:向量、向量的模、向量的坐标表示、向量的加减运算、向量的点积、向量的叉积...下面我们将用这些基本概念来解答GIS中一些几何问题。 一,点和线的关系。 点是否在线段上,这样的判断在图形编辑,拓扑判断(比如,GPS跟踪判 断是否跑在线上)需要用到这样的判断。通常的想法是:先求线段的直线 方程,再判断点是否符合这条直线方程,如果符合,还要判断点是否在 线段所在的矩形区域(MBR)内,以排除延长线上的可能性,如果不符合, 则点不在线段上。这种思路是可行的,但效率不高,涉及到建立方程, 解方程。借助向量的叉积(也叫向量的向量积,结果还是向量,有方向 的)可以很容易的判断。设向量a=(Xa,Ya,Za) b=(Xb,Yb,Zb) 向量叉积 a X b如下: 二维向量叉积的模|a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb| (α是向量a,b之间的夹角),向量叉积模的几何意义是以向量a,b为邻边的平行四边 形的面积。可以推测:如果两向量共线,向量叉积模(所代表的平行四边 形的面积为零) 则|a X b|=|a|*|b|*sinα=|Xa*Yb-Ya*Xb|=0,否则不共线,叉 积的模为非零,根据这样条件可以很轻松的判断点和线的关系,避免了 建立方程和解方程的麻烦。

向量叉积的模|AB X AC|=0即可判断C点在AB所确定的直线上,再结合 C点是否在AB所在的MBR范围内,就可以最终确定C是否在AB线段 上。关于点和线段的其他关系,都可以通过叉积的求得,比如判断点在 线的哪一侧,右手法则,可以通过 a X b=(Xa*Yb-Ya*Xb)*k中的 (Xa*Yb-Ya*Xb)正负来判断。留给大家思考,很简单的,呵呵… 二,线和线的关系 判断两条线段是否相交,在很多拓扑判断和图形编辑(比如,线的打断来 构建拓扑,编辑线对象,叠置分析,面与面关系的判断等) 中都需要用到 线线相交的判断,如果两条线段相交,一条线段的两端点必然位于另一 条线段的两侧(不考虑退化情况,也就是一条线段的端点在另一条线段 上,这个很容易判断) 两向量的叉积a X b= (Xa*Yb-Ya*Xb)*k ,分别判断AB X AC的方向与 AB X AD的方向是否异号,再判断CD X CA 的方向与CD X CB的方向 是否异号即可判断两线段是否相交。 退化情况,一条线的端点在另一条线上,则AB X AC、 AB X AD 、CD X CA、CD X CB 是否存在有一个为零的,存在则表明肯定有一条线的端 点在另一个线上或者共用一个端点。详细区分留给大家思考。呵呵… 利用向量的方向还可以判断线段的转向,这个在道路导航中有所应用

计算几何算法概览叉积

计算几何算法概览 一、引言 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题。作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法。在现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸多领域有着十分重要的应用。在本文中,我们将对计算几何常用的基本算法做一个全面的介绍,希望对您了解并应用计算几何的知识解决问题起到帮助。 二、目录 本文整理的计算几何基本概念和常用算法包括如下内容: 矢量的概念 矢量加减法 矢量叉积 折线段的拐向判断 判断点是否在线段上 判断两线段是否相交

判断线段和直线是否相交 判断矩形是否包含点 判断线段、折线、多边形是否在矩形中 判断矩形是否在矩形中 判断圆是否在矩形中 判断点是否在多边形中 判断线段是否在多边形内 判断折线是否在多边形内 判断多边形是否在多边形内 判断矩形是否在多边形内 判断圆是否在多边形内 判断点是否在圆内 判断线段、折线、矩形、多边形是否在圆内判断圆是否在圆内 计算点到线段的最近点

计算点到折线、矩形、多边形的最近点 计算点到圆的最近距离及交点坐标 计算两条共线的线段的交点 计算线段或直线与线段的交点 求线段或直线与折线、矩形、多边形的交点 求线段或直线与圆的交点 凸包的概念 凸包的求法 三、算法介绍 矢量的概念: 如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment)。如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。 矢量加减法: 设二维矢量P = ( x1, y1 ),Q = ( x2 , y2 ),则矢量加法定义为:P + Q = ( x1 + x2 , y1 + y2 ),同样的,矢量减法定义为:P - Q = ( x1 - x2 , y1 - y2 )。显然有性质

计算几何复习题

计算几何期末复习题 二. 简答题 1. 在编写几何计算程序时,应该坚持的原则有哪些? 答:尽量使用加减等有理运算,避免使用开方,除法等无理运算. 2. 如果一个几何计算系统采用浮点计算,那么这个系统可能不可靠。这个不可靠是由什么原因引起的? 答:浮点数的精度不够,出现允差,判断结果矛盾。 3. 如果一个几何计算系统全部采用整数计算并且没有除法运算和无理计算,那么这个系统仍然可能不可靠。这个不可靠是由什么原因引起的? 答:可能产生数据溢出问题。 4. Windows 应用程序是消息驱动程序,并且消息中的大部分是窗口消息。给出 3 个预定义的窗口消息名称并说明这些消息什么时候发生。 答:1.WM_LBUTTONDOWN(按下鼠标左键) 2.WM_LBUTTONUP(释放鼠标左键) 3.WM_RBUTTONDOWN(按下鼠标右键) 4.WM_RBUTTONUP(释放鼠标右键) 5. Windows 应用程序提供许多预定义的窗口类型(也叫控件)供程序员使用,它们具有各自独特的窗口特征。请给出 3 种预定义窗口类型,给出它们的中文名和英文名。 答: CButton 按钮 CControlBar 控制条 CComboBox 组合框 6. 单多面体的Euler-Poincare公式是什么?写出这个公式并说明公式中每个变量的含义。将一个多面体的每个面进行三角剖分后这个公式是否仍然成立? 答:公式:V-E+F=2*(S-G)+R 解释: S: shell壳的个数 G:Genus 亏格数 R:ring内环个数 V:vextex顶点个数 E:edge边个数 F:face面的个数成立 7. 出由端点P0(x0, y0, z0)与P1(x1, y1, z1)所确定的直线段的参数方程。(用 矢量形式或分量形式均可)。 答:p=po+(P1-p0)·t; t∈[0,1] 8. 已知空间不在一条直线上的 3 点P0(x0, y0, z0)、P1(x1, y1, z1)、P2(x2, y2, z2),写出经过这 3 点的平面的参数方程。(用矢量形式或分量形式均可)。 答:p(u,v)=p0+u·(p1-p0)+v·(p2-p0) 9. 我们说平面点集的 Delaunay 三角剖分是一个“好”的三角剖分。这里的“好”指的是什么?(指出一点即可。) 答:因为它是一个最小角最大化的三角剖分方法 11.形体的表面模型和实体模型分别适合的领域是什么?一个采用半边数据结构描述的多面体属于表面模型还是实体模型? 答:表面模型:动画领域实体领域:工程 CAD 属于实体模型 12. 采用交互编辑手段进行三维形体的几何建模的方法有哪些? 答:布尔集合运算体素建模整体操作局部操作扫面操作 13. 给定空间一点P1(x1, y1, z1)和一个平面,平面的普遍方程为

计算几何常用算法概览

计算几何常用算法概览 本站原创:怒火之袍一、引言 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题。作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法。在现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸多领域有着十分重要的应用。在本文中,我们将对计算几何常用的基本算法做一个全面的介绍,希望对您了解并应用计算几何的知识解决问题起到帮助。 二、目录 本文整理的计算几何基本概念和常用算法包括如下内容: 矢量的概念 三、算法介绍 矢量的概念:

如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment)。如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。 矢量加减法: 设二维矢量P = ( x1,y1 ) ,Q = ( x2 , y2 ) ,则矢量加法定义为:P + Q = ( x1 + x2 , y1 + y2 ),同样的,矢量减法定义为:P - Q = ( x1 - x2 , y1 - y2 )。显然有性质P + Q = Q + P , P - Q = - ( Q - P )。 矢量叉积: 计算矢量叉积是与直线和线段相关算法的核心部分。设矢量P = (x1,y1),Q = (x2,y2),则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形的带符号的面积,即:P ×Q = x1*y2 - x2*y1,其结果是一个标量。显然有性质P ×Q = - ( Q ×P ) 和P ×( - Q ) = - ( P ×Q )。一般在不加说明的情况下,本文下述算法中所有的点都看作矢量,两点的加减法就是矢量相加减,而点的乘法则看作矢量叉积。 叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的 顺逆时针关系: 若P ×Q > 0 , 则P在Q的顺时针方向。 若P ×Q < 0 , 则P在Q的逆时针方向。 若P ×Q = 0 , 则P与Q共线,但可能同向也可能反向。

计算几何常用函数

目录 ㈠点的基本运算 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 13.公式: 32 代码: /* 需要包含的头文件 */ #include /* 常用的常量定义 */ const double INF = 1E200 const double EP = 1E-10 const int MAXV = 300 const double PI = 3.14159265 /* 基本几何结构 */ struct POINT { double x; double y; POINT(double a=0, double b=0) { x=a; y=b;} //constructo

各种几何图形面积和周长公式

正方形 面积:边长×边长 周长:边长×4 长方形 面积:长×宽 周长:(长+宽)*2 平行四边形 面积=底边*高/2 周长=(底+高)×2 三角形 面积S=√p(p-a)(p-b)(p-c), p=(a+b+c)/2,为三角形三边 周长c=a+b+c 梯形 面积={(上底+下底)×高}÷2周长=四边之和 圆形 面积=πR2 周长=2πR (R为半径) 椭圆形 面积=A = PI * 半长轴长 * 半短轴长

周长= 4A * SQRT(1-E^SIN^T)的(0 - π/2)积分, 其中A为椭圆长轴,E为离心率精确计算要用到积分或无穷级数的求和 半圆形 周长=2R(丌+1) 面积=(丌R的平方)/2 正多边形 面积: 正多边形内角计算公式与半径无关 要已知正多边形边数为N 内角和=180(N-2) 半径为R 圆的内接三角形面积公式:(3倍根号3)除以4再乘以R方 外切三角形面积公式:3倍根号3 R方 外切正方形:4R方 内接正方形:2R方 五边形以上的就分割成等边三角形再算 内角和公式——(n-2)*180` 我们都知道已知A(x1,y1)、B(x2,y2)、C(x3,y3)三点的面积公式为 |x1 x2 x3| S(A,B,C) = |y1 y2 y3| * = [(x1-x3)*(y2-y3) - (x2-x3)*(y1-y3)]* |1 1 1 | (当三点为逆时针时为正,顺时针则为负的) 对多边形A1A2A3、、、An(顺或逆时针都可以),设平面上有任意的一点P,则有:S(A1,A2,A3,、、、,An) = abs(S(P,A1,A2) + S(P,A2,A3)+、、、+S(P,An,A1))

计算几何与图形学有关的几种常用算法

算法系列之九:计算几何与图形学有关的几种常用算法(一) 分类:算法系列2011-12-18 23:13 8182人阅读评论(41) 收藏举报 我的专业是计算机辅助设计(CAD),算是一半机械一半软件,《计算机图形学》是必修课,也是我最喜欢的课程。热衷于用代码摆平一切的我几乎将这本教科书上的每种算法都实现了一遍,这种重复劳动虽然意义不大,但是收获很多,特别是丢弃了多年的数学又重新回到了脑袋中,算是最大的收获吧。尽管已经毕业多年了,但是每次回顾这些算法的代码,都觉得内心十分澎湃,如果换成现在的我,恐怕再也不会有动力去做这些事情了。 在学习《计算机图形学》之前,总觉得很多东西高深莫测,但实际掌握了之后,却发现其中了无神秘可言,就如同被原始人像神一样崇拜的火却被现代人叼在嘴上玩弄一样的感觉。图形学的基础之一就是计算几何,但是没有理论数学那么高深莫测,它很有实践性,有时候甚至可以简单到匪夷所思。计算几何是随着计算机和CAD的应用而诞生的一门新兴学科,在国外被称为“计算机辅助几何设计(Computer Aided Geometric Design,CAGD)”。“算法系列”接下来的几篇文章就会介绍一些图形学中常见的计算几何算法(顺便晒晒我的旧代码),都是一些图形学中的基础算法,需要一些图形学的知识和数学知识,但是都不难。不信?那就来看看到底有多难。 本文是第一篇,主要是一些图形学常用的计算几何方法,涉及到向量、点线关系以及点与多边形关系求解等数学知识,还有一些平面几何的基本原理。事先声明一下,文中涉及的算法实现都是着眼于解释原理以及揭示算法实质的目的,在算法效率和可读性二者的考量上,更注重可读性,有时候为了提高可读性会刻意采取“效率不高”的代码形式,实际工程中使用的代码肯定更紧凑更高效,但是算法原理都是一样的,请读者们对此有正确的认识。 一、判断点是否在矩形内 计算机图形学和数学到底有什么关系?我们先来看几个例子,增加一些感性认识。首先是判断一个点是否在矩形内的算法,这是一个很简单的算法,但是

各类几何图形计算公式大全

多面体的体积和表面积 心乱方-边长 1高 尸-底面积 □-底面中线的交点 一个组合三角形的面积 jl -iS?Ξ角形的个数 O-锥底各对角线交直 务F 2 -两平行底面的面粧 Ji-底面间距离 闻-一个爼合梯形的面积 相-组合梯老数 7 = ∣^ + ?÷√η?) £ = M +斤4■爲 ^-Cn 厲-对角銭 S-表面耕 加-侧表面积 尺寸符号 心爲1?-边长 0」底面对角线的交点 体积附)底面积(F ) 表面积(小侧表面积(阳 S=6a 2 V = a??* A S = 2(∣z *? + a??+??ft) 51=2?(α + ?) 柱 和 空 心 圆 柱 ∧ 管 F-外半径 1内半径 f-柱壁厚度 P -平均半径 内 外侧面积 圆柱: y = rtS a *? * ft +2∕τfi a ?=-3d??? 空心言圆拄: y r = ∕ACΛa -r a )^3s?ft ^ = 2f rC Λ+r)Λ + 2√Λi -r a ) S=S +? +c)?Λ+2J 7 (Si = (a+if+c)*h

V y = ψ?(j?2 3 + √+?) 5*1 = KHR+r) I= y ∣(R-r)2+h 2 £ =址十疔 ( 0+/) y = -jιr? =2W44r? 3 y=^(4ft+rf) = 157f(??+^ £ 斜 线 直 圆 柱 ?-≡小高度 ?-盘大高度 T -底面半径 ^-^c?+?>rtf 1?α+J —) cc≤ α S l - πr(? +?) r-廐面半径 卜母线长 +?2 =鈕 球半径 d ?弓定底11直径 A-弓形高 一半径 d-直径 4 3 皿' — L.P V = Lf I f =——=0.5236 护 3 6 S=A f tr 2 = =

计算几何算法的实现

实验名称计算几何算法的实现 姓名系院专业计算机与信 息 班级学号 实验日期2012年11月8日指导教师成绩 一、实验目的和要求 (1) 理解线段的性质、叉积和有向面积。 (2) 掌握寻找凸包的算法。 (3) 综合运用计算几何和搜索中的知识求解有关问题。 二、实验预习内容 (1) 将讲义第三章第三节中的凸包代码上机运行并检验结果。 (2) 完成讲义第三章的课后习题,上机运行并检验结果。 (3) 思考: 判线段相交时,如果有个线段的端点在另一条线段上,注意可能与另一条线段上的 端点重合,思考这样的情况怎么办。 (4) 房间最短路问题: 给顶一个内含阻碍墙的房间,求解出一条从起点到终点的最最短路径。房间的边界 固定在x=0,x=10,y=0 和y=10。起点和重点固定在(0,5)和(10,5)。房间里还有0 到18 个 墙,每个墙有两个门。输入给定的墙的个数,每个墙的x 位置和两个门的y 坐标区间, 输出最短路的长度。 三实验项目摘要 (1) 将讲义第三章第三节中的凸包代码上机运行并检验结果。 (2) 完成讲义第三章的课后习题,上机运行并检验结果。 (3) 思考:判线段相交时,如果有个线段的端点在另一条线段上,注意可能与另一条线段上的端点重合,思考这样的情况怎么办。 (4) 房间最短路问题:给顶一个内含阻碍墙的房间,求解出一条从起点到终点的最最短路径。房间的边界固定在x=0,x=10,y=0 和y=10。起点和重点固定在(0,5)和(10,5)。房间里还有0 到18 个墙,每个墙有两个门。输入给定的墙的个数,每个墙的x 位置和两个门的y 坐标区间,输出最短路的长度。下图是个例子:

二维计算几何模板

//二维计算几何模板 #includ e #includ e #includ e #includ e using namespace std; //-----------------基础定义----------------- struct point { d oubl e x,y; point(d oubl e x=0,doubl e y=0):x(x),y(y){}//构造 }; typed ef point vector; //各种符号重载 vector operator + (vector a,vector b) {return vector(a.x+b.x,a.y+b.y);} vector operator - (point a,point b) {return vector(a.x-b.x,a.y-b.y);} vector operator * (vector a,d oubl e p) {return vector(a.x*p,a.y*p);} vector operator / (vector a,d oubl e p) {return vector(a.x/p,a.y/p);} bool operator < (const point& a,const point& b) {return a.x

相关文档
最新文档