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


C++ Simplex::atB方法代码示例

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


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

示例1: SetToSimplex

	void SetToSimplex(Simplex& s){
		data.clear();
		for(unsigned int i = 0; i< s.GetSize(); i++){
			data.push_back(s[i]);
			dataA.push_back(s.atA(i));
			dataB.push_back(s.atB(i));
		}
	}
开发者ID:scottc52,项目名称:SpaceGame,代码行数:8,代码来源:CollisionDetection.cpp

示例2: 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;

}
开发者ID:scottc52,项目名称:SpaceGame,代码行数:41,代码来源:CollisionDetection.cpp


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