zoukankan      html  css  js  c++  java
  • 改进的蝴蝶算法的详细介绍

        蝴蝶算法是一种常用的插值细分算法,由NIRA  DYN  and  DAVID  LEVIN (Tel-Aviv  University) and JOHN  A.  GREGORY (Brunei  University)在论文A Butterfly  Subdivision  Scheme  for Surface Interpolation  with  Tension  Control  提出,但是原始算法在度不为6的点不光滑,Denis Zoriny Peter Schr ¨ odery Wim Sweldens在论文Interpolating Subdivision for Meshes with Arbitrary Topology中提出了改进的蝴蝶算法,可以在任意的三角网格上生成G1连续的细分曲面。

        但是我之前在实现改进的蝴蝶算法时总是没看懂,因为在一个端点(V1)的度为6而另一个端点(V2)不为6的情形下,到处查找到底资料只是解释了与V2相邻的端点的权重,而且这些权重相加为1/4。但是应该严格保证权重之和为1。我猜测V2的权重为3/4,查找了很多论文都没有清晰的解释,在《地理与地理信息科学》上看到一篇《一种改进的自适应蝴蝶细分算法及其在三维地质建模中的应用》,请教了作者,感谢董攀同学的回信给出了详细的解释,现将回信中的附件发在这里,不知道算不算侵权诶。

    (3)Butterfly算法简介

    该算法的输入数据为原始控制TIN面网,输出数据为加密后的TIN面网(经过插值)。具体过程如下:

    ①对于每一个三角形,在每条边的中点处附近插值,把每个三角形一分为四(如图2)。

    ②新插入的点(即所谓奇点)都在已有三角形的边上。对于它们的坐标点的计算,将分以下几种情况:

    (a)当该奇点所在边的两个端点的度均为6时(如图3)

    如上图所示,中间黄色点为插入的奇点,它的坐标值通过周围八个点(绿色)的坐标值加权平均得到。并且周围的点按权重不同可分为三类,各自权重如下:

    a = 1/2,b = 1/8,c = -1/16

     

    (b)当该奇点所在边的两个端点中,一个端点的度为6,另一个不为6时(如图4)

     

    如图4所示,奇点所在的边的两个端点中,点v的度不为6,点e0的度为6,则奇点的坐标值要根据点v及v的所有相临结点(绿色)的坐标加权得到。v点的权重如下:

    v = 3/4

    假设点v共有n个邻结点,则各邻结点的权值可根据n值的不同分别计算:

    n = 3时:e0 = 5/12,e1 = e2 = -1/12;

    n = 4时:e0 = 3/8,e1 = 0,e2 = -1/8,e3 = 0;

    n ≥ 5时:ej = [1/4 + cos(2∏*j/n) + 1/2 * cos(4∏*j/n)]/n,其中j = 0,1,…,n-1。

     

    (c)当该新边点所在边的两个端点的度均不为6时(如图5)

    先以v1为中心,按前述(b)情况中的方法计算出奇点的坐标,记为(x1,y1,z1),再以v2为中心同样计算出奇点的坐标,记为(x2,y2,z2),然后对两组坐标取平均值,得到奇点的坐标。

     

    (d)当该奇点所在边是初始控制网的边界时(当网格不闭合时存在这种情况,如图6),采用四点法。

     

     

    此时参与计算的各点的权值取值如下:

    a = 9/16,b = -1/16

     改进的蝴蝶细分和loop细分的对比图如下:

    原始网格

    两次loop的效果

    两次改进蝴蝶细分的效果

    可以看出还是loop细分的曲面视觉效果更加好。

    而且在初始网格太过稀疏的情况下,蝴蝶细分出来的效果很不理想:

    初始网格,左边为面显示右边为线显示

    一次改进的蝴蝶细分

    四次蝴蝶细分后的图像

  • 相关阅读:
    jvm2-垃圾回收
    Elasticsearch脑裂问题详细分析以及解决方案
    ThreadLocal原理(基于jdk1.8)
    seata-分布式事务-学习笔记
    Java中的数组
    HAProxy 详细配置说明
    (基础)--- 约数
    (基础)--- Trie树
    Oracle 数据类型对比 不同数据类型对数据空间占用及查询效率影响
    python F score打分
  • 原文地址:https://www.cnblogs.com/yezhangxiang/p/2011284.html
Copyright © 2011-2022 走看看