c语言拓扑多边形自动生成,拓扑多边形生成算法(C++源码)一
程序主函数
#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++源码)一相关推荐
- flutter生成源代码_Flutter随机迷宫生成和解迷宫小游戏功能的源码
此博客旨在帮助大家更好的了解图的遍历算法,通过Flutter移动端平台将图的遍历算法运用在迷宫生成和解迷宫上,让算法变成可视化且可以进行交互,最终做成一个可进行随机迷宫生成和解迷宫的APP小游戏.本人 ...
- 炫酷手持滚动弹幕生成小工具微信小程序源码
☑️ 编号:ym335 ☑️ 品牌:无 ☑️ 语言:php ☑️ 大小:1.18MB ☑️ 类型:炫酷手持滚动弹幕生成 ☑️ 支持:微信小程序源码
- Python&OpenCV自动人脸打马赛克&调色系统[源码&UI操作界面&部署教程]
1.视频演示: [项目分享]Python&OpenCV自动人脸打马赛克&调色系统[源码&UI操作界面&部署教程] 2.图片演示: 3.图像颜色检索&替换: 4. ...
- DiscuzNT改造-远程内容自动采集-DNT2.5(定时采集、源码下载)
这个采集器原型来自于 <Discuz!NT论坛超级采集器普及版>http://nt.discuz.net/showtopic-46542.html,感谢原作者! 使用说明: 1. 将运行程 ...
- c语言复制粘贴源码,c语言函数memccpy()如何复制内存中的内容实例源码介绍
c语言函数memccpy()如何复制内存中的内容实例源码介绍.引入的头文件:#include memccpy()函数定义:void * memccpy(void *dest, const void * ...
- C语言在有序的数组是否存在固定点(附完整源码)
C语言在有序的数组是否存在固定点 C语言在有序的数组是否存在固定点的完整源码(定义,实现,main函数测试) C语言在有序的数组是否存在固定点的完整源码(定义,实现,main函数测试) #includ ...
- C语言 阿拉伯数字转换为汉语大写数字金额程序分析及源码
C语言 阿拉伯数字转换为汉语大写数字金额程序分析及源码 数据结构:用一个整型变量储存输入数字 大家可能会感觉用字符串取位更方便一些·· 但是相应的,字符串失去了数字原有的意思 00100和100对 ...
- 热门表情包+头像+壁纸自动采集多分类微信小程序源码下载支持多种流量主模式
这是一款自动采集的一款微信小程序源码 内由表情包,头像,还有壁纸组合而成的一款图片小程序 每一个都自带多种分类,内容丰富运营适合 另外支持插屏广告,激励视频广告,等多种广告 废话不多说,下面看小编的 ...
- python 操作键盘,鼠标 。我这个是自动企业微信加好友的,源码可以修改成别的。挺好使!
python 操作键盘,鼠标 .我这个是自动企业微信加好友的,源码可以修改成别的.挺好使! 键盘的按键码可以去百度搜,大体就是这么操作的 import win32con import win32api ...
- php导航收录源码,PHP最新响应式自动收录自带查反链导航源码
[温馨提示]源码包解压密码:www.youhutong.com 资源描述 PHP最新响应式自动收录自带查反链导航源码 源码介绍: 钥匙主题,基于flkc主题重写,功能:自动收录,自定义排序,自定义颜色 ...
最新文章
- SoapUI进行REST请求,POST方法提交到数据库的数据乱码问题
- flex布局实现叠在另一个div之上_如何让一个div在另一个div的上面,求高手指点...
- 【MM系列】SAP 簇表 A017 物料信息记录 (指定工厂) 包含的透明表
- php要输出为空值怎么写,thinkphp3.0基础模板引擎变量为空时输出默认值
- turtle模块还能这样玩?(一条条金龙鱼、雨景)
- CentOS7.6下设置mysql服务开机启动
- 编译原理——Lex与Yacc及应用
- 记事本编程开发以及IDEA编程开发
- 下载 Google Chrome 离线安装包
- 软件测试的艺术——软件测试的原则
- pantum打印机驱动安装m6506_奔图PantumM6506驱动程序官方版
- python卸载包-Python 包 卸载方法
- python12306抢票_python编写抢票软件-12306抢票软件run下载python版-西西软件下载
- MySQL 主从同步延迟的原因及解决办法
- July 16th 模拟赛C T3 圆周舞蹈 Solution
- 云服务器哪家好?云服务器评测对比
- 【N32G457】基于RT-Thread和N32G457的墨水屏日历
- Auto.js学习笔记——快速入门:软件安装
- pstools本机挂起进程
- KiCAD 6.0导入元件库及3D模型
热门文章
- LeetCode1-440题汇总,希望对你有点帮助!
- Aggregation level-聚集等级/BPC/ input ready query
- Springboot Failed to parse configuration class x nested exception is Java class path resource
- 2G到4G网络结构的演进过程(图)
- Android进阶之光读书笔记——第三章:View体系与自定义View
- Word文档被限制编辑,怎么破?
- C语言指针操作(四)通过指针引用字符串
- 全国首发!北京在全市推进实施电子劳动合同
- excel数据汇总工具怎么使用?
- macOS+matlab 2020b matlab_bgl工具箱使用时 MEX文件编译出错