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++源码)一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python工具箱系列(八)
- 下一篇: VC++ OLE DB 读写数据库