本文整理汇总了C++中Pnt3f::dist方法的典型用法代码示例。如果您正苦于以下问题:C++ Pnt3f::dist方法的具体用法?C++ Pnt3f::dist怎么用?C++ Pnt3f::dist使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pnt3f
的用法示例。
在下文中一共展示了Pnt3f::dist方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: affect
bool TurbulenceParticleAffector::affect(ParticleSystemRefPtr System, Int32 ParticleIndex, const Time& elps)
{
if(getBeacon() != NULL)
{
Matrix BeaconToWorld(getBeacon()->getToWorld());
Vec3f translation, tmp;
Quaternion tmp2;
BeaconToWorld.getTransform(translation,tmp2,tmp,tmp2);
Pnt3f particlePos = System->getPosition(ParticleIndex);
Real32 distanceFromAffector = particlePos.dist(Pnt3f(translation.x(),translation.y(),translation.z()));
if((getMaxDistance() < 0.0) || (distanceFromAffector <= getMaxDistance())) //only affect the particle if it is in range
{
Real32 Xparam, Yparam, Zparam;
Pnt3f pos(System->getPosition(ParticleIndex));
getPerlinDistribution()->setPhase(getPhase()[0]);
Xparam = getPerlinDistribution()->generate(pos[0]);
getPerlinDistribution()->setPhase(getPhase()[1]);
Yparam = getPerlinDistribution()->generate(pos[1]);
getPerlinDistribution()->setPhase(getPhase()[2]);
Zparam = getPerlinDistribution()->generate(pos[2]);
Vec3f fieldAffect(Vec3f(Xparam, Yparam, Zparam));
fieldAffect = fieldAffect * (getAmplitude()*
(elps/(OSG::osgClamp<Real32>(1.0f,std::pow(distanceFromAffector,getAttenuation()),TypeTraits<Real32>::getMax()))));
System->setVelocity(System->getVelocity(ParticleIndex) + fieldAffect, ParticleIndex);
} // end distance conditional
} // end null beacon conditional
return false;
}
示例2: affect
bool VortexParticleAffector::affect(ParticleSystemRefPtr System, Int32 ParticleIndex, const Time& elps)
{
if(getBeacon() != NULL)
{
Matrix BeaconToWorld(getBeacon()->getToWorld());
Vec3f translation, tmp;
Quaternion tmp2;
BeaconToWorld.getTransform(translation,tmp2,tmp,tmp2);
Pnt3f particlePos = System->getPosition(ParticleIndex);
Real32 distanceFromAffector = particlePos.dist(Pnt3f(translation.x(),translation.y(),translation.z()));
if((getMaxDistance() < 0.0) || (distanceFromAffector <= getMaxDistance())) //only affect the particle if it is in range
{
Vec3f particleDirectionFromVortex(particlePos.x() - translation.x(), particlePos.y() - translation.y(), particlePos.z() - translation.z());
particleDirectionFromVortex = particleDirectionFromVortex.cross(getVortexAxis());
particleDirectionFromVortex.normalize();
particleDirectionFromVortex = particleDirectionFromVortex *
((-getMagnitude() *
elps)/OSG::osgClamp<Real32>(1.0f,std::pow(distanceFromAffector,getAttenuation()),TypeTraits<Real32>::getMax()));
System->setVelocity(particleDirectionFromVortex + System->getVelocity(ParticleIndex),ParticleIndex);
}
}
return false;
}
示例3: euclideanDistanceCost
Real32 OctreeAStarAlgorithm::euclideanDistanceCost(Octree::OTNodePtr node,
const Pnt3f& Location,
Real32 CostPerUnit)
{
Pnt3f Target;
node->getVolume().getCenter(Target);
return CostPerUnit * Location.dist(Target);
}
示例4: calcDistance
Real32 DistanceLOD::calcDistance(DrawActionBase *pAction,
const Matrix &mToWorld)
{
Matrix m;
m.invertFrom(mToWorld);
m.mult(pAction->getCameraToWorld());
Pnt3f eyepos;
m.mult(eyepos, eyepos);
_lastDist = eyepos.dist(getCenter());
return _lastDist;
}
示例5: createControlPoints
vector<Pnt3f> createControlPoints(int lineIndex, Pnt3f p1, Pnt3f p2, int thres){
vector<Pnt3f> result;
Vec3f vec = p2 - p1;
//cout << "start: "<<p1<<endl;
//cout << "end: "<<p2<<endl;
float len3D = p1.dist(p2);
//cout <<"len3d: "<< len3D<<endl;
//MY 2D-POINTS
GLdouble modelview[16], projection2[16];
GLint viewport[4];
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection2);
glGetIntegerv(GL_VIEWPORT, viewport);
double x,y,z;
gluProject(p1[0], p1[1], p1[2],
modelview, projection2, viewport,
&x,&y,&z);
Pnt2d tmp2d;
tmp2d[0] = x;
tmp2d[1] = y;
double x1,y1,z1;
gluProject(p2[0], p2[1], p2[2],
modelview, projection2, viewport,
&x1,&y1,&z1);
Pnt2d tmp2d1;
tmp2d1[0] = x1;
tmp2d1[1] = y1;
// length of 2D edge
float len2D = tmp2d.dist(tmp2d1);
float stepsize;
//if(len2D < 10)
// return result;
if(len2D > 100){
//cout << "len2d: " << len2D<<endl;
float perc = CHECK_PIXEL * 100 / len2D;
//cout << "perc: "<<perc<<endl;
stepsize = /*len3D */ perc / 100 / thres;}
else {
stepsize = 0.5 /thres;
}
// calculate length
//float length = sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]);
//cout << "::: " << length<<endl;
//if (len3D < 0.1)
// return result;
//every 5% of the line
//float stepsize = 0.5 / thres;
//float stepsize = (len3D * 0.05) / perc;
stepsize = stepsize;
//cout << "stepsize: " << stepsize<<endl;
float high = tmp2d[1]-tmp2d1[1];
//cout << "high: "<<high<<endl;
if(-10 < high && high < 10 && stepsize < 0.25){
//return result;
stepsize = stepsize / 2;
}
//float stepsize = random / thres;
for(int i(1);i*stepsize <= 1;i++)
{
//cout << "fuu: "<< i*stepsize<<endl;
//cout << " cp at ->"<< p1+i*step*vec;
Pnt3f np;
np[0] = p1[0] + (stepsize*i) * vec[0];
np[1] = p1[1] + (stepsize*i) * vec[1];
np[2] = p1[2] + (stepsize*i) * vec[2];
// stop - in case of longer line calc
//if((stepsize*i) >= len3D)
// break;
//cout << np[0] << " " << np[1] << " " << np[2] <<endl;
//_CONTROLPOINTS.push_back(np);
if(rand()%3 == 0)
result.push_back(np);
//if(thres>7)
// result.push_back(np);
//if(-10 < high < 10 && stepsize >= 0.25 )
// result.push_back(np);
}
//if(result.size() < 10)
// result.clear();
//.........这里部分代码省略.........