当前位置: 首页>>代码示例>>C++>>正文


C++ Flow::lookupFlow方法代码示例

本文整理汇总了C++中Flow::lookupFlow方法的典型用法代码示例。如果您正苦于以下问题:C++ Flow::lookupFlow方法的具体用法?C++ Flow::lookupFlow怎么用?C++ Flow::lookupFlow使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Flow的用法示例。


在下文中一共展示了Flow::lookupFlow方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: r

std::deque<Vector> FlowMath::computeStreamlineEuler(const Flow& flow,
                                           const Vector& r0,
                                           const float length,
                                           const float stepwidth,
                                           int* const startIndex,
                                           const tgt::vec2& thresholds)
{
    // N: number of partitions
    //
    const float h = fabsf(stepwidth);
    float fn = ceilf(fabsf(length) / h);
    const unsigned int N = (length != 0.0f) ? static_cast<unsigned int>(fn) : 0;

    Vector r(r0), r_(r0);

    std::deque<Vector> points;
    points.push_back(r0);
    int indexR0 = 0;

    bool lookupPos = true;  // integrate along the streamline in positive direction?
    bool lookupNeg = true;  // integrate along the streamline in negative direction?
    bool useThresholds = (thresholds != tgt::vec2::zero);

    for (unsigned int i = 0; ((N == 0) || (i < N)) ; ++i) {
        if (lookupPos == true) {
            const Vector& v = flow.lookupFlow(r);
            if (useThresholds == true) {
                float magnitude = tgt::length(v);
                if ((magnitude < thresholds.x) || (magnitude > thresholds.y)) {
                    lookupPos = false;
                    break;
                }
            }

            if (v != Vector::zero) {
                r += normalize(v) * h;

                lookupPos = flow.isInsideBoundings(r);
                if (r == points.back()) // in case of no progress on streamline in this direction...
                    lookupPos = false;
                else if (lookupPos == true)
                    points.push_back(r);
            } else
                lookupPos = false;
        }

        if (lookupNeg == true) {
            const Vector& v = flow.lookupFlow(r_);
            if (useThresholds == true) {
                float magnitude = tgt::length(v);
                if ((magnitude < thresholds.x) || (magnitude > thresholds.y)) {
                    lookupNeg = false;
                    break;
                }
            }

            if (v != Vector::zero) {
                r_ -= normalize(v) * h;

                lookupNeg = flow.isInsideBoundings(r_);
                if (r_ == points.front()) // in case of no progress on streamline in this direction...
                    lookupNeg = false;
                else if (lookupNeg == true) {
                    points.push_front(r_);
                    ++indexR0;
                }
            } else
                lookupNeg = false;
        }

        if ((lookupPos == false) && (lookupNeg == false))
            break;
    }   // for ( ; ; ++i)

    if (startIndex != 0)
        *startIndex = indexR0;

    return points;
}
开发者ID:151706061,项目名称:Voreen,代码行数:79,代码来源:flowmath.cpp


注:本文中的Flow::lookupFlow方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。