本文整理汇总了C++中VectorX::block_vector方法的典型用法代码示例。如果您正苦于以下问题:C++ VectorX::block_vector方法的具体用法?C++ VectorX::block_vector怎么用?C++ VectorX::block_vector使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VectorX
的用法示例。
在下文中一共展示了VectorX::block_vector方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PBDProject
void AttachmentConstraint::PBDProject(VectorX& x, const SparseMatrix& inv_mass, unsigned int ns)
{
// LOOK
ScalarType k_prime = 1 - std::pow(1-*(m_p_pbd_stiffness), 1.0/ns);
EigenVector3 p = x.block_vector(m_p0);
EigenVector3 dp = m_fixd_point-p;
x.block_vector(m_p0) += k_prime * dp;
}
示例2: EvaluateGradient
// sping gradient: k*(current_length-rest_length)*current_direction;
void SpringConstraint::EvaluateGradient(const VectorX& x, VectorX& gradient)
{
// TODO
//EigenVector3 g_i = (*(m_p_stiffness))*(x.block_vector(m_p0) - m_fixd_point);
//gradient.block_vector(m_p0) += g_i;
EigenVector3 p1=x.block_vector(m_p1);
EigenVector3 p2=x.block_vector(m_p2);
float currentLength=(p1-p2).norm();
float force=(*this->m_p_stiffness)*(currentLength-this->m_rest_length);
EigenVector3 n1=p1-p2,n2=p2-p1;
n1.normalize();n2.normalize();
gradient.block_vector(m_p1)+=n1*force;
gradient.block_vector(m_p2)+=n2*force;
}