public static void InterpretOutput(ThinkingAgent agent, IWorld world, Vector2D output) { var centerOfGravity = world.Sheep.Select(x => x.Position).Center(); var vCentered = new Vector2D( centerOfGravity.X - agent.Position.X, centerOfGravity.Y - agent.Position.Y); var vCenteredLength = vCentered.Length; var sin = vCentered.Y / vCenteredLength; var cos = vCentered.X / vCenteredLength; if (double.IsNaN(sin)) { sin = 0.0; } if (double.IsNaN(cos)) { cos = 1.0; } var vRotated = new Vector2D( output.X * cos - output.Y * sin, output.X * sin + output.Y * cos); agent.decision = vRotated; agent.Move(); }