⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tri.h

📁 该程序主要用于三角网
💻 H
字号:
/* Copyright (c) Colorado School of Mines, 2001.*/
/* All rights reserved.                       */

/* include file for a 2-dimensional model of triangles */

#ifndef TRI_H
#define TRI_H

#include "par.h"

/*******************/
/* DATA STRUCTURES */
/*******************/

/* vertex */
typedef struct VStruct {
	struct VUStruct *vu;		/* list of uses of this vertex */
	int fixed;			/* non-zero if vertex is fixed */
	float x,y;			/* coordinates of vertex */
	void *va;			/* vertex attributes */
} Vertex;
typedef struct VUStruct {
	struct EUStruct *eu;		/* owning edge-use */
	struct VUStruct *vuPrev;	/* previous vertex-use in list */
	struct VUStruct *vuNext;	/* next vertex-use in list */
	struct VStruct *v;		/* vertex being used */
	void *vua;			/* vertex-use attributes */
} VertexUse;

/* edge */
typedef struct EStruct {
	struct EUStruct *eu;		/* list of edge-uses */
	int fixed;			/* non-zero if edge is fixed */
	void *ea;			/* edge attributes */
} Edge;
typedef struct EUStruct {
	struct FStruct *f;		/* owning face */
	struct VUStruct *vu;		/* starting vu of this eu */
	struct EUStruct *euMate;	/* opposite side of edge */
	struct EUStruct *euCW;		/* clockwise eu in face's eu list */
	struct EUStruct *euCCW;		/* counter-cw eu in face's eu list */
	struct EStruct *e;		/* edge being used */
	void *eua;			/* edge-use attributes */
} EdgeUse;

/* face */
typedef struct FStruct {
	struct MStruct *m;		/* owning model */
	struct FStruct *fPrev;		/* previous face in list */
	struct FStruct *fNext;		/* next face in list */
	struct EUStruct *eu;		/* list of edge-uses in face */
	float xc,yc,rs;			/* circumcircle for triangular faces */
	void *fa;			/* face attributes */
} Face;

/* triangle (a 3-sided face) */
typedef Face Tri;

/* model */
typedef struct MStruct {
	struct FStruct *f;			/* list of faces in model */
	float xmin,ymin,xmax,ymax;		/* model bounding rectangle */
	float eps;				/* distance < eps is zero */
	size_t sma,sfa,seua,sea,svua,sva;	/* attribute sizes */
	void (*vAdd)(struct MStruct *m, Vertex *v);	/* callbacks for */
	void (*vDel)(struct MStruct *m, Vertex *v);	/* vertex and */
	void (*tAdd)(struct MStruct *m, Tri *e);	/* triangle add */
	void (*tDel)(struct MStruct *m, Tri *e);	/* and delete */
	void *ma;				/* model attributes */
} Model;


/***********************/
/* FUNCTION PROTOTYPES */
/***********************/

Model *makeModel (float xmin, float ymin, float xmax, float ymax);
void killModel (Model *m);
Vertex* addVertexToModel (Model *m, float x, float y);
void deleteVertexFromModel (Model *m, Vertex *v);
Vertex* nearestVertexInModel (Model *m, Vertex *start, float x, float y);
Edge* nearestEdgeInModel (Model *m, Edge *start, float x, float y);
Tri* insideTriInModel (Model *m, Tri *start, float x, float y);
float distanceToEdge (Edge *e, float x, float y);
void projectToEdge (Edge *e, float *x, float *y);
int fixEdgeBetweenVertices (Vertex *v1, Vertex *v2);
int unfixEdge (Edge *e);
void writeModel (Model *m, FILE *fp);
Model *readModel (FILE *fp);

#endif /* TRI_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -