stt/src/stt_in_triangle_topo.cc
2025-01-15 22:42:06 +08:00

47 lines
1.5 KiB
C++

#include "stt_class.h"
int SttGenerator::InTriangleTopo(QuadTreeNode* node, const ControlTopo& in_topo, double diff_threshold){
//没有插入的地形 直接返回否
if (in_topo.vert.empty()){
return 0;
}
else{
int node_depth;
double node_resolution;
double max_topo = -1e+30, min_topo = 1e+30;
Triangle temp_tri;
for (int j = 0; j < 3; j++){
temp_tri.ids[j] = node->tri.ids[j];
}
node_depth = node->depth;
node_resolution = 0;
for (int i = 0; i < 3; i++){
node_resolution += acos(DotProduct(array_stt_vert_[temp_tri.ids[i]].posic,array_stt_vert_[temp_tri.ids[(i+1)%3]].posic)
/(ModuleLength(array_stt_vert_[temp_tri.ids[i]].posic)*ModuleLength(array_stt_vert_[temp_tri.ids[(i+1)%3]].posic)));
}
node_resolution = node_resolution*60/Pi;
// 将控制点的组别赋值给当前节点
node->tri.physic_group = in_topo.physic_group;
if (data_std(in_topo.topo) >= diff_threshold) return 1;
else return 0;
/*
for (int i = 0; i < in_topo.vert.size(); i++){
// 1. 允许的最大深度大于当前节点的深度
// 2. 允许的最小分辨率小于当前节点的分辨率
if (in_topo.max_depth >= node_depth && node_resolution >= in_topo.minimal_resolution){
// 统计符合条件的地形的最大值与最小值
if (in_topo.topo[i] > max_topo) max_topo = in_topo.topo[i];
if (in_topo.topo[i] < max_topo) min_topo = in_topo.topo[i];
}
}
if (std::abs(max_topo - min_topo) >= diff_threshold) return 1;
return 0;
*/
}
}