Forces in stack of axis (Snake)#
This notebook goes together with Basics : Forces
It also demonstrates that the force applied on a grand-grand-grand child of an axis correctly travels to the ultimate parent.
from DAVE import *
from DAVE.jupyter import *
DAVEcore version = 2.0 from c:\python\miniconda3\envs\book\Lib\site-packages\DAVEcore.cp311-win_amd64.pyd
! Blender not found - Blender can be installed from the microsoft windows store. if you have blender already and want to be able to use blender then please either:
- configure windows to open .blend files with blender automatically
- add the folder containing blender-launcher.exe to the PATH variable.
s = Scene()
a = s.new_frame('axis_0')
Create a whole stack of axis systems using a for-loop. Each axis system is created on top of the previous one and has an offset and rotation relative to it.
for i in range(10):
a = s.new_frame(f'axis_{i+1}', parent = a)
a.rotation = (1,10,5)
a.position = (-1, 3, 1.3)
s.print_node_tree()
axis_0 [Frame]
|-> axis_1 [Frame]
| |-> axis_2 [Frame]
| | |-> axis_3 [Frame]
| | | |-> axis_4 [Frame]
| | | | |-> axis_5 [Frame]
| | | | | |-> axis_6 [Frame]
| | | | | | |-> axis_7 [Frame]
| | | | | | | |-> axis_8 [Frame]
| | | | | | | | |-> axis_9 [Frame]
| | | | | | | | | |-> axis_10 [Frame]
p = s.new_point('point',parent=a)
f = s.new_force('force', parent = p)
f.force = (3,4,5)
show(s, camera_pos = (47.27125494760996, -2.2893149055027044, 11.008934429915707), lookat = (8.191845556784727, 11.628676713890059, 10.152255428376742))

Update() calculates the forces in the model
s.update()
We can now verify that the applied force on axis 0 is what we expect it to be:
The first three components should be identical to the force applied on the Point
f.force
(3.0, 4.0, 5.0)
s['axis_0'].applied_force[:3]
(3.0, 4.0, 5.0)
The applied moment should be identical to the cross product of the global position of the Point and the applied force
np.cross(p.global_position, f.force)
array([ 43.06199224, 89.61104132, -97.52602839])
s['axis_0'].applied_force[3:]
(43.06199223541866, 89.61104131667722, -97.52602839459297)