/****************************************************/ /* Neck joint file -- 3 degree of freedom model */ /****************************************************/ #include name neck joints no_trackball /* This joint file was originally made 8/20/96 and uses re-normed vertebrae. The bones were normed so that the origins of cerv frames are at the posterior-inferior corner of the vertebrae, in the sagittal plane. Kinematics: centers of rotation for C2-C7 from Amevo, et al. *** transformed from vertebra-based coordinates to horizontal x-z plane, 5/23/97 *** other centers of rotation from Penning total range of motion from Youdas, et al. intervertebral motions defined from White and Panjabi Other changes: (1) clavicle and scapula were rotated and translated to be more anatomical, similar to the models of Wendy Murray and Jason Solbeck. (2) C1 vertebrae moved anteriorly 6 mm so that dens of C2 does not go through it (cerv1jnt). (3) skull moved superiorly 5 mm (aux1jnt) This model is described in the paper: Influence of muscle morphometry and moment arms on the moment-generating capacity of human neck muscles. Vasavada, AN, Li, S, and Delp, SL. Spine, 23:4:412:422, 1998. Other references: Amevo, B, Worth, D, Bogduk, N. Instantaneous axes of rotation of the typical cervical motion segments: A study in normal volunteers. Clin Biomech, 6:111- 117, 1991. Penning, L. Normal movements of the cervical spine. Am J Roentgen, 130:317-26, 1978. White, AA, Panjabi, MM. Clinical Biomechanics of the Spine. 2nd Ed. Philadelphia: JB Lippincott, 92-102, 1990. Youdas, JW, Garrett, TR, Suman, VJ, Bogard, CL, Hallman, HO, Carey, JR. Normal range of motion of the cervical spine: An initial goniometric study. Phys Ther, 72:770-80, 1992. */ /* modifications summer 2002: 1. replaced C7 bone file with C6 (old C7 had shape of thoracic vertebra) 2. rotated and translated for more realistic distance between vertebrae cerv7jnt: tx decreased, ty increased aux7jnt: tx increased, ty increased cerv6jnt: tx decreased, ty increased */ /*********************************************/ /* MATERIALS */ /*********************************************/ beginmaterial mat1 ambient 0.3000 0.3000 0.9000 diffuse 0.3000 0.3000 0.9000 specular 1.0000 1.0000 1.0000 endmaterial beginmaterial mat2 ambient 0.3000 0.3000 0.3000 diffuse 0.3000 0.3000 0.3000 specular 0.3000 0.3000 0.3000 endmaterial beginmaterial my_bone ambient 0.6000 0.6000 0.6000 diffuse 0.6000 0.4500 0.4000 specular 0.7000 0.5500 0.4000 shininess 10.0000 endmaterial beginmaterial arrow_mat ambient 0.4000 0.4000 0.7000 diffuse 0.3000 0.3000 0.5000 specular 0.3000 0.3000 0.5000 shininess 0.0000 endmaterial beginmaterial ligament_mat ambient 0.8000 0.3000 0.3000 diffuse 0.7000 0.2000 0.2000 specular 1.0000 0.5000 0.5000 shininess 20.0000 endmaterial /*beginmaterial def_max_muscle ambient 0.4 0.0 0.9 diffuse 0.7 0.0 0.0 specular 1.0 0.15 0.15 shininess 90.0 endmaterial */ beginmaterial orange_muscle ambient 0.7 0.3 0.0 diffuse 0.7 0.3 0.0 specular 0.7 0.3 0.0 shininess 120.0 endmaterial beginmaterial green_muscle ambient 0.0 0.8 0.1 diffuse 0.0 0.8 0.1 specular 0.0 0.8 0.1 shininess 90.0 endmaterial beginmaterial purple_muscle ambient 0.3 0.1 0.6 diffuse 0.3 0.1 0.6 specular 0.3 0.1 0.6 shininess 90.0 endmaterial beginmaterial lavender_muscle ambient 0.3 0.2 0.7 diffuse 0.3 0.2 0.7 specular 0.3 0.2 0.8 shininess 90.0 endmaterial beginmaterial blue_muscle ambient 0.0 0.0 1.0 diffuse 0.0 0.0 1.0 specular 0.0 0.0 1.0 shininess 90.0 endmaterial beginmaterial yellow_muscle ambient 0.7 0.7 0.1 diffuse 0.7 0.7 0.1 specular 0.7 0.7 0.1 shininess 90.0 endmaterial beginmaterial violet_muscle ambient 0.7 0.0 0.7 diffuse 0.7 0.0 0.7 specular 0.7 0.0 0.7 shininess 90.0 endmaterial beginmaterial pink_muscle ambient 0.7 0.3 0.5 diffuse 0.7 0.3 0.5 specular 0.7 0.3 0.5 shininess 90.0 endmaterial beginmaterial aqua_muscle ambient 0.0 0.6 0.6 diffuse 0.0 0.6 0.6 specular 0.0 0.6 0.6 shininess 90.0 endmaterial /*********************************************/ /* WORLDOBJECTS */ /*********************************************/ /*********************************************/ /* MODEL VIEWS */ /*********************************************/ /*********************************************/ /* SEGMENTS */ /*********************************************/ beginsegment ground endsegment beginsegment spine beginfiles tlspine.bin endfiles material arrow_mat endsegment beginsegment rscapula beginfiles rscapula.bin endfiles material ligament_mat endsegment beginsegment rclavicle beginfiles rclavicle.bin endfiles material ligament_mat endsegment beginsegment lscapula beginfiles lscapula.bin endfiles material ligament_mat endsegment beginsegment lclavicle beginfiles lclavicle.bin endfiles material ligament_mat endsegment beginsegment ribcage beginfiles ribcage.bin endfiles material arrow_mat endsegment /* aux segments used to define center of rotation */ beginsegment aux1 material my_bone endsegment beginsegment aux2 material my_bone endsegment beginsegment aux3 material my_bone endsegment beginsegment aux4 material my_bone endsegment beginsegment aux5 material my_bone endsegment beginsegment aux6 material my_bone endsegment beginsegment aux7 material my_bone endsegment beginsegment auxt1 material my_bone endsegment /* the following segments define the bones */ beginsegment skull beginfiles skull.bin endfiles material my_bone endsegment beginsegment jaw beginfiles jaw.bin endfiles material my_bone endsegment beginsegment cerv1 beginfiles cerv1.bin endfiles material my_bone endsegment beginsegment cerv2 beginfiles cerv2.bin endfiles material my_bone endsegment beginsegment cerv3 beginfiles cerv3.bin endfiles material my_bone endsegment beginsegment cerv4 beginfiles cerv4.bin endfiles material my_bone endsegment beginsegment cerv5 beginfiles cerv5.bin endfiles material my_bone endsegment beginsegment cerv6 beginfiles cerv6.bin endfiles material my_bone endsegment beginsegment cerv7 beginfiles rotatedcerv7 endfiles material my_bone endsegment /*********************************************/ /* JOINTS */ /*********************************************/ beginjoint spine /* spine coincides with ground */ segments ground spine order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.000000 ty constant 0.000000 tz constant 0.000000 r1 function f81(gndroll) r2 function f82(gndyaw) r3 function f83(gndpitch) endjoint beginjoint rscapulajnt /* shoulder redefined */ segments spine rscapula order t r1 r2 r3 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.036600 ty constant 0.362300 tz constant 0.183700 r1 constant 10.000000 r2 constant -17.000000 r3 constant -10.000000 endjoint beginjoint rclaviclejnt /* shoulder redefined */ segments spine rclavicle order t r1 r2 r3 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.011800 ty constant 0.335300 tz constant 0.022000 r1 constant 0.000000 r2 constant 8.000000 r3 constant 0.000000 endjoint beginjoint lscapulajnt /* shoulder redefined */ segments spine lscapula order t r1 r2 r3 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.036600 ty constant 0.362300 tz constant -0.183700 r1 constant -10.000000 r2 constant 17.000000 r3 constant -10.000000 endjoint beginjoint lclaviclejnt /* shoulder redefined */ segments spine lclavicle order t r1 r2 r3 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 -1.000000 tx constant -0.011800 ty constant 0.335300 tz constant -0.022000 r1 constant 0.000000 r2 constant -8.000000 r3 constant 0.000000 endjoint beginjoint ribcagejnt /* ribcage coincides with ground */ segments spine ribcage order t r1 r2 r3 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.000000 ty constant 0.000000 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint /* auxt1jnt from Penning */ beginjoint auxt1jnt /* translation from ground to CR for C7-T1 */ segments spine auxt1 order t r3 r1 r2 /* and rotation between C7-T1 */ axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.047500 ty constant 0.361300 tz constant 0.000000 r1 function f71(roll) r2 function f72(yaw) r3 function f73(pitch) endjoint /* cerv7jnt through cerv2jnt from Amevo, et al. */ beginjoint cerv7jnt /* translation to posterior-inferior pt on C7 */ segments auxt1 cerv7 /* (C7 inferior surface -15 deg from horiz) */ order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.00684 ty constant 0.005655 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint /* beginjoint cerv7jnt *OLD JNT* translation to posterior-inferior pt on C7 segments auxt1 cerv7 (C7 inferior surface -15 deg from horiz) order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.008180 ty constant 0.004190 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint */ beginjoint aux7jnt /* translation from C7 to CR for C6-C7 */ segments cerv7 aux7 order t r3 r1 r2 /* and rotation between C6-C7 */ axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.013256 ty constant 0.01238 tz constant 0.000000 r1 function f61(roll) r2 function f62(yaw) r3 function f63(pitch) endjoint /* beginjoint aux7jnt *OLD* translation from C7 to CR for C6-C7 segments cerv7 aux7 order t r3 r1 r2 and rotation between C6-C7 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.01380 ty constant 0.01384 tz constant 0.000000 r1 function f61(roll) r2 function f62(yaw) r3 function f63(pitch) endjoint */ beginjoint cerv6jnt /* translation to posterior-inferior pt on C6 */ segments aux7 cerv6 /* (C6 inferior surface -15 deg from horiz) */ order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.009419 ty constant 0.004065 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint /* beginjoint cerv6jnt *OLD* translation to posterior-inferior pt on C6 segments aux7 cerv6 (C6 inferior surface -15 deg from horiz) order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.00509 ty constant 0.00643 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint */ beginjoint aux6jnt /* translation from C6 to CR for C5-C6 */ segments cerv6 aux6 order t r3 r1 r2 /* and rotation between C5-C6 */ axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.009850 ty constant 0.00975 tz constant 0.000000 r1 function f51(roll) r2 function f52(yaw) r3 function f53(pitch) endjoint beginjoint cerv5jnt /* translation to posterior-inferior pt on C5 */ segments aux6 cerv5 /* (C5 inferior surface -13 deg from horiz) */ order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.005670 ty constant 0.008150 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint beginjoint aux5jnt /* translation to posterior-inferior pt on C5 */ segments cerv5 aux5 order t r3 r1 r2 /* and rotation between C4-C5 */ axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.008430 ty constant 0.00745 tz constant 0.000000 r1 function f41(roll) r2 function f42(yaw) r3 function f43(pitch) endjoint beginjoint cerv4jnt /* translation to posterior-inferior pt on C4 */ segments aux5 cerv4 /* (C4 inferior surface -12 deg from horiz) */ order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.005020 ty constant 0.011720 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint beginjoint aux4jnt /* translation from C4 to CR for C3-C4 */ segments cerv4 aux4 order t r3 r1 r2 /* and rotation between C3-C4 */ axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.007320 ty constant 0.006380 tz constant 0.000000 r1 function f31(roll) r2 function f32(yaw) r3 function f33(pitch) endjoint beginjoint cerv3jnt /* translation to posterior-inferior pt on C3 */ segments aux4 cerv3 /* (C3 inferior surface -4 deg from horiz) */ order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.004710 ty constant 0.009020 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint beginjoint aux3jnt /* translation from C3 to CR for C2-C3 */ segments cerv3 aux3 order t r3 r1 r2 /* and rotation between C2-C3 */ axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.005250 ty constant 0.005060 tz constant 0.000000 r1 function f21(roll) r2 function f22(yaw) r3 function f23(pitch) endjoint beginjoint cerv2jnt /* translation to posterior-inferior pt on C2 */ segments aux3 cerv2 /* (C2 inferior surface +5 deg from horiz) */ order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.005430 ty constant 0.011230 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint /* aux2jnt through aux1jnt from Penning */ beginjoint aux2jnt /* translation from C2 to CR for C1-C2 */ segments cerv2 aux2 order t r3 r1 r2 /* and rotation between C1-C2 */ axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.006890 ty constant 0.021280 tz constant 0.000000 r1 function f11(roll) r2 function f12(yaw) r3 function f13(pitch) endjoint beginjoint cerv1jnt /* translation to posterior-inferior pt on C1 */ segments aux2 cerv1 order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant -0.042450 ty constant -0.003520 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint beginjoint aux1jnt /* translation from C1 to CR for skull-C1 */ segments cerv1 aux1 order t r3 r1 r2 /* and rotation between skull-C1 */ axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.043350 ty constant 0.0149200 tz constant 0.000000 r1 function f1(roll) r2 function f2(yaw) r3 function f3(pitch) endjoint beginjoint skulljnt /* translation to origin of skull frame */ segments aux1 skull order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.000000 ty constant 0.000000 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint beginjoint jawjnt /* rotation of jaw rel to skull */ segments skull jaw order t r3 r1 r2 axis1 1.000000 0.000000 0.000000 axis2 0.000000 1.000000 0.000000 axis3 0.000000 0.000000 1.000000 tx constant 0.000000 ty constant 0.000000 tz constant 0.000000 r1 constant 0.000000 r2 constant 0.000000 r3 constant 0.000000 endjoint /*********************************************/ /* GENCOORDS */ /*********************************************/ /* gndpitch, gndroll and gndyaw used to position model on screen */ begingencoord gndpitch range -180.000000 180.000000 keys p_key rightmouse_button endgencoord begingencoord gndroll range -180.000000 180.000000 keys r_key rightmouse_button endgencoord begingencoord gndyaw range -180.000000 180.000000 keys y_key rightmouse_button endgencoord /* pitch, roll and yaw total ranges of motion from Youdas, et al. */ begingencoord pitch range -50.000000 72.000000 endgencoord begingencoord roll range -40.000000 40.000000 endgencoord begingencoord yaw range -75.000000 75.000000 endgencoord /*********************************************/ /* FUNCTIONS */ /*********************************************/ /* always listed in order of roll (about x), yaw (about y) and pitch (about z) */ /* functions obtained from data in Panjabi and White */ /* skull rel to C1 */ beginfunction f1 (-100.000000, -8.200000) ( 100.000000, 8.200000) endfunction beginfunction f2 (-100.000000, -6.500000) ( 100.000000, 6.500000) endfunction beginfunction f3 (-100.000000, -18.400000) ( 100.000000, 18.400000) endfunction /* C1 rel to C2 */ beginfunction f11 (-100.000000, -8.200000) ( 100.000000, 8.200000) endfunction beginfunction f12 (-100.000000, -51.900000) ( 100.000000, 51.900000) endfunction beginfunction f13 (-100.000000, -14.700000) ( 100.000000, 14.700000) endfunction /* C2 rel to C3 */ beginfunction f21 (-100.000000, -16.400000) ( 100.000000, 16.400000) endfunction beginfunction f22 (-100.000000, -3.900000) ( 100.000000, 3.900000) endfunction beginfunction f23 (-100.000000, -7.400000) ( 100.000000, 7.400000) endfunction /* C3 rel to C4 */ beginfunction f31 (-100.000000, -18.000000) ( 100.000000, 18.000000) endfunction beginfunction f32 (-100.000000, -9.100000) ( 100.000000, 9.100000) endfunction beginfunction f33 (-100.000000, -11.000000) ( 100.000000, 11.000000) endfunction /* C4 rel to C5 */ beginfunction f41 (-100.000000, -18.000000) ( 100.000000, 18.000000) endfunction beginfunction f42 (-100.000000, -9.100000) ( 100.000000, 9.100000) endfunction beginfunction f43 (-100.000000, -14.700000) ( 100.000000, 14.700000) endfunction /* C5 rel to C6 */ beginfunction f51 (-100.000000, -13.100000) ( 100.000000, 13.100000) endfunction beginfunction f52 (-100.000000, -9.100000) ( 100.000000, 9.100000) endfunction beginfunction f53 (-100.000000, -14.700000) ( 100.000000, 14.700000) endfunction /* C6 rel to C7 */ beginfunction f61 (-100.000000, -11.500000) ( 100.000000, 11.500000) endfunction beginfunction f62 (-100.000000, -7.800000) ( 100.000000, 7.800000) endfunction beginfunction f63 (-100.000000, -12.500000) ( 100.000000, 12.500000) endfunction /* C7 rel to T1 */ beginfunction f71 (-100.000000, -6.600000) ( 100.000000, 6.600000) endfunction beginfunction f72 (-100.000000, -2.600000) ( 100.000000, 2.600000) endfunction beginfunction f73 (-100.000000, -6.600000) ( 100.000000, 6.600000) endfunction /* entire model rel to ground */ beginfunction f81 (-180.000000,-180.000000) ( 180.000000, 180.000000) endfunction beginfunction f82 (-180.000000,-180.000000) ( 180.000000, 180.000000) endfunction beginfunction f83 (-180.000000,-180.000000) ( 180.000000, 180.000000) endfunction