本文整理汇总了C++中Fvector::similar方法的典型用法代码示例。如果您正苦于以下问题:C++ Fvector::similar方法的具体用法?C++ Fvector::similar怎么用?C++ Fvector::similar使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Fvector
的用法示例。
在下文中一共展示了Fvector::similar方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HashMap
u32 FindNode(Fvector& vAt)
{
float eps = 0.05f;
vecDW& V = HashMap(vAt);
for (vecDW_it I=V.begin(); I!=V.end(); I++)
{
vertex& N = g_nodes[*I];
if (vAt.similar(N.Pos,eps)) return *I;
}
return InvalidNode;
}
示例2: Position
void CObject::spatial_update (float eps_P, float eps_R)
{
//
BOOL bUpdate=FALSE;
if (PositionStack.empty())
{
// Empty
bUpdate = TRUE;
PositionStack.push_back (SavedPosition());
PositionStack.back().dwTime = Device.dwTimeGlobal;
PositionStack.back().vPosition = Position();
} else {
if (PositionStack.back().vPosition.similar(Position(),eps_P))
{
// Just update time
PositionStack.back().dwTime = Device.dwTimeGlobal;
} else {
// Register _new_ record
bUpdate = TRUE;
if (PositionStack.size()<4) {
PositionStack.push_back (SavedPosition());
} else {
PositionStack[0] = PositionStack[1];
PositionStack[1] = PositionStack[2];
PositionStack[2] = PositionStack[3];
}
PositionStack.back().dwTime = Device.dwTimeGlobal;
PositionStack.back().vPosition = Position();
}
}
if (bUpdate) {
spatial_move ();
} else {
if (spatial.node_ptr)
{ // Object registered!
if (!fsimilar(Radius(),spatial.sphere.R,eps_R)) spatial_move();
else {
Fvector C;
Center (C);
if (!C.similar(spatial.sphere.P,eps_P)) spatial_move();
}
// else nothing to do :_)
}
}
}
示例3:
void Vision::o_trace (Fvector& P, float dt, float vis_threshold) {
RQR.r_clear ();
xr_vector<feel_visible_Item>::iterator I=feel_visible.begin(),E=feel_visible.end();
for (; I!=E; I++){
if (0==I->O->CFORM()) { I->fuzzy = -1; continue; }
// verify relation
if (positive(I->fuzzy) && I->O->Position().similar(I->cp_LR_dst,lr_granularity) && P.similar(I->cp_LR_src,lr_granularity))
continue;
I->cp_LR_dst = I->O->Position();
I->cp_LR_src = P;
// Fetch data
Fvector OP;
Fmatrix mE;
const Fbox& B = I->O->CFORM()->getBBox();
const Fmatrix& M = I->O->XFORM();
// Build OBB + Ellipse and X-form point
Fvector c,r;
Fmatrix T,mR,mS;
B.getcenter (c);
B.getradius (r);
T.translate (c);
mR.mul_43 (M,T);
mS.scale (r);
mE.mul_43 (mR,mS);
mE.transform_tiny (OP,I->cp_LP);
I->cp_LAST = OP;
//
Fvector D;
D.sub (OP,P);
float f = D.magnitude();
if (f>fuzzy_guaranteed){
D.div (f);
// setup ray defs & feel params
collide::ray_defs RD (P,D,f,CDB::OPT_CULL,collide::rq_target(collide::rqtStatic|collide::rqtObstacle));
SFeelParam feel_params (this,&*I,vis_threshold);
// check cache
if (I->Cache.result&&I->Cache.similar(P,D,f)){
// similar with previous query
feel_params.vis = I->Cache_vis;
// Log("cache 0");
}else{
float _u,_v,_range;
if (CDB::TestRayTri(P,D,I->Cache.verts,_u,_v,_range,false)&&(_range>0 && _range<f)) {
feel_params.vis = 0.f;
// Log("cache 1");
}else{
// cache outdated. real query.
VERIFY(!fis_zero(RD.dir.square_magnitude()));
if (g_pGameLevel->ObjectSpace.RayQuery (RQR, RD, feel_vision_callback, &feel_params, NULL, NULL)) {
I->Cache_vis = feel_params.vis ;
I->Cache.set (P,D,f,TRUE ) ;
}else{
I->Cache.set (P,D,f,FALSE) ;
}
// Log("query");
}
}
// Log("Vis",feel_params.vis);
if (feel_params.vis<feel_params.vis_threshold){
// INVISIBLE, choose next point
I->fuzzy -= fuzzy_update_novis*dt;
clamp (I->fuzzy,-.5f,1.f);
I->cp_LP.random_dir ();
I->cp_LP.mul (.7f);
}else{
// VISIBLE
I->fuzzy += fuzzy_update_vis*dt;
clamp (I->fuzzy,-.5f,1.f);
}
}
else {
// VISIBLE, 'cause near
I->fuzzy += fuzzy_update_vis*dt;
clamp (I->fuzzy,-.5f,1.f);
}
}
}
示例4: set_min_max
void SPHBonesData::set_min_max(const Fvector& _min, const Fvector& _max)
{
VERIFY( !_min.similar(_max) );
m_min = _min;
m_max = _max;
}