免费网页设计制作网站,互联网平面设计,牡丹江最新通知今天,wordpress写文章卡先找到体的参考方向#xff08;这个参考方向对于相同体重合之后是相同的#xff09;#xff0c;这个时候我们的思路是三个不共线的点确定一个坐标系#xff0c;然后和绝对方向求转换矩阵。然后获取体的所有边的几何中心#xff0c;把这些点通过转换矩阵转换之后存起来这个参考方向对于相同体重合之后是相同的这个时候我们的思路是三个不共线的点确定一个坐标系然后和绝对方向求转换矩阵。然后获取体的所有边的几何中心把这些点通过转换矩阵转换之后存起来再和另外一个体转换之后的点数据作对比在误差范围内配对点的数量等于体获取点的数量就是相同体有的体没有边只有面那就通过大小和面重合来判断就行了PK函数有判断面重合我的PK专栏有写具体实现代码如下
//需要用到的结构体
struct BODYDATA
{tag_t body_tag;//体的tagtag_t ps_tag;//转PK的tagPK_EDGE_t* edge;//体的所有边PK_FACE_t* face;//体的所有面PK_EDGE_t first_edge;//体的第一条边PK_FACE_t first_face;//体的第一个面double transorigin[3];//最小包络框的中心即转换原点double dirx[3];//体的转换方向double diry[3];//体的转换方向double MinBlockLen[3];//最小包络框的长宽高int edge_num;//边的数量int face_num;//面的数量int topol_num;//子类型的数量int num_reation;int ver_num;//顶点的数量BODYDATA()//初始化结构体数据{for(int i0;i3;i){MinBlockLen[i]0;}dirx[0]1;dirx[1]0;dirx[2]0;diry[0]0;diry[1]1;diry[2]0;body_tagNULL;edgeNULL;faceNULL;edge_num0;face_num0;ver_num0;num_reation0;topol_num0;}
}
void GetBodyData(BODYDATA bodydata)
{PK_VERTEX_t vertiex;PK_BODY_ask_faces(bodydata.ps_tag,bodydata.face_num,bodydata.face);//PK获取体的所有面PK_BODY_ask_edges(bodydata.ps_tag,bodydata.edge_num,bodydata.edge);//PK获取体的所有边PK_BODY_ask_vertices(bodydata.ps_tag,bodydata.ver_num,vertiex);//pk或取体的所有顶点PK_BODY_ask_first_edge(bodydata.ps_tag,bodydata.first_edge);//PK获取体的第一条边PK_BODY_ask_first_face(bodydata.ps_tag,bodydata.first_face);//PK获取体的第一个面PK_BODY_ask_topology_o_t options;PK_BODY_ask_topology_o_m(options);PK_TOPOL_t* topols;PK_CLASS_t* class_type;int numrelation0;int* parents;int* children;PK_TOPOL_sense_t* senses;
PK_BODY_ask_topology(bodydata.ps_tag,options,bodydata.topol_num,topols,class_type,bodydata.num_reateion,parents,children,senses);
} 点云我写完了代码有点多没时间敲先放图片将就看看有时间我再放上去 有需要的话可以关注一下私信我