计算几何学复习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
请用数学归纳法证明, 可以引出一些启示
设f(n)为前n条输入的线段将矩形分成的 区域个数,1 n L,L为线段总数。
• 边界:f(1) = 2,即一条线段将矩形分成2个区域,如下图 (a)所 示。 • 递推:假设现在已经处理了n-1条线段,新线段为l,它和已有的 n-1条线段交于t’(n)个交点。注意其中有些交点在矩形边界上, 这些交点也是线段的端点,必须将其排除,于是剩下t(n)个交点。 如下图 (b)所示。由于题目中限定“任三线不共点”,因此这些 交点将l分成t(n)+1条线段。这t(n)+1条线段将所在区域一分为 二,这样就增加了t(n)+1个区域
分解:找出一条垂直平分线,将点集P划分为点数相 等的两个点集Pl和Pr,其中Pl上的所有点在垂直 平分线上或其左侧;Pr上的所有点在垂直平分线 上或其右侧。数组Y被划分为两个数组Yl和Yr。 类似地,数组X也被划分为Xl和Xr。划分后的Xl 和Yl包含了Pl中的点,并分别按X坐标和Y坐标单 调递增的次序进行排序;Xr和Yr包含了Pr中的点, 也按X坐标和Y坐标单调递增的次序进行排序。 解决:把P划分为Pl和Pr后再进行两次递归调用: ⑴找出Pl中的最近点对。调用的输入为子集Pl和 数组Yl,返回最近点对的距离&l; ⑵找出Pr中的最近点对。调用的输人为子集Pr和 数组Yr,返回最近点对的距离&r; 置&=min{&l,&r)
确定目标点的可能位置
游戏者B在一张100*100纸上确定了一个目标点, 游戏者A一开始在点(0,0)上,每次游戏者A从一个点 到另一个点,如果新的点离目标点近了,那么游戏 者B说“Hotter”,如果新的点离目标远了,那么游 戏者B说“Colder”,如果距离不变,那么游戏者B说 “Same”。 输入文件包括很多行,每行包含游戏者A这一步 到达的点(x,y)和游戏者B说的话。说话的形式有三 种:“Same”、“Hotter”或“Colder”。对每次游戏 者B说话,你必须计算和输出目标点可能位置的面积, 精确到小数点后2位。
划分的起始点和结束点均以五角星标记。当他完成划分后,他想要 数一下划出的土地的块数以确保每个孩子都有一块地。例如,上图 中土地被划分成18块。然而这个庄主由于年迈常会数错,因而他寻 求你的帮助。 请写一个程序,输入原来的土地尺寸及线段的位置,输出划分出的 土地块数。
结论
平面上n条直线最多可以将平面分成f(n)个区域, 其中f(n)=(n2+n+2)/2。
f (n) f (n 1) t (n) 1 f (n 2) t (n 1) 1 t (n) 1 f (1) t (i ) n 1 t (i ) n 1
i 2 i 2 n n
u[1.. L]为线段序列,其中u[i]为第i条线段。计算 过程如下 T←0;{交点数初始化} for i←1 to L do{统计L条线段之间的交点个数} for j←i+1 to L do if u[i]与u[j]相交 then T←T+1; 输出T+L+1;
计算几何学的有关算法
若向量P1在向量P2的顺时针方向,则叉积 P1*P2>0; 若向量P1在向量P2的逆时针方向,则叉积 P1*P2<0; 若P2、P1两个向量共线(方向可以相同或相反), 则叉积P2*P1=0。
地主
在Dukeswood这块土地上生活着一个富有的农庄主和他的几个孩子。 在他临死前,他想把他的土地分给他的孩子。他有许多农场,每个 农场都是一块矩形土地。他在农场地图上划上一些直线将矩形分成 若干块。当他划直线时,他总是从矩形边界上的某一点划到另一个 矩形边界上的点,这条线的结束点将成为下一条线的起始点。他划 线时从不会让任三线共点。例如下图是某一种划分结果。
设f为p2在中垂线的方位标志;d为凸多 边形顶点在中垂线的方位标志
1 f 1 回答" hotter"时p2在中垂线上方或者回答 " colder"时p2在中垂线下方 回答" hotter"时p2在中垂线下方或者回答 " colder"时p2在中垂线上方
1 d [i] 1 0
可能位置的图形一定是个凸多边形。
证明: 因为每次对游戏者B的回答,就可以确定 可能的位置在出发点和到达点中垂线的哪一 边或就是中垂线。由于每次可能位置的图形 都是凸多边形。所以当前图形是许多个凸多 边形的交集,显然是一个凸多边形。
由于最初纸上的每一个点都可能认作为目标点,因 此凸多边形为一个四边形,(0,0),(0,100), (100,100),(100,0)。接下来,依次处理游戏者A到 达的位置和游戏者B的回答。设游戏者A先后到达的 两个位置为p1=(x1,y1)、p2=(x2,y2),p1p2线段的 中垂线方程为 2*(x2-x1)*x+2*(y2-y1)*y+ x12+y12-x22-y22=0。 若p2=(x2,y2)代入上述方程后>0,则说明p2位于中 垂线的上方;若<0,则说明p2位于中垂线的下方。 需要注意的是,若游戏者A到达的p2点和这步前的p1 点完全相同,这时就不存在中垂线了。
在点集P=(Pl…Pr) 中寻找最近点对
1、调用分治程序前预排序: P中的所有点按 其Y坐标单调递增的顺序排列,其编号序列 存人数组Y;将所有点按x坐标单调递增的 顺序排列,其编号序列存人数组X。 2、首先检查是否︱p ︱≤3。若是,则计算所 有c(︱p ︱,2) 个点对的距离并返回最近的点 对及其距离;否则采取如下分治策略
计算凸多边形的重心位置和面积
x 2 x3 x x2 x3 2 xg 1 1 2 3 y y3 y1 2 2 y y2 y3 2 yg 1 1 2 3 x1 2
1 顺时针S x2 2 x3
x1
y1 1 y2 y3
1 1 ( x1 y3 x2 y1 x3 y2 x1 y2 x2 y3 x3 y1 ) 2 1
凸多边形的顶点 i在中垂线上方 凸多边形的顶点 i在中垂线下方 凸多边形的顶点 i在中垂线上
显然,只有当d[i]与f一致时,顶点i才是包含 当前可能位置的凸多边形顶点。
按照下述方法计算凸多边形的交集:依次计算 凸多边形的每个顶点在中垂线的方位。若凸多 边形的顶点i和i+1位于中垂线的两侧 (d[i]*d[i+1]<0),则说明连接这两个相邻顶点 的边与中垂线相交,在凸多边形的顶点i和i+1 之间插入交点,交点的d值为0。接下来,分析 扩展后的凸多边形的每个顶点:若顶点的方位 与f相反,则说明该顶点不是当前凸多边形的顶 点,应予删除。显然,该凸多边形包含了所有 的可能位置。其面积即为问题的解。
逆时针S
1 x2 2 x3
x1
y1 1 y2 1 y3 1
1 ( xห้องสมุดไป่ตู้ y2 x2 y3 x3 y1 x1 y3 x2 y1 x3 y2 ) 2
1、某个均质物体(即物体的面积与质量成正比)的形状 为平面三角形的话,则物体的质量就是三角形面积,该 物体的重心位置为物体的质点。 2、利用系统内各物体间的质点关系计算系统的质心位置 (也是系统重心位置)和质量。假设平面上有两个质点, 坐标分别为(x1,y1)和(x2,y2),质量分别为m1,m2,则它们 组成的系统的质量m和质心位置(x,y)满足
m1 x1 m2 x 2 m1 y1 m2 y 2 m m1 m2 , x ,y m1 m2 m1 m2
3、推广到凸多边形
对凸多边形进行三角剖分, 在此基础上进行递推
Procedure Center_of_Gravity_of_Convex-Polygon(n,P1,P2,…,Pn); Var x0,y0,m0,x,y,m:real;{x0,y0)和m0分别为P1PiPi+1的重心位置和质量;(x,y)和m 分别为P1P2P3…PiPi+1的重心位置和质量} begin x←0;y←0;m←0; for i←2 to n-1 do{依次处理P1PiPi+1} begin x0←(p1.x+pi.x+pi+1.x)/3;y0←(p1.y+pi.y+pi+1.y)/3;{计算P1PiPi+1的重心和质量} m0←p1.x*pi.y+pi.x*pi+1.y+pi+1.x*p1.y-p1.y*pi.x-pi.y*pi+1.x-pi+1.y*p1.x; x←(m*x+m0*x0)/(m+m0);y←(m*y+m0*y0)/(m+m0);{递推系统的重心和质量} m←m+m0; End;{for} 输出凸多边形P1P2P3…PiPi+1的重心位置(x,y)和质量m; End;{Center_of_Gravity_of_Convex-Polygon}
• 合并:若还存在距离小于&的点对,则点对的一 个点在Pl中,另一个点在Pr中
1.建立一个数组Y’,Y’仅含Y数组中所有在宽度为2&的垂直 带形区域内的点,这些点按其Y坐标单调递增的顺序存储于Y’; 2.对数组Y’中的每个点P,求出P到紧随P后的7个点间的距离, 并纪录下Y’所有点对中找出的最近点对的距离&’。(为什么在 Y’中仅需考虑紧随P后的点) 3.如果&’<&,则垂直带形区域内的确包含比我们根据递归 调用所找出的最近距离&更近的点对,于是返回该点对及其距离 &’;否则就返回递归调用中发现的最近点对及其距离&。
游戏者A从(0,0)出发到达(x1,y1),游戏者B说“Hotter”。 P1与(x1,y1)的中垂线分别交、于p6和p5。由于d((x1, y1))=1,d(p1)=-1,d(p5)=d(p6)=0, d(p2)=d(p3)=d(p4)=1,f=1((x1,y1)为“Hotter”),因此删除 p1顶点,包含可能位置的凸五边形为p2p3p4p5p6p2。接下去,游 戏者A从(x1,y1)走到(x2,y2),游戏者B说“Colder”。 (x1,y1)(x2,y2)的中垂线为(p7,p8),该中垂线交p3p4 为p7,交p1p2为p8。由于d((x2, y2))=d(p2)=d(p3)=1,d(p5)=d(p6)=-1,d(p7)=d(p8)=0,f=1((x2,y2)为“Hotter”),因此,删除p2p3,包含可能位置的 凸五边形为p4p5p6p8p7p4。
机器蛇
在未来的某次战争中,我军计划了一次军事行动,目的 是劫持敌人的航母。由于这个计划高度保密,你只知道 你所负责的一部分:机器蛇的通信网络。计划中要将数 百条机器蛇投放到航母的各个角落里。由于航母内部舱 室、管线错综复杂,且大部分由金属构成,因此屏蔽效 应十分强烈,况且还要考虑敌人的大强度电子干扰,如 何保持机器蛇间的联系,成了一大难题。每条机器蛇的 战斗位置由作战计划部门制定,将会及时通知你。每条 机器蛇上都带有接收、发射系统,可以同时与多条机器 蛇通讯。由于整个系统承载的数据量庞大,需要一个固 定的通讯网络。情报部门提供了极其详尽的敌方航母图 纸,使你对什么地方有屏蔽了如指掌。 请你设计一个程序,根据以上信息构造通讯网络, 要求信息可以在任意两条机器蛇间传递,同时为了避免 干扰,通讯网络的总长度要尽可能的短。
⑴设计dist(s)函数:计算机器蛇通信线路s 的距离。若通信线路s与任一条屏蔽线相交, 则距离设为无穷大,即该边在无向图不存在; 否则s为无向图的一条边,边权为距离。 ⑵计算无向图的最小生成树。最小生成树的 边权和为问题的解。
计算两条相交线段的交点
由于(x,y)与p1点的距离相等于(x,y)与p2点的距离,因此 (x-x1)2+(y-y1)2=(x-x2)2+(y-y2)2 展开后得到中垂线方程: ax+by+c=0 其中a=2*(x2-x1),b=2*(y2-y1),c=x12+y12-x22-y22 如果将(x’,y’)代入ax+by+c后,若ax’+by’+c>0,则说明(x’,y’) 位于中垂线ax+by+c=0的上方;若ax’+by’+c<0,则说明(x’,y’)位 于该中垂线的下方;若ax’+by’+c=0,则说明(x’,y’)位于该中垂线 上。