计算几何试验报告.PDF

计算几何试验报告 王佟 014952 only.rain@263.net 郭小波 014905 lengbing@263.net 王玉刚 014891 myzdf@263.net 问题的背景: 问题的背景来自VLSI 中电路参数提取。 近年来,我们课题组和Synopsys 公司合作开发了三维寄生电容提取软件B3D。 B3D 是一个交互式的高效的电容计算软件,它包括寄生器件描述语言PDDL, 三维寄生参数提取,和与用户交互的图形界。目前B3D 系统对于复杂的形体 结构的描述不是很方便。整个系统描述的基本的形体是平行六面体,对于 复杂的形体结构我们就要用平行六面体来构建,在构建过程中遇到的最大的问题 是平行六面体和平行六面体之间的关系。目前B3D 不允许两个形体之间存在重叠的关 系,这样对于很多复杂的结构很难描述好。 鉴于此,我们提出了允许两个形体之间存在重叠的关系以方便描述复杂的结构。 提出重叠功能后,有两个方案实现它。 第一个方案是沿着以前的处理方法,在预处理时处理形体间的重叠部分, 使处理完后的形体不存在重叠的关系,然后再按以前的程序做。 这样做的一个难点是如何处理形体间的重叠部分。 第二个方案是重新寻求一整套形体运算的方法,充分利用形体间关系的不确定性, 在时间上和空间上加以控制,实现重叠功能。 这样做的难度很大,需要寻找一些快速复杂的形体运算算法。 但是这样做的一个最大的好处在于我们不再处于被动的局面 (工艺上出现一种新的结构我们就得为这种新的结构设计一套新的做法)。 问题的提出: 我们把实际的问题抽象成数学模型为: 输入m 个同方向柱体,给出他们之间的关系,包括包含,相交,以及相交的具体信息。 我们把问题简化一步,即这m 个柱体的底面都位于OXY 平面,向Z 正方向延伸一个任意 高度。 我们的Project 的内容就是: 输入m 个凸多边形,在比较快的时间内计算出这些多边形的相互关系。 这些相互关系包括一个多边形与那些多边形相交,相交在什么位置, 一个多边形的一部分被哪些其他多边形所覆盖。 问题的解决: 输入n 个凸多边形,可以在O(m*logm + I)时间复杂度内计算出任何 一个多边形和哪些多边形相交,以及这些交点的具体位置,每个交点 由哪些多边形的哪些边产生。以及任何多边形边的一点由哪些多边形覆盖它。 其中I 为交点的数目,m 为输入多边形的边的个数。 数据结构: 我们采用类似DCEL 的结构。 Point 屏幕上的点 PolygonVertex 多边形的顶点 PolygonEdge 多边形的边 PolygonArc 多边形的段 InterPoint 不同多边形边与边的交点 所有多边形都是按顺时针方向。这样我们就定义了多边形边的方向,多边形段的方向。 每个多边形边都有起点和终点之分,它的起点和终点是多边形的顶点。 同时记录它上面的交点和它所属的多边形。 每一多边形的段都有起点和终点之分,它的起点和终点是边与边的交点, 并且在其内再没有其他的交点。同时记录它上面的顶点和它所属的多边形。 以及覆盖这个段的所有其他多边形的列表。 多边形的顶点记录以他开始的边和结束的边,同时记录它所属的多边形和多边形的段。 交点为不同多边形边与边的交点,记录产生这个交点的边列表,以及多边形段的列表。 每个多边形按顺时针记录它所有的顶点,边,段。 这样我们可以通过任何一个元素快速的访问到与其相关的任何元素。 设计模式: 程序以Java 语言开发,分Application 和Applet 两种模式。 Application 可以访问本地文件系统,但必须由Sun 公司的JDK1.2 以上的版本作支持。 Applet 不能访问任何本地的资源。但可以用IE 直接游览。 整个程序分为两层,GUI 控制和算法控制。即界面和数据完全分开。 再算法部分主要

文档评论(0)

1亿VIP精品文档

相关文档