- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
半边数据结构上的操作
操作一:给定一条边,查找此边的一层邻域半边
1)操作描述
此操作给定一条边,选择这条边一层邻居边。示例:
算法描述
输入:已选择的一个边
输出:已选择的边的外邻居边序列
核心思想:分别遍丿力已选择边的两条半边,即分别绕着已选择边的两个顶点进行旋转。每一 次迭代时,根据半边Z间的连接关系找到外围的边。
算法步骤
输入:选择的边:e,已选择边的两个半边二{ HFbHF2 }
输出:外围半边的集合:C = { }
算法流程:
第一步:设置当前的半边为选定半边的下一条半边的反向半边,也就是:
TriMesh. HalfEdge currentHalf edge = hf0. Next. Opposit e:
第二步:假如当前半边不在边界上,那么把当前半边的前一条半边所在的边放入输出集C, 也就是:
if (!currentHalfedge? OnBoundary)
{
list? Add(cur r ent Half edge ? Previous):
}
第三步:循环第二步,ft到当前半边的下-?条半边的反向半边为起始半边,也即是:
while (cur r ent Half edge .Next?0pposite != hf0)
第四步:设置当前的半边为选定的另一条半边的下一条半边的反向半边,也即是:
cur r ent Half edge = hfl.Next. Opposite;
第五步:假如当前半边不在边界上,那么把当前半边的前一条半边所在的边放入输出集C, 也就是:
if (! cur r ent Half edge ? OnB oundary)
{
list? Add(cur r ent Half edge ? Previous);
}
第六步:循环第四步,直到当前半边的下一?条半边的反向半边为起始半边,也即是:
while (cur r ent Half edge .Next?0pposite != hf1)
算法图示
A)输入和输出,其中下图左中蓝色的边给定的边,下图右中红色的边是输出的一层邻居半
B)算法思路:分别遍历已选择边的两条半边,即分别绕着已选择边的两个顶点进行旋转。 每一次迭代吋,根据半边之间的连接关系找到外围的边,如下图所示。
5)算法步骤图示
第一步:选择一个起始半边,如下图蓝色绿色有箭头的半边所示;
绿色是迭代的半边,桔黄色是输出的半边;
绿色是迭代的半边,桔黄色是输出的半边;
第三步:假如当前半边的下一条边的反向半边和起始半边一致,终止迭代;
如卜?图绿色边所示,此半边和第一步屮的半边方向
第六步:假如当前半边的下一条边的反向半边和起始半边一致,终止迭代;
第七步:最终结杲如下:
7)算法代码
publie ListTriMesh. HalfEdge RetrieveOneRingEdgeOfEdge(TriMesh. Edge edge) {
TriMesh mesh = (TriMesh)edge. Mesh;
ListTriMesh. HalfEdge list = new List TriMesh. HalfEdgeX):
TriMesh. HalfEdge hfO = edge. HalfEdgeO;
TriMesh. HalfEdge cur r ent Half edge = hf0.Next. Opposit e:
while (currentHalfedge. Next. Opposite != hf0)
{
if (!currentHalfedge. OnBoundary)
{
list. Add(cur r ent Half edge. Previous);
}
cur r ent Half edge = currentHalfedge. Next. Opposite;
};
TriMesh.HalfEdge hfl = edge.HalfEdge 1;
cur r ent Half edge = hf1. Next. Opposit e;
while (currentHalfedge. Next. Opposite != hfl)
{
if (!currentHalfedge. OnBoundary)
{
list. Add(cur r ent Half edge. Previous);
}
cur r ent Half edge = currentHalfedge. Next. Opposite;
}:
return list;
}
8)效果
作业:
1 CreateFace 操作
RemoveVeilex
RemoveFace
RemoveEdge
MergeEdge( rriMesh.Kdge edge, Vector3D position
您可能关注的文档
最近下载
- 统计数据分析基础教程3.ppt VIP
- 国际学生导师接收函.doc VIP
- 疾病预防控制中心改扩建项目环评环境影响报告表.pdf
- 【行业标准】YB(T)24-1986矿用工字钢.pdf VIP
- 2025年军队专业技能岗位文职人员招聘考试(军需保管员)历年参考题库含答案详解.docx VIP
- 2021年军队文职人员招聘考试专业技能岗位《基本知识》习题集(含答案).pdf VIP
- 医院人力资源配置及岗位设置实施办法.pdf VIP
- 关于筹备成立XX跨境电商商会的申请报告.docx
- 《建设工程监理规范》GB-T50319-2024版-附.pptx VIP
- 2025至2030水下电动泵市场行业项目调研及市场前景预测评估报告.docx
原创力文档


文档评论(0)