Мне кажется, такого интерфейса для базового элемента достаточно:
interface IBone
{
float angle; // in radians
float length;
IEnumerable<IBone> children;
}
Из соображений оптимизации и исключения всяких тригонометрий можно хранить не угол и длину, а смещение по Х и смещение по Y, хотя в полярной системе координат по мне так наглядней.
При необходимости рисования скелета делаем так:
void DrawBone(Graphics inGraphics, PointF inPosition, IBone inBone)
{
var boneEnd = inPosition + new SizeF((float)(inBone.length * Math.Cos(inBone.angle)),
(float)(inBone.length * Math.Sin(inBone.angle)));
inGraphics.DrawLine(Pens.Black, inPosition, boneEnd);
foreach (var next in inBone.children)
{
DrawBone(inGraphics, boneEnd, next);
}
}