二维轮廓线提取.PDF

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二维轮廓线提取 一、目的与应用 二维轮廓线提取的目的是当给定在二维平面内一组线段时,用户选择一 个点,然后提取包含这个点的最小封闭多边形。可以应用于建筑软件上,当 给定一组墙时,根据选择的点来寻找房间。 二、基本思想与实现 数据结构: 设计了两个类 CSegment 和 CNode class CSegment { public: //指向左右接点 CNode* m_LeftNode; CNode* m_RightNode; //记录所有线段的指针,指向下一个线段 CSegment* m_pAllNext; //在接点中的以极角排序的链中的指针,指向下一个线段 //L 为左接点的链表,R 为右接点的链表,都是双向循环的 CSegment* m_pSegmentLNext; CSegment* m_pSegmentLprev; CSegment* m_pSegmentRNext; CSegment* m_pSegmentRprev; //在左接点的极角 double m_LAngle; //在右接点的极角 double m_RAngle; //查找状态 int m_IsChecked; //查找时贡献的角度 double m_ContibuteAngle; //所求轮廓线链中的指针 CSegment* m_pNeedNext; public: CSegment(); virtual ~CSegment(); //计算极角 double GetAngle(CNode *Node); //为线段设置左右接点 BOOL SetNode(CNode *Node1,CNode *Node2); //判断是否端点 BOOL IsNode(DPOINT CrossPoint); // 由点得到Node CNode* GetNodeByPoint(DPOINT Point); //得到左右接点 CNode* GetLeftNode(); CNode* GetRightNode(); //得到线段的与A 不同的另一个接点 CNode* GetOtherNode(CNode* A); }; //为了计算准确,点的坐标使用了double 型 typedef struct tagpoint { double x; double y; }DPOINT; class CNode { public: //记录点的位置 DPOINT m_Location; //记录以该点为端点的按照极角排序的线段双向循环莲表 CSegment* m_SegList; //在所有接点中的下一个接点 CNode* m_pAllNext; //新加入线段中的所有接点中的下一个接点 CNode* m_pNodeNext; //所求轮廓线的所有接点链 CNode* m_pNodeNeed; public: CNode(); virtual ~CNode(); // 向本接点加入线段主要是设置m_SegList 链 BOOL AddSegment(CSegment* pSegment); //设置m_Location BOOL SetLocation(DPOINT point); //得到在查找过程中

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档