void CreateRingPlatform(Vector3 position, Box ringBoxShape, BodyDescription bodyDescription, float radius) { var innerCircumference = (float)Math.PI * 2 * (radius - ringBoxShape.HalfLength); var boxCount = (int)(0.95f * innerCircumference / ringBoxShape.Height); float increment = MathHelper.TwoPi / boxCount; for (int i = 0; i < boxCount; i++) { var angle = i * increment; bodyDescription.Pose = new RigidPose( position + new Vector3(-(float)Math.Cos(angle) * radius, ringBoxShape.HalfWidth, (float)Math.Sin(angle) * radius), Quaternion.Concatenate(Quaternion.CreateFromAxisAngle(Vector3.UnitZ, (float)Math.PI * 0.5f), Quaternion.CreateFromAxisAngle(Vector3.UnitY, angle + (float)Math.PI * 0.5f))); Simulation.Bodies.Add(bodyDescription); } }