internal void GetEffectivePosteriorPatientOrientation(out string row, out string column)
{
row = column = string.Empty;
if (_imagePosterior == null)
return;
// convert the image posterior vector to screen coordinates to find the screen posterior vector
var screenPosterior2D = ConvertToDestination(new SizeF(_imagePosterior.X, _imagePosterior.Y));
var screenPosterior = new Vector3D(screenPosterior2D.Width, screenPosterior2D.Height, 0);
// since we only deal with orthogonal rotations, getting the unit vector and rounding values will effectively remove any floating point error
screenPosterior = screenPosterior.Normalize();
screenPosterior = new Vector3D((int) Math.Round(screenPosterior.X), (int) Math.Round(screenPosterior.Y), 0);
if (screenPosterior.Y > 0)
column = _orientationPosterior.ToString(CultureInfo.InvariantCulture);
else if (screenPosterior.Y < 0)
column = _orientationAnterior.ToString(CultureInfo.InvariantCulture);
if (screenPosterior.X > 0)
row = _orientationPosterior.ToString(CultureInfo.InvariantCulture);
else if (screenPosterior.X < 0)
row = _orientationAnterior.ToString(CultureInfo.InvariantCulture);
}