# force

Returns the additional force of the volume id.

Changes this force.
Note:
May be used in a F5 function to modify an automatically managed force (for example by field, trajectories, ...).

Returns the additional force of vertex v of volume id.

Changes this force.
Note:
May be used in a F5 function to modify an automatically managed forces on vertices (for example by field, trajectories, ...).

### force(f,v)move vol(id)vol(t)rand(r)

If vol id has property mv=meta move built by interaction move vol, with mv=f0,f1,..., fi=flag of volume t+i (1: attached to volume id, 0: free) then
if(mv[i])==1 (volume t+i becomes free with probability r, mass vol(t+i)=m (1 by default)
else (volume t+i is free) then
force add vol(t+i)=force1=f*u,v with u=unit(g1-g0), g0=CG matrix vol(id), g1=CG matrix vol(t+i).
Note:
this feture allows manage volumes t+[0,np-1] initialy attached at volume id to become free according to a force f,v (used by example in the installation breath 2018), usually in a F2 func.
Options:
mass(m): mass of volume t+i (1 by default).

## force field

### force field(id)

Returns the force of the uniforme field id.

### force field(id)=x,y,z,v

Changes this force.

## force rota vol

### force rota vol(id)

Returns the torque exerced on the volume id.

### force rota vol(id)=f,v

Changes this torque.
Note:
In dynamic animation, volume id undergoes torque amplitude f and viscosity v (-1 to 0) about its axis matrix vol(id).
f=1 et v=-.01 are god values.

Returns the additional torque exerced on the volume id.

### force rota vol(id)=f,v

Note:
In dynamic animation, volume id undergoes torque amplitude f0+f about its axis matrix vol(id) (where f0 = force rota vol(id)): used by the collision detection process, may be used also in F5 function.

## force secy vol

### force secy(v) CG vol(id)=k

Computes:
`force vertex(secy(v))vol(id)=k*unit(p-g);`
with: `p=poi(s)vol(id);g=CG secy(v)vol(id);`
Default all sections.
Options:
alea(c1,c2): reproductible random multiplier in interval [c1,c2].
randoim(c1,c2): no reproductible random multiplier in interval [c1,c2].

## force vertex

### force vertex(v) vol(id)

Returns the force applied at vertex numbered v of volume id.

### force vertex(s)vol(id)=x,y,z

Does force vertex(v)vol(id)+=x,y,z (all vertices default).

### force vertex(v)CG vol(id)=k

Computes:
`force vertex(v)vol(id)+=k*unit(p-g);`
with: `p=poi(s)vol(id);g=CG vol(id);`
Default all vertices.
Options:
alea(c1,c2): reproductible random multiplier in interval [c1,c2].
random(c1,c2): no reproductible random multiplier in interval [c1,c2].

### force vertex(s)normal vol(id)=x,y,z

Does force vertex(v)vol(id)+=scalar product(nor,x,y,z) where nor=normal at vertex v of volume(id) (all vertices default).

### force vertex(s)normal speed vol(id)=c

Does force vertex(v)vol(id)+=c*(scalar product(nor,spe))*nor where nor=normal at vertex v of volume(id) and spe=speed of vertex v (all vertices default).
Note: To automatically manage dynamic animation must:
1) Have assigned masses to the vertices s.
2) Turn on yes dynamic
3) You can also give initial speed at vertices.

## force vol

### force vol(id)

Return force (fx,fy,fz,v) assigned to the volume id.

### force vol(id)=fx,fy,fz,v

Assignes (fx,fy,fz,v) to volume id.
Notes:
1) (fx,fy,fz) is the force vector, v is the viscosity.
2) The forces can be limited by limit force vol(id).

## Notes

A force is active on an object as long as it is applied to it either procedurally with call backs, either with trajectories, or automatically with springs, dynamic limits, etc.
Otherwise it is zero if yes force is active.