//Converts a pair of screen coordinates to graph coordinates private void ScreenToGraph(double xScreen, double yScreen, out double xGraph, out double yGraph) { double[] rScreen = new double[3]; double[] rGraph = new double[3]; rScreen[0] = xScreen; rScreen[1] = yScreen; rScreen[2] = 1.0; NuGenMath.MatrixMultiply3x1(rGraph, screenToGraph, rScreen); xGraph = rGraph[0]; yGraph = rGraph[1]; }
//Converts a pair of graph coordinates to screen coordinates private void GraphToScreen(double xGraph, double yGraph, out double xScreen, out double yScreen) { if (!(ValidAxes || ValidScale)) { throw new InvalidOperationException("No valid axes or scale"); } double[] rScreen = new double[3]; double[] rGraph = new double[3]; rGraph[0] = xGraph; rGraph[1] = yGraph; rGraph[2] = 1.0; NuGenMath.MatrixMultiply3x1(rScreen, graphToScreen, rGraph); xScreen = rScreen[0]; yScreen = rScreen[1]; }
public static void Test() { double[,] r_screen = new double[3, 3]; double[][] r_graph = { new double[3], new double[3], new double[3] }; r_screen[0, 0] = 69; r_screen[1, 0] = 68; r_screen[2, 0] = 626; r_screen[0, 1] = 577; r_screen[1, 1] = 84; r_screen[2, 1] = 576; r_screen[0, 2] = 1; r_screen[1, 2] = 1; r_screen[2, 2] = 1; r_graph[0][0] = 0; r_graph[1][0] = 0; r_graph[2][0] = 30; r_graph[0][1] = -1; r_graph[1][1] = 1; r_graph[2][1] = -1; r_graph[0][2] = 1; r_graph[1][2] = 1; r_graph[2][2] = 1; double[,] s2g = new double[3, 3]; double[,] g2s = new double[3, 3]; ScreenToGraph(r_graph, r_screen, s2g, g2s); double[] rScreen = new double[3]; double[] rGraph = new double[3]; rScreen[0] = 300; rScreen[1] = 300; rScreen[2] = 1.0; NuGenMath.MatrixMultiply3x1(rGraph, s2g, rScreen); double xGraph = rGraph[0]; double yGraph = rGraph[1]; }