?? tcston2.h
字號:
/* -*- 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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -