程序主函数

#include "stdafx.h"

#include "CreatePolygons.h"

#include "CreateTopology.h"

int _tmain(int argc, _TCHAR* argv[])

{

//数据的存储路径

const char *filename = "G://topology//Lines.txt";

CreatePolygons Polygons;

CreatePolygons* CPolygon = &Polygons;

CPolygon->OpenFile(filename);//在文本中读取点和弧段数据

CPolygon->MainCreatePolygons();//自动生成多边形,并记录有效信息

//在多边形中提取有效信息,建立拓扑关系

CreateTopology Topologys;

CreateTopology* CTopologys = &Topologys;

CTopologys->GetPoint(CPolygon->Points);//得到点数据

CTopologys->BuildArcPoints(CPolygon->Arcs);//建立弧段-点关系表

CTopologys->BuildPolArc(CPolygon->Polygons);//建立多边形-弧段关系表

CTopologys->BuildArcPol(CPolygon->Arcs, CPolygon->Polygons);//建立弧段-多边形关系表

CTopologys->PrintTopTables();//显示拓扑表

system("pause");

return 0;

}

程序数据结构

#ifndef _datamodel_h_

#define _datamodel_h_

#include

using namespace std;

//点的结构

struct Point

{

int ID;

float X;

float Y;

};

//弧段结构

struct Arc

{

vector Points;

string ID;//弧段的编号

int TimeOfSearch;//遍历次数

int Direction;//弧段的方向

};

//生成多边形时,弧段及当时弧段的方向

struct ArcDir

{

Arc* arcs;

int Direction;

};

//构建多边形的结构

struct Polygon

{

vector ArcPts;//生成多边形时当时的弧段信息

char ID;//多边形的编号

double area;//多边形的面积

vector Points;//多边形的点

};

//点-弧结构

struct PointArcs

{

int pointID;

vector arcs;

};

//弧段的夹角信息

struct Angle

{

double angle;

Arc* arcs;

int Direction;

};

//拓扑数据结构设计--链状双重独立编码

struct TPolArc //多边形-弧段关系表

{

char PolID;

vector ArcID;

};

struct TArcPoints//弧段-点关系表

{

string ArcID;

vector PointID;

};

struct TArcPol//弧段-多边形关系表

{

string ArcID;

int StartID;

int EndID;

char LeftP;

char RightP;

};

//岛的结构

struct Island

{

char OutPolID;

char InPolID;

string AfterID;

string BeforeID;

};

#endif

#pragma once

#include "DataModel.h"

#include "math.h"

#include

using namespace std;

/********************************************************************

created:2009/02/16

created:16:2:2009 21:48

filename: g:/topology/topology/CreatePolygons.h

file path:g:/topology/topology

file base:CreatePolygons

author:huyu

purpose:自动生成拓扑多边形,并记录其有效信息

*********************************************************************/

class CreatePolygons

{

public:

CreatePolygons(void);

~CreatePolygons(void);

//打开文件,将数据加载弧段-点表数据

bool OpenFile(const char *filename);

//生成多边形

void MainCreatePolygons(void);

vector Points;//所有的点记录

vector Arcs;//所有的弧段(弧-点表)

vector Pointarcs;//点-弧表

vector Polygons;//记录图上上有多边形图

static char Pid;//多边形开始标示(A)

private:

//建立点-弧表

void CreatePointArcs(void);

//自动生成一个多边形

Polygon* CreateOnePolygon(Arc* cuarc);

//自动生成多边形图

void Createpolygons(Arc* cuarc);

//求两个弧段的夹角(逆时针夹角)

double AngleOfTwoArcs(Point* start, Point* inf, Point* end);

//得到多边形上的所有点序列

vector GetPlPoints(Polygon* polygon);

//求多边形的面积

double GetArea(vector pPoint);

//删除不符的多边形(即面积最大一个多边形)

void RemoveMaxPolygon(vector& Polygons);

//有当前弧段得到扩展弧段(多边形的下一个弧段)

Arc* GetNextArc(Arc* cuarc);

//通过点搜索与该点连接的弧段

PointArcs* SearchPtArcsByPt(Point* pt);

Point* SearchPointbyID(int ID);

Arc* SearchArcbyID(string ID);

Angle GetMinAngle(vector angles);

Angle MinAngle;//记录夹角的最小值和方向

vector Angles;//记录一条弧段与其他弧段的角度及方向

};

#pragma once

#include "DataModel.h"

#include

using namespace std;

/********************************************************************

created:2009/02/16

created:16:2:2009 21:50

filename: g:/topology/topology/CreateTopology.h

file path:g:/topology/topology

file base:CreateTopology

author:huyu

purpose:根据生成多边形时记录的信息,使用链状双重独立编码表达拓扑关系,

并在屏幕上显示出来

*********************************************************************/

class CreateTopology

{

public:

CreateTopology(void);

~CreateTopology(void);

//得到所有点的数据

void GetPoint(vector Points);

//建立弧段-点关系表

void BuildArcPoints(vector Arcs);

//建立多边形-弧段关系表

void BuildPolArc(vector Polygons);

//建立弧段-多边形关系表

void BuildArcPol(vector arcs, vector Polygons);

//显示拓扑表

void PrintTopTables(void);

vector Arcpoints;//弧段-点关系表

vector PolArc;//多边形-弧段关系表

vector ArcPol;//弧段-多边形关系表

vector Points;//点记录

private:

//判断是否为岛

bool PtInisland(vector Polygons, Polygon* polygon);

//点是否在多边形中

bool PtInRegion(Point* point, vector pllPoint);

double IsLeft(Point *P0, Point *P1, Point *P2 );

//如果存在岛,将组成岛的弧段添加到多边形上

void ModifyPol(char PolID);

Island islandinfo;

};

c语言拓扑多边形自动生成,拓扑多边形生成算法(C++源码)一相关推荐

  1. flutter生成源代码_Flutter随机迷宫生成和解迷宫小游戏功能的源码

    此博客旨在帮助大家更好的了解图的遍历算法,通过Flutter移动端平台将图的遍历算法运用在迷宫生成和解迷宫上,让算法变成可视化且可以进行交互,最终做成一个可进行随机迷宫生成和解迷宫的APP小游戏.本人 ...

  2. 炫酷手持滚动弹幕生成小工具微信小程序源码

    ☑️ 编号:ym335 ☑️ 品牌:无 ☑️ 语言:php ☑️ 大小:1.18MB ☑️ 类型:炫酷手持滚动弹幕生成 ☑️ 支持:微信小程序源码

  3. Python&OpenCV自动人脸打马赛克&调色系统[源码&UI操作界面&部署教程]

    1.视频演示: [项目分享]Python&OpenCV自动人脸打马赛克&调色系统[源码&UI操作界面&部署教程] 2.图片演示: 3.图像颜色检索&替换: 4. ...

  4. DiscuzNT改造-远程内容自动采集-DNT2.5(定时采集、源码下载)

    这个采集器原型来自于 <Discuz!NT论坛超级采集器普及版>http://nt.discuz.net/showtopic-46542.html,感谢原作者! 使用说明: 1. 将运行程 ...

  5. c语言复制粘贴源码,c语言函数memccpy()如何复制内存中的内容实例源码介绍

    c语言函数memccpy()如何复制内存中的内容实例源码介绍.引入的头文件:#include memccpy()函数定义:void * memccpy(void *dest, const void * ...

  6. C语言在有序的数组是否存在固定点(附完整源码)

    C语言在有序的数组是否存在固定点 C语言在有序的数组是否存在固定点的完整源码(定义,实现,main函数测试) C语言在有序的数组是否存在固定点的完整源码(定义,实现,main函数测试) #includ ...

  7. C语言 阿拉伯数字转换为汉语大写数字金额程序分析及源码

    C语言 阿拉伯数字转换为汉语大写数字金额程序分析及源码 数据结构:用一个整型变量储存输入数字   大家可能会感觉用字符串取位更方便一些·· 但是相应的,字符串失去了数字原有的意思 00100和100对 ...

  8. 热门表情包+头像+壁纸自动采集多分类微信小程序源码下载支持多种流量主模式

    ​这是一款自动采集的一款微信小程序源码 内由表情包,头像,还有壁纸组合而成的一款图片小程序 每一个都自带多种分类,内容丰富运营适合 另外支持插屏广告,激励视频广告,等多种广告 废话不多说,下面看小编的 ...

  9. python 操作键盘,鼠标 。我这个是自动企业微信加好友的,源码可以修改成别的。挺好使!

    python 操作键盘,鼠标 .我这个是自动企业微信加好友的,源码可以修改成别的.挺好使! 键盘的按键码可以去百度搜,大体就是这么操作的 import win32con import win32api ...

  10. php导航收录源码,PHP最新响应式自动收录自带查反链导航源码

    [温馨提示]源码包解压密码:www.youhutong.com 资源描述 PHP最新响应式自动收录自带查反链导航源码 源码介绍: 钥匙主题,基于flkc主题重写,功能:自动收录,自定义排序,自定义颜色 ...

最新文章

  1. SoapUI进行REST请求,POST方法提交到数据库的数据乱码问题
  2. flex布局实现叠在另一个div之上_如何让一个div在另一个div的上面,求高手指点...
  3. 【MM系列】SAP 簇表 A017 物料信息记录 (指定工厂) 包含的透明表
  4. php要输出为空值怎么写,thinkphp3.0基础模板引擎变量为空时输出默认值
  5. turtle模块还能这样玩?(一条条金龙鱼、雨景)
  6. CentOS7.6下设置mysql服务开机启动
  7. 编译原理——Lex与Yacc及应用
  8. 记事本编程开发以及IDEA编程开发
  9. 下载 Google Chrome 离线安装包
  10. 软件测试的艺术——软件测试的原则
  11. pantum打印机驱动安装m6506_奔图PantumM6506驱动程序官方版
  12. python卸载包-Python 包 卸载方法
  13. python12306抢票_python编写抢票软件-12306抢票软件run下载python版-西西软件下载
  14. MySQL 主从同步延迟的原因及解决办法
  15. July 16th 模拟赛C T3 圆周舞蹈 Solution
  16. 云服务器哪家好?云服务器评测对比
  17. 【N32G457】基于RT-Thread和N32G457的墨水屏日历
  18. Auto.js学习笔记——快速入门:软件安装
  19. pstools本机挂起进程
  20. KiCAD 6.0导入元件库及3D模型

热门文章

  1. LeetCode1-440题汇总,希望对你有点帮助!
  2. Aggregation level-聚集等级/BPC/ input ready query
  3. Springboot Failed to parse configuration class x nested exception is Java class path resource
  4. 2G到4G网络结构的演进过程(图)
  5. Android进阶之光读书笔记——第三章:View体系与自定义View
  6. Word文档被限制编辑,怎么破?
  7. C语言指针操作(四)通过指针引用字符串
  8. 全国首发!北京在全市推进实施电子劳动合同
  9. excel数据汇总工具怎么使用?
  10. macOS+matlab 2020b matlab_bgl工具箱使用时 MEX文件编译出错