本文整理汇总了C++中Simplex::at方法的典型用法代码示例。如果您正苦于以下问题:C++ Simplex::at方法的具体用法?C++ Simplex::at怎么用?C++ Simplex::at使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Simplex
的用法示例。
在下文中一共展示了Simplex::at方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ResolveContact
//////////////////////////////////////////////////////////////////////////////////////////
//
// RESOLVE CONTACT DATA USING BARYCENTRIC COORDINATES
//
////////////////////////////////////////////////////////////////////////////////////////////
Vec3f ResolveContact(Simplex& P){
/////////////////////////////////////////////////
// Barycentrics: Use them for A and B.
///////////////////////////////////////////////
assert(P.GetSize() > 0);
Vec3f contactA, contactB;
if(P.GetSize() == 1){
contactA = P.atA(0);
contactB = P.atB(0);
}else if(P.GetSize() == 2){//linear interpo;
Vec3f A = P.at(1);
Vec3f B = P.at(0);
Vec3f AB = B-A;
float v = (dot(AB, -A))/(dot(AB, -A)+ dot(-AB, -B));
contactA = P.atA(1)*(1-v) + P.atA(0)*v;
contactB = P.atB(1)*(1-v) + P.atB(0)*v;
}else{//triangle
Vec3f A = (P.at(2));
Vec3f B = (P.at(1));
Vec3f C = (P.at(0));
Vec3f N = cross(B-A,C-A);
Vec3f Nab = cross(N, B-A);
Vec3f Nac = cross(N, C-A);
float v = (dot(-A, Nac))/(dot(B-A,Nac));
float w = (dot(-A, Nab))/(dot(C-A, Nab));
float u = 1 - v - w;
contactA = P.atA(2)*u + P.atA(1)*v + P.atA(0)*w;
contactB = P.atB(2)*u + P.atB(1)*v + P.atB(0)*w;
}
Vec3f norm = contactB-contactA;
norm.normalize();
return contactA;
}
示例2: ClosestIn
///////////////////////////////////////////////////////////////////
// CLOSEST IN
///////////////////////////////////////////////////////////////////
Vec3f ClosestIn(Simplex& P){
assert(P.GetSize() > 0);
if(P.GetSize() == 1) return P.at(0);
else if(P.GetSize() == 2){ //We have a line.
Vector3f AO(-P.at(1)[0], -P.at(1)[1], -P.at(1)[2]);
Vector3f AB(P.at(0)[0] - P.at(1)[0], P.at(0)[1] - P.at(1)[1], P.at(0)[2] - P.at(1)[2]);
Vector3f BO(-P.at(0)[0], -P.at(0)[1], -P.at(0)[2]);
float v = (AB.dot(AO))/(AB.dot(AO) + (-AB).dot(BO));
return (P.at(1)*(1-v) + (P.at(0))*v);
}else{//We have a triangle
Vector3f A(P.at(2)[0], P.at(2)[1], P.at(2)[2]);
Vector3f B(P.at(1)[0], P.at(1)[1], P.at(1)[2]);
Vector3f C (P.at(0)[0], P.at(0)[1], P.at(0)[2]);
Vector3f AB = B-A;
Vector3f AC = C-A;
Vector3f N = AB.cross(AC);
Vector3f Nab = N.cross(AB);
Vector3f Nac = N.cross(AC);
float v = (-A).dot(Nac)/((AB).dot(Nac));
float w = (-A).dot(Nab)/((AC).dot(Nab));
float u = 1-v-w;
return (P.at(2)*u + P.at(1)*v + P.at(0)*w);
}
}