3
* $Id: IK_QJacobian.h,v 1.3 2005/08/28 13:06:41 blendix Exp $
4
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version. The Blender
10
* Foundation also sells licenses for use in proprietary software under
11
* the Blender License. See http://www.blender.org/BL/ for information
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
19
* You should have received a copy of the GNU General Public License
20
* along with this program; if not, write to the Free Software Foundation,
21
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24
* All rights reserved.
26
* The Original Code is: all of this file.
28
* Original Author: Laurence
29
* Contributor(s): Brecht
31
* ***** END GPL/BL DUAL LICENSE BLOCK *****
34
#ifndef NAN_INCLUDED_IK_QJacobian_h
36
#define NAN_INCLUDED_IK_QJacobian_h
40
#include "MT_Vector3.h"
45
typedef TNT::Matrix<MT_Scalar> TMatrix;
46
typedef TNT::Vector<MT_Scalar> TVector;
51
// Call once to initialize
52
void ArmMatrices(int dof, int task_size, int tasks);
53
void SetDoFWeight(int dof, MT_Scalar weight);
56
void SetBetas(int id, int size, const MT_Vector3& v);
57
void SetDerivatives(int id, int dof_id, const MT_Vector3& v);
61
MT_Scalar AngleUpdate(int dof_id) const;
62
MT_Scalar AngleUpdateNorm() const;
64
// DoF locking for inner clamping loop
65
void Lock(int dof_id, MT_Scalar delta);
68
bool ComputeNullProjection();
70
void Restrict(TVector& d_theta, TMatrix& null);
71
void SubTask(IK_QJacobian& jacobian);
78
int m_dof, m_task_size, m_tasks;
81
// the jacobian matrix and it's null space projector
82
TMatrix m_jacobian, m_jacobian_tmp;
85
/// the vector of intermediate betas
88
/// the vector of computed angle changes
91
/// space required for SVD computation
100
TVector m_svd_u_beta;
102
// space required for SDLS
106
TVector m_d_theta_tmp;
107
MT_Scalar m_min_damp;
109
// null space task vector
114
TVector m_weight_sqrt;