Пример #1
0
func NewTwist(w, q vec.Vectorer) Twister {
	t := new(twist)
	t.w = w // set the axis of motion of joint
	t.q = q // set the position a point on the axis of joint
	t.v = vec.Zeros(AxisLength)
	t.v.Cross(q, w) // qxw

	t.t = mesh.Gen(nil, TwistLength, 1)
	tvec := t.t.Vec().Slice()
	copy(tvec[3:], w.Slice())
	copy(tvec[:3], t.v.Slice())
	return t
}
Пример #2
0
// SetCol sets the c'th column of m with vector, v
func (m *mesh) SetCol(v vec.Vectorer, c int) {
	for i, e := range v.Slice() {
		m.elems.SetAt(i*m.off+c, e)
	}
}
Пример #3
0
// SetRow sets the r'th column of m with vector, v
func (m *mesh) SetRow(v vec.Vectorer, r int) {
	off := r * m.off
	for j, e := range v.Slice() {
		m.elems.SetAt(off+j, e)
	}
}
Пример #4
0
// GetCol returns the c'th column of m into vector, v
// of length equal to no. of rows of mesh
func (m mesh) GetCol(v vec.Vectorer, c int) {
	off := m.off
	for i := range v.Slice() {
		v.SetAt(i, m.elems.GetAt(i*off+c))
	}
}
Пример #5
0
// GetRow returns the r'th column of m into vector, v
// of length equal to no. of cols of mesh
func (m mesh) GetRow(v vec.Vectorer, r int) {
	off := r * m.off
	for j := range v.Slice() {
		v.SetAt(j, m.elems.GetAt(off+j))
	}
}
Пример #6
0
// SetDiag puts the diagonal, d into the mesh
// m must be a square matrix
func (m *mesh) SetDiag(d vec.Vectorer) {
	for e := range d.Slice() {
		m.SetAtNode(d.GetAt(e), e, e)
	}
}
Пример #7
0
// GetDiag puts the diagonal of the mesh into
// the vector, m must be a square matrix
func (m mesh) GetDiag(d vec.Vectorer) {
	for e := range d.Slice() {
		d.SetAt(e, m.GetAtNode(e, e))
	}
}