本文整理汇总了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;
}