stt/src/stt_in_triangle_topo.cc

37 lines
1.0 KiB
C++
Raw Normal View History

2025-01-15 22:42:06 +08:00
#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;
2025-06-29 14:08:16 +08:00
if (in_topo.max_depth >= node_depth &&
node_resolution >= in_topo.minimal_resolution &&
data_std(in_topo.topo) >= diff_threshold)
{
// 将控制点的组别赋值给当前节点
node->tri.physic_group = in_topo.physic_group;
return 1;
}
2025-01-15 22:42:06 +08:00
else return 0;
}
}