private static void RemoveOneExtraPoint(List <PointF> allPoints, List <PointF> keyPoints) { List <PointF> pointsFromRemove = new List <PointF>(); foreach (PointF point in allPoints) { int keyPos = -1; for (int i = 0; i < keyPoints.Count; i++) { if (keyPoints[i].X == point.X && keyPoints[i].Y == point.Y) { keyPos = i; break; } } if (keyPos == -1) { pointsFromRemove.Add(point); } } int pos = StaticRandom.RandomInteger(0, pointsFromRemove.Count); PointF pointToRemove = pointsFromRemove[pos]; allPoints.Remove(pointToRemove); //pointsFromRemove.RemoveAt(pos); //pos = StaticRandom.RandomInteger(0, pointsFromRemove.Count); //pointToRemove = pointsFromRemove[pos]; //allPoints.Remove(pointToRemove); }
private IntPtr GetWindowUnderCursor(Point position) { StringBuilder wndText = new StringBuilder(256); Random rnd = new Random(); int countOfTry = 10; IntPtr originalHandle = IntPtr.Zero; IntPtr mainWindow = IntPtr.Zero; IntPtr window = IntPtr.Zero; originalHandle = Win32.WindowFromPoint(position); for (int i = 0; i < countOfTry; i++) { window = Win32.WindowFromPoint(position); mainWindow = Win32.GetAncestor(window, Win32.GA_ROOT); Win32.GetWindowText(mainWindow, wndText, 256); if (wndText.Length != 0) { break; } int xDeviation = StaticRandom.RandomInteger(2, 5); int yDeviation = StaticRandom.RandomInteger(2, 5); position = new Point(position.X + xDeviation, position.Y + yDeviation); } if (mainWindow != IntPtr.Zero) { return(mainWindow); } else { return(originalHandle); } }
/// <summary> /// Creates input and output for nerual network /// </summary> /// <param name="input"></param> /// <param name="output"></param> private void CreateInputOutput(out double[][] input, out double[][] output) { int maxPos = -1; string[] positions = new string[m_outputSize]; List <ClassicCurve> curves = new List <ClassicCurve>(m_curves.Values); for (int i = 0; i < positions.Length; i++) { positions[i] = string.Empty; } for (int i = 0; i < curves.Count; i++) { int nnIndex = curves[i].NnIndex; positions[nnIndex] = curves[i].ID; maxPos = maxPos > nnIndex ? maxPos : nnIndex; } maxPos++; //we need to increment the position so we can reach it in a cycle (as on this position some gesture actualy is!) List <double[]> inputList = new List <double[]>(); List <double[]> outputList = new List <double[]>(); for (int i = 0; i < maxPos; i++) { if (positions[i] != string.Empty) { inputList.AddRange(m_curveSets[positions[i]].TrainingSet); } else { inputList.AddRange(MyCurve.EmptyTrainingSet()); } } //input = inputList.ToArray(); int k = -1; int trainingSize = m_setSize * maxPos;//m_curves.Count; //output = new double[trainingSize][]; for (int i = 0; i < trainingSize; i++) { if (i % m_setSize == 0) { k++; } double[] oneOutput = new double[m_outputSize]; //output[i] = new double[m_outputSize]; if (positions[k] != string.Empty) { //output[i][m_curves[positions[k]].NnIndex] = 1; oneOutput[m_curves[positions[k]].NnIndex] = 1; } outputList.Add(oneOutput); } //add false patterns //double[] emptyOutput = new double[m_outputSize]; //foreach (MyCurve c in m_curveSets.Values) //{ // double[][] falsePatterns = c.GenerateFalsePatterns(); // for (int i = 0; i < falsePatterns.Length; i++) // { // inputList.Add(falsePatterns[i]); // outputList.Add(emptyOutput); // } //} //shuffle it List <double[]> tempInput = inputList; //new List<double[]>(input); List <double[]> tempOutput = outputList; //new List<double[]>(output); List <double[]> randInput = new List <double[]>(); List <double[]> randOutput = new List <double[]>(); while (tempInput.Count > 0) { int i = StaticRandom.RandomInteger(0, tempInput.Count); randInput.Add(tempInput[i]); randOutput.Add(tempOutput[i]); tempInput.RemoveAt(i); tempOutput.RemoveAt(i); } input = randInput.ToArray(); output = randOutput.ToArray(); }