private double CalculateYOffset(ISingleDepthNodeRenderer nodeRenderer) { double yOffset = nodeRenderer.NodeIndex * NodeSpacing; // Find the distance from the origin. double diameter = Radius * 2; if (yOffset > diameter) { yOffset = (2 * diameter) - yOffset; // If the distance from the origin is great then the diameter, then the circle of nodes is coming back around. This is a simplification of (diameter - (distanceFromOrigin - diameter)). } return yOffset; }
private double CalculateYOffset(ISingleDepthNodeRenderer nodeRenderer) { double yOffset = nodeRenderer.NodeIndex * NodeSpacing; // Find the distance from the origin. double diameter = Radius * 2; if (yOffset > diameter) { yOffset = (2 * diameter) - yOffset; // If the distance from the origin is great then the diameter, then the circle of nodes is coming back around. This is a simplification of (diameter - (distanceFromOrigin - diameter)). } return(yOffset); }
public Point GetLocation(ISingleDepthNodeRenderer nodeRenderer) { double xOffset = CalculateXOffset(nodeRenderer); double yOffset = CalculateYOffset(nodeRenderer); xOffset -= nodeRenderer.Skin.NodeSkinWidth / 2; // Centre the node image. yOffset -= nodeRenderer.Skin.NodeSkinHeight / 2; // Centre the node image. Point nodeLocation = new Point(); nodeLocation.X = OriginX + xOffset; nodeLocation.Y = OriginY + yOffset; return(nodeLocation); }
/// <summary> /// Method represents the calculation sqrt(R^2 - (R - y)^2) where R is the radius and y is the 'DistanceFromOrigin'. /// </summary> /// <param name="nodeRenderer"></param> /// <returns></returns> private double CalculateXOffset(ISingleDepthNodeRenderer nodeRenderer) { double distanceFromOrigin = CalculateYOffset(nodeRenderer); double ySquared = Radius - distanceFromOrigin; // (R - y) ySquared = ySquared * ySquared; // (R - y) ^ 2 double rSquared = Radius * Radius; // R ^ 2 double xSquared = rSquared - ySquared; // R^2 - (R - y)^2 double xOffset = Math.Sqrt(xSquared); if (nodeRenderer.NodeIndex > (nodeRenderer.NodeCount / 2)) { xOffset = -1 * xOffset; } return(xOffset); }
/// <summary> /// Method represents the calculation sqrt(R^2 - (R - y)^2) where R is the radius and y is the 'DistanceFromOrigin'. /// </summary> /// <param name="nodeRenderer"></param> /// <returns></returns> private double CalculateXOffset(ISingleDepthNodeRenderer nodeRenderer) { double distanceFromOrigin = CalculateYOffset(nodeRenderer); double ySquared = Radius - distanceFromOrigin; // (R - y) ySquared = ySquared * ySquared; // (R - y) ^ 2 double rSquared = Radius * Radius; // R ^ 2 double xSquared = rSquared - ySquared; // R^2 - (R - y)^2 double xOffset = Math.Sqrt(xSquared); if (nodeRenderer.NodeIndex > (nodeRenderer.NodeCount / 2)) { xOffset = -1 * xOffset; } return xOffset; }
public Point GetLocation(ISingleDepthNodeRenderer nodeRenderer) { double xOffset = CalculateXOffset(nodeRenderer); double yOffset = CalculateYOffset(nodeRenderer); xOffset -= nodeRenderer.Skin.NodeSkinWidth / 2; // Centre the node image. yOffset -= nodeRenderer.Skin.NodeSkinHeight / 2; // Centre the node image. Point nodeLocation = new Point(); nodeLocation.X = OriginX + xOffset; nodeLocation.Y = OriginY + yOffset; return nodeLocation; }