TIN三角网说明程序_第1页
TIN三角网说明程序_第2页
TIN三角网说明程序_第3页
TIN三角网说明程序_第4页
TIN三角网说明程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、TIN三角网存储与显示21513129 贺佳伟程序设计与实现的基本思路:采用面向对象的思想,自定义算法实现过程中需要的点、边、面类。程序中定义的变量protected:int i;POINT P10;/点集public:bool f;/返回true/false实现鼠标输入散点 代码如下CMy21513129View:CMy21513129View()/ TODO: add construction code here f=false;/f初值设为假if(f)CClientDC dc(this);CPen pen;/创建画笔 pen.CreatePen(PS_SOLID,6,RGB(255,0,

2、0); /定义画笔属性 CPen*pOldpen=dc.SelectObject(&pen); /把点画大 dc.Ellipse(point.x,point.y,point.x+3,point.y+3);P1.push_back(point);定义容器/容器/vector<CPoint> P1;/点vector<Line> L2;/线vector<Polygon> P3;/面线数据存储结构体struct Line /直线结构体CPoint p1;CPoint p2;面数据存储结构体struct Polygon /多边形结构体,这里选用三角形CPoin

3、t p1; /CPoint是一个坐标类CPoint p2;CPoint p3;散点生成本次实验通过三种方式实现散点的读入,分别是随机生成、鼠标输入、文本读入(txt文档)。1. 随机生成随机生成x 个点模拟一般建立TIN的点文件,将这x个点放入全局变量点数组中。x可以通过修改宏定义#define PNUMBER 10,从而定义不同个数的随机点。TIN生成后,可以在MFC窗口自动绘图显示。2. 鼠标输入通过鼠标取点读入点数据,并存储到vector<CPoint> P1中。3. 文本读入(txt文档)利用事先设置好测试数据文档读入散点,并存储到vector<CPoint>

4、P1中。程序中用到的自定义函数void CMy21513129View:displaynumf();/左下角显示三角形个数void CMy21513129View:displaynump();/左下角显示点个数bool IsPointsBuildTriangle(int p1, int p2, int p3);/判断该三角形是否存在bool IsPointInCircle(int t,int r1,int r2,int r3);/ /判断序列号为t的点是否在该三角形外接圆内void CMy21513129View:Triangle(CPoint p1, CPoint p2, CPoint p3

5、)/绘制三角形bool CMy21513129View:IsLine(CPoint p1, CPoint p2) /判断是否存在此线段bool CMy21513129View:IsT(CPoint p1, CPoint p2,CPoint p3)/判断容器中是否已经存在此三角形程序中的事件处理程序void CMy21513129View:OnMouseMove(UINT nFlags, CPoint point)/读取鼠标所在位置点的坐标void CMy21513129View:OnGeneratePoints()/随机生成点void CMy21513129View:OnMouse()/鼠标读

6、点void CMy21513129View:OnLButtonDown(UINT nFlags, CPoint point)/鼠标响应void CMy21513129View:OnTin()/Tin实现void CMy21513129View:OnPoint()/生成点注记void CMy21513129View:OnLine()/生成线注记void CMy21513129View:OnSurface()/生成面注记void CMy21513129View:OnQCsj()/清屏并清除存处数据void CMy21513129View:OnSaveV()/保存点坐标void CMy2151312

7、9View:OnSaveE() /保存边关系void CMy21513129View:OnSaveF() /保存面关系void CMy21513129View:OnText()/文本读入void CMy21513129View:OnMtpgx()/面拓扑关系void CMy21513129View:OnXtpgx()/线拓扑关系程序中使用的算法由离散样本点生成Delaunay三角网有多种算法,每个算法的执行效率都不一样,本次程序采用一种最简单,最低效,但是算法逻辑最清晰的一种。Delaunay三角网必须满足的一个条件是任何一个三角形的外接圆都不能包含其他任何一个样本点,具体步骤如下:l 枚举所

8、有可能的三角形l 判断其外接圆是否不包含任何其他样本点的,如果满足,则记录该三角形,直到所有三角形枚举完毕。输出文件的存储结构点产生后,可输出点文件。TIN三角网绘出后,可输出边文件和面文件。文件均以txt格式存储。点文件有三列,第一列为编号,第二列为x坐标,第三列为y坐标。边文件有三列,第一列为编号,第二到第三列为该边的两个端点的编号。面文件有四列,第一列为编号,第二到第四列为三角形三个顶点的编号。菜单设计一级菜单二级菜单散点生成随机生成文本读入鼠标输入生成注记点注记线注记面注记TIN保存点数据线数据面数据清除数据显示拓扑关系线拓扑关系面拓扑关系状态栏显示鼠标坐标位置本次在程序中实现在状态栏

9、显示鼠标坐标位置具体实现步骤如下:1. 打开ResourceView,右击Menu菜单,插入Menu,在空白处双击,Caption中填入Point。为Point设置下拉菜单,ID为ID_INDICATOR_POINT;Caption为point;Prompt为X:XXXX,Y:YYYY。2.打开MainFrm.cpp,在indicators数组中的第二个位置添加ID_INDICATOR_POINT。3.将MainFrm中的成员变量m_wndStatusBar修改为公有变量,并在视图类中添加头文件#include "MainFrm.h"。4. 利用类向导添加鼠标移动消息处理函数WM_MOUSEMOVE(),代码可以在源程序中查到:程序实现过程中改进之处1. 经核查发现点存储缺乏第一个点已纠正。2. 本次程序采用一种最简单,最低效,但是算法逻辑最清晰的一种,但是由

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论