tcston2.h
来自「并行TIN生成算法, 基于DeWall算法理论实现」· C头文件 代码 · 共 124 行
H
124 行
/* -*- C++ -*- */
//=============================================================================
/**
* @文件 TcsTon2.h
*
* TcsTon2.h, 版本 0.10 2008/11/17
*
* @作者 邓雪清 <xueqingdeng@sohu.com>
* 2维TIN构建公共函数
*/
//=============================================================================
#ifndef _TCS_TON2_H_
#define _TCS_TON2_H_
#include "..\Tcs_Gen\TcsHL.h"
#include "..\Tcs_Gen\TcsBL.h"
#include "..\Tcs_Gen\TcsSL.h"
#include "..\Tcs_Inc\TcsBase.h"
// 网格索引结构
typedef struct tagTIN_C {
TCS_S32 num; // 数组容量
TCS_S32 *pid; // 点号数组
TCS_S32 sum; // 有效点数
TCS_S32 ocn; // 剩余点数
} TIN_C;
// 统一网格结构
typedef struct tagTIN_G {
TCS_F64 dup; // 坐标精度
TCS_F64 bnd[4]; // 坐标边界
TCS_F64 spn[2]; // 网格间距
TCS_S32 num[2]; // 矩阵大小
TCS_S32 vpn; // 进度计数
TCS_S32 *pid; // 回转计数
TIN_C *idx; // 单元数组
} TIN_G;
// 三角形边结构
typedef struct tagTIN_S {
TCS_S32 sid[2]; // 起点([0]:pid, [1]:cid)
TCS_S32 eid[2]; // 末点([0]:pid, [1]:cid)
TCS_S32 pid[2]; // 对面点
} TIN_S;
// 三角形结构
typedef struct tagTIN_T {
TCS_S32 pid[3];
} TIN_T;
// 隔离区结构
typedef struct tagTIN_R {
TCS_S32 SCO[2]; // 左下单元位
TCS_F64 AXV; // 分隔线轴值
TCS_S32 AXI; // 下次分隔轴(0:X, 1:Y)
CTcsBL *ATL; // 三角形链表
CTcsHL *ASL; // 活动边链表
CTcsHL *BSL; // 静止边链表
TIN_G *G; // 局部化索引
TIN_S *S; // 下次扩展边
} TIN_R;
// 点标结构
typedef struct tagTIN_X {
TCS_S32 pid;
TCS_S32 cid;
} TIN_X;
// 哈希函数
TCS_S32 SIDE_EQLH(void *s1, void *s2);
TCS_U32 SIDE_HASH(void *s1);
// 计算坐标边界
extern TCS_V00 ComBnd2(TIN_G *G, TCS_F64 *P, TCS_S32 N);
// 计算网格单元
extern TCS_S32 ComIdx2(TIN_G *G, TCS_F64 *p);
extern TCS_V00 ComIdx2(TIN_G *G, TCS_F64 *p, TCS_S32 *o);
// 单元移去点号
// 基于位置
extern TCS_V00 RmxPid(TIN_C *C, TCS_S32 pos);
// 基于点号
extern TCS_V00 RmvPid(TIN_C *C, TCS_S32 pid);
// 建立网格索引
extern TCS_V00 CnsIdx2(TIN_G *G, TCS_F64 *P, TCS_S32 N, TCS_S32 av);
// 欧拉距离平方
extern TCS_F64 EuLen2D(TCS_F64 *p1, TCS_F64 *p2);
// 判断是否共线
extern TCS_S32 IsLine2(TCS_F64 *p1, TCS_F64 *p2, TCS_F64 *p3);
// 计算同侧符号
extern TCS_S32 IsSide2(TCS_F64 *p1, TCS_F64 *p2, TCS_F64 *p3);
// 计算外接圆心
extern TCS_V00 ComCen2(TCS_F64 *p1, TCS_F64 *p2, TCS_F64 *p3, TCS_F64 *ce);
// 共圆点弧位排序
extern TCS_V00 ArcPos2(CTcsBL *L, TCS_F64 *P, TCS_F64 *ce, TCS_F64 d2);
// 构造三角形:最大最小角原则
extern TCS_V00 ConTen2(TIN_G *G, TCS_F64 *P, TCS_S32 sid[2], TCS_S32 eid[2], CTcsBL *APL, CTcsBL *ATL, CTcsHL *ASL, CTcsHL *BSL, CTcsSL *SSL);
extern TCS_V00 ConTen2(TIN_G *G, TCS_F64 *P, TCS_S32 sid[2], TCS_S32 eid[2], CTcsBL *APL, CTcsBL *ATL, CTcsHL *ASL, CTcsHL *BSL);
extern TCS_V00 IniSide(TIN_S *S, TCS_S32 sip, TCS_S32 eip, TCS_S32 sic, TCS_S32 eic, TCS_S32 pid);
// 计算搜索边界
extern TCS_V00 ComBnd2(TIN_G *G, TCS_F64 *p, TCS_F64 d, TCS_S32 &c1, TCS_S32 &c2, TCS_S32 &r1, TCS_S32 &r2);
// 构造三角形墙:用于围绕X分隔线
extern TCS_V00 ConTxn2(TIN_G *G, TIN_S *S, TCS_F64 *P, TCS_F64 X, CTcsBL *ATL, CTcsHL *ASL, CTcsHL *BSL);
// 构造三角形墙:用于围绕Y分隔线
extern TCS_V00 ConTyn2(TIN_G *G, TIN_S *S, TCS_F64 *P, TCS_F64 Y, CTcsBL *ATL, CTcsHL *ASL, CTcsHL *BSL);
// 判断边与X分隔线相交
extern TCS_S32 LxSide2(TCS_F64 X, TCS_F64 *P, TIN_S *S);
// 判断边与Y分隔线相交
extern TCS_S32 LySide2(TCS_F64 Y, TCS_F64 *P, TIN_S *S);
// 构造隔离区:用于左右隔离
extern TCS_V00 ConRxn2(TIN_G *G, TIN_R *L, TIN_R *R, CTcsHL *H, TCS_F64 *P, TCS_F64 X, TCS_F64 Y);
// 构造隔离区:用于上下隔离
extern TCS_V00 ConRyn2(TIN_G *G, TIN_R *U, TIN_R *D, CTcsHL *H, TCS_F64 *P, TCS_F64 X, TCS_F64 Y);
// 单元编号逆变换
extern TCS_S32 InvCid2(TCS_S32 cid, TCS_S32 co1, TCS_S32 co2, TCS_S32 sc, TCS_S32 sr);
// 搜索第3点:空圆法则
extern TCS_V00 FndEmp2(TIN_G *G, TIN_S *S, TCS_F64 *P, TCS_F64 *ce, TCS_F64 &d2, CTcsBL *L);
// 隔离区构造三角形
DLLEXPORT TCS_V00 ConTen2(TIN_R *R, TCS_F64 *P, TCS_S32 *TE);
#endif // _TCS_TON2_H_
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?