⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmlbisect3.cpp

📁 Wild Math Library数值计算库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    ZeroTest(m_fX1,m_fYm,m_fZ1,m_fF1m1,m_fG1m1,m_fH1m1,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 101,111
    ZeroTest(m_fX1,m_fY1,m_fZm,m_fF11m,m_fG11m,m_fH11m,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 110,111

    ZeroTest(m_fXm,m_fY1,m_fZ0,m_fFm10,m_fGm10,m_fHm10,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 010,110
    ZeroTest(m_fX1,m_fYm,m_fZ0,m_fF1m0,m_fG1m0,m_fH1m0,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 100,110
    ZeroTest(m_fX1,m_fY0,m_fZm,m_fF10m,m_fG10m,m_fH10m,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 100,101
    ZeroTest(m_fXm,m_fY0,m_fZ1,m_fFm01,m_fGm01,m_fHm01,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 001,101
    ZeroTest(m_fX0,m_fYm,m_fZ1,m_fF0m1,m_fG0m1,m_fH0m1,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 001,011
    ZeroTest(m_fX0,m_fY1,m_fZm,m_fF01m,m_fG01m,m_fH01m,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 010,011

    ZeroTest(m_fXm,m_fY0,m_fZ0,m_fFm00,m_fGm00,m_fHm00,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 000,100
    ZeroTest(m_fX0,m_fYm,m_fZ0,m_fF0m0,m_fG0m0,m_fH0m0,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 000,010
    ZeroTest(m_fX0,m_fY0,m_fZm,m_fF00m,m_fG00m,m_fH00m,
        m_fXRoot,m_fYRoot,m_fZRoot);  // edge 000,001

    ZeroTest(m_fX1,m_fYm,m_fZm,m_fF1mm,m_fG1mm,m_fH1mm,
        m_fXRoot,m_fYRoot,m_fZRoot);  // face 110,100,101,111
    ZeroTest(m_fXm,m_fY1,m_fZm,m_fFm1m,m_fGm1m,m_fHm1m,
        m_fXRoot,m_fYRoot,m_fZRoot);  // face 010,110,111,011
    ZeroTest(m_fXm,m_fYm,m_fZ1,m_fFmm1,m_fGmm1,m_fHmm1,
        m_fXRoot,m_fYRoot,m_fZRoot);  // face 001,101,111,011
    ZeroTest(m_fX0,m_fYm,m_fZm,m_fF0mm,m_fG0mm,m_fH0mm,
        m_fXRoot,m_fYRoot,m_fZRoot);  // face 000,010,011,001
    ZeroTest(m_fXm,m_fY0,m_fZm,m_fFm0m,m_fGm0m,m_fHm0m,
        m_fXRoot,m_fYRoot,m_fZRoot);  // face 000,100,001,101
    ZeroTest(m_fXm,m_fYm,m_fZ0,m_fFmm0,m_fGmm0,m_fHmm0,
        m_fXRoot,m_fYRoot,m_fZRoot);  // face 000,100,110,010

    ZeroTest(m_fXm,m_fYm,m_fZm,m_fFmmm,m_fGmmm,m_fHmmm,
        m_fXRoot,m_fYRoot,m_fZRoot);  // center

    // edge 011,111
    AddNode(m_fXm,m_fY1,m_fZ1,m_fFm11,m_fGm11,m_fHm11);
    m_pkTemp->m_pkXNext = pkN111;
    m_pkTemp->m_pkYNext = NULL;
    m_pkTemp->m_pkZNext = NULL;
    pkN011->m_pkXNext = m_pkTemp;

    // edge 101,111
    AddNode(m_fX1,m_fYm,m_fZ1,m_fF1m1,m_fG1m1,m_fH1m1);
    m_pkTemp->m_pkXNext = NULL;
    m_pkTemp->m_pkYNext = pkN111;
    m_pkTemp->m_pkZNext = NULL;
    pkN101->m_pkYNext = m_pkTemp;

    // edge 110,111
    AddNode(m_fX1,m_fY1,m_fZm,m_fF11m,m_fG11m,m_fH11m);
    m_pkTemp->m_pkXNext = NULL;
    m_pkTemp->m_pkYNext = NULL;
    m_pkTemp->m_pkZNext = pkN111;
    pkN110->m_pkZNext = m_pkTemp;

    // edge 010,110
    AddNode(m_fXm,m_fY1,m_fZ0,m_fFm10,m_fGm10,m_fHm10);
    m_pkTemp->m_pkXNext = pkN110;
    m_pkTemp->m_pkYNext = NULL;
    pkN010->m_pkXNext = m_pkTemp;

    // edge 100,110
    AddNode(m_fX1,m_fYm,m_fZ1,m_fF1m0,m_fG1m0,m_fH1m0);
    m_pkTemp->m_pkXNext = NULL;
    m_pkTemp->m_pkYNext = pkN110;
    pkN100->m_pkYNext = m_pkTemp;

    // edge 100,101
    AddNode(m_fX1,m_fY0,m_fZm,m_fF10m,m_fG10m,m_fH10m);
    m_pkTemp->m_pkXNext = NULL;
    m_pkTemp->m_pkZNext = pkN101;
    pkN100->m_pkZNext = m_pkTemp;

    // edge 001,101
    AddNode(m_fXm,m_fY0,m_fZ1,m_fFm01,m_fGm01,m_fHm01);
    m_pkTemp->m_pkXNext = pkN101;
    m_pkTemp->m_pkZNext = NULL;
    pkN001->m_pkXNext = m_pkTemp;

    // edge 001,011
    AddNode(m_fX0,m_fYm,m_fZ1,m_fF0m1,m_fG0m1,m_fH0m1);
    m_pkTemp->m_pkYNext = pkN011;
    m_pkTemp->m_pkZNext = NULL;
    pkN001->m_pkYNext = m_pkTemp;

    // edge 010,011
    AddNode(m_fX0,m_fY1,m_fZm,m_fF01m,m_fG01m,m_fH01m);
    m_pkTemp->m_pkYNext = NULL;
    m_pkTemp->m_pkZNext = pkN011;
    pkN010->m_pkZNext = m_pkTemp;

    // edge 000,100
    AddNode(m_fXm,m_fY0,m_fZ0,m_fFm00,m_fGm00,m_fHm00);
    m_pkTemp->m_pkXNext = pkN100;
    pkN000->m_pkXNext = m_pkTemp;

    // edge 000,010
    AddNode(m_fX0,m_fYm,m_fZ0,m_fF0m0,m_fG0m0,m_fH0m0);
    m_pkTemp->m_pkYNext = pkN010;
    pkN000->m_pkYNext = m_pkTemp;

    // edge 000,001
    AddNode(m_fX0,m_fY0,m_fZm,m_fF00m,m_fG00m,m_fH00m);
    m_pkTemp->m_pkZNext = pkN001;
    pkN000->m_pkZNext = m_pkTemp;

    // face 110,100,101,111
    AddNode(m_fX1,m_fYm,m_fZm,m_fF11m,m_fG11m,m_fH11m);
    m_pkTemp->m_pkXNext = NULL;
    m_pkTemp->m_pkYNext = pkN110->m_pkZNext;
    m_pkTemp->m_pkZNext = pkN101->m_pkYNext;
    pkN100->m_pkYNext->m_pkZNext = m_pkTemp;
    pkN100->m_pkZNext->m_pkYNext = m_pkTemp;

    // face 010,110,111,011
    AddNode(m_fXm,m_fY1,m_fZm,m_fFm1m,m_fGm1m,m_fHm1m);
    m_pkTemp->m_pkXNext = pkN110->m_pkZNext;
    m_pkTemp->m_pkYNext = NULL;
    m_pkTemp->m_pkZNext = pkN011->m_pkXNext;
    pkN010->m_pkXNext->m_pkZNext = m_pkTemp;
    pkN010->m_pkZNext->m_pkXNext = m_pkTemp;

    // face 001,101,111,011
    AddNode(m_fXm,m_fYm,m_fZ1,m_fFmm1,m_fGmm1,m_fHmm1);
    m_pkTemp->m_pkXNext = pkN101->m_pkYNext;
    m_pkTemp->m_pkYNext = pkN011->m_pkXNext;
    m_pkTemp->m_pkZNext = NULL;
    pkN001->m_pkXNext->m_pkYNext = m_pkTemp;
    pkN001->m_pkYNext->m_pkXNext = m_pkTemp;

    // face 000,010,011,001
    AddNode(m_fX0,m_fYm,m_fZm,m_fF0mm,m_fG0mm,m_fH0mm);
    m_pkTemp->m_pkYNext = pkN010->m_pkZNext;
    m_pkTemp->m_pkZNext = pkN001->m_pkYNext;
    pkN000->m_pkYNext->m_pkZNext = m_pkTemp;
    pkN000->m_pkZNext->m_pkYNext = m_pkTemp;

    // face 000,100,001,101
    AddNode(m_fXm,m_fY0,m_fZm,m_fFm0m,m_fGm0m,m_fHm0m);
    m_pkTemp->m_pkXNext = pkN100->m_pkZNext;
    m_pkTemp->m_pkZNext = pkN001->m_pkXNext;
    pkN000->m_pkXNext->m_pkZNext = m_pkTemp;
    pkN000->m_pkZNext->m_pkXNext = m_pkTemp;

    // face 000,100,110,010
    AddNode(m_fXm,m_fYm,m_fZ0,m_fFmm0,m_fGmm0,m_fHmm0);
    m_pkTemp->m_pkXNext = pkN100->m_pkYNext;
    m_pkTemp->m_pkYNext = pkN010->m_pkXNext;
    pkN000->m_pkXNext->m_pkYNext = m_pkTemp;
    pkN000->m_pkYNext->m_pkXNext = m_pkTemp;

    // center
    AddNode(m_fXm,m_fYm,m_fZm,m_fFmmm,m_fGmmm,m_fHmmm);
    m_pkTemp->m_pkXNext = pkN100->m_pkYNext->m_pkZNext;
    m_pkTemp->m_pkYNext = pkN010->m_pkXNext->m_pkZNext;
    m_pkTemp->m_pkZNext = pkN001->m_pkXNext->m_pkYNext;
    pkN000->m_pkXNext->m_pkYNext->m_pkZNext = m_pkTemp;
    pkN000->m_pkXNext->m_pkZNext->m_pkYNext = m_pkTemp;
    pkN000->m_pkYNext->m_pkZNext->m_pkXNext = m_pkTemp;

    // Search the subocts for roots
    bool bResult =
        BisectRecurse(pkN000) ||
        BisectRecurse(pkN000->m_pkXNext) ||
        BisectRecurse(pkN000->m_pkYNext) ||
        BisectRecurse(pkN000->m_pkXNext->m_pkYNext) ||
        BisectRecurse(pkN000->m_pkZNext) ||
        BisectRecurse(pkN000->m_pkZNext->m_pkXNext) ||
        BisectRecurse(pkN000->m_pkZNext->m_pkYNext) ||
        BisectRecurse(pkN000->m_pkZNext->m_pkXNext->m_pkYNext);

    // entire suboct check failed, remove the nodes that were added

    // center
    delete pkN000->m_pkXNext->m_pkYNext->m_pkZNext;

    // faces
    delete pkN000->m_pkXNext->m_pkYNext;
    delete pkN000->m_pkYNext->m_pkZNext;
    delete pkN000->m_pkXNext->m_pkZNext;
    delete pkN001->m_pkXNext->m_pkYNext;
    delete pkN010->m_pkXNext->m_pkZNext;
    delete pkN100->m_pkYNext->m_pkZNext;

    // edges
    delete pkN000->m_pkXNext;  pkN000->m_pkXNext = pkN100;
    delete pkN000->m_pkYNext;  pkN000->m_pkYNext = pkN010;
    delete pkN000->m_pkZNext;  pkN000->m_pkZNext = pkN001;
    delete pkN001->m_pkYNext;  pkN001->m_pkYNext = pkN011;
    delete pkN001->m_pkXNext;  pkN001->m_pkXNext = pkN101;
    delete pkN010->m_pkZNext;  pkN010->m_pkZNext = pkN011;
    delete pkN100->m_pkZNext;  pkN100->m_pkZNext = pkN101;
    delete pkN010->m_pkXNext;  pkN010->m_pkXNext = pkN110;
    delete pkN100->m_pkYNext;  pkN100->m_pkYNext = pkN110;
    delete pkN011->m_pkXNext;  pkN011->m_pkXNext = pkN111;
    delete pkN101->m_pkYNext;  pkN101->m_pkYNext = pkN111;
    delete pkN110->m_pkZNext;  pkN110->m_pkZNext = pkN111;

    m_iLevel--;
    return bResult;
}
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
// explicit instantiation
//----------------------------------------------------------------------------
namespace Wml
{
template class WML_ITEM Bisect3<float>;
template class WML_ITEM Bisect3<double>;
}
//----------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -