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


C++ dgVector::GetSignMask方法代码示例

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


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

示例1: IntegrateBodiesVelocity

void dgSolver::IntegrateBodiesVelocity(dgInt32 threadID)
{
	dgVector speedFreeze2(m_world->m_freezeSpeed2 * dgFloat32(0.1f));
	dgVector freezeOmega2(m_world->m_freezeOmega2 * dgFloat32(0.1f));

	dgVector timestep4(m_timestepRK);
	dgJacobian* const internalForces = &m_world->GetSolverMemory().m_internalForcesBuffer[0];

	const dgInt32 step = m_threadCounts;;
	const dgInt32 bodyCount = m_cluster->m_bodyCount - 1;
	for (dgInt32 j = threadID; j < bodyCount; j += step) {
		const dgInt32 i = j + 1;
		dgDynamicBody* const body = (dgDynamicBody*)m_bodyArray[i].m_body;
		dgAssert(body->m_index == i);

		if (body->IsRTTIType(dgBody::m_dynamicBodyRTTI)) {
			const dgJacobian& forceAndTorque = internalForces[i];
			const dgVector force(body->m_externalForce + forceAndTorque.m_linear);
			const dgVector torque(body->m_externalTorque + forceAndTorque.m_angular);

			//const dgVector velocStep((force.Scale(body->m_invMass.m_w)) * timestep4);
			//const dgVector omegaStep((body->m_invWorldInertiaMatrix.RotateVector(torque)) * timestep4);
			const dgJacobian velocStep(body->IntegrateForceAndToque(force, torque, timestep4));

			if (!body->m_resting) {
				//body->m_veloc += velocStep;
				//body->m_omega += omegaStep;
				body->m_veloc += velocStep.m_linear;
				body->m_omega += velocStep.m_angular;
			} else {
				//const dgVector velocStep2(velocStep.DotProduct(velocStep));
				//const dgVector omegaStep2(omegaStep.DotProduct(omegaStep));
				const dgVector velocStep2(velocStep.m_linear.DotProduct(velocStep.m_linear));
				const dgVector omegaStep2(velocStep.m_angular.DotProduct(velocStep.m_angular));

				const dgVector test(((velocStep2 > speedFreeze2) | (omegaStep2 > speedFreeze2)) & m_negOne);
				const dgInt32 equilibrium = test.GetSignMask() ? 0 : 1;
				body->m_resting &= equilibrium;
			}
			dgAssert(body->m_veloc.m_w == dgFloat32(0.0f));
			dgAssert(body->m_omega.m_w == dgFloat32(0.0f));
		}
	}
}
开发者ID:MADEAPPS,项目名称:newton-dynamics,代码行数:44,代码来源:dgSolver.cpp


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