private void TraceCharacters(List<int> substring_list, int p1, int p3, int min_angle)
{
if (_char_list[p3].neighbors.Count <= 0) return;
double max_angle = -1;
int max_angle_idx = 0;
if (_debug) Console.WriteLine("*****Trace:Char " + p1 + " and " + p3);
MyConnectedComponentsAnalysisFast.MyBlob char1 = _char_list[p3];
for (int i = 0; i < char1.neighbors.Count; i++)
{
int idx = char1.neighbors[i];
if (_char_list[idx].sizefilter_included)
{
double angel = CosAngel(p1, idx, p3);
if (angel > max_angle) { max_angle = angel; max_angle_idx = idx; }
}
}
if (max_angle_idx >= 0 && max_angle > min_angle)
{
substring_list.Add(max_angle_idx);
_char_list[max_angle_idx].neighbors.Remove(p3);
_char_list[p3].neighbors.Remove(max_angle_idx);
if (_debug) Console.WriteLine(" Found: " + max_angle_idx + " Angle: " + max_angle + " Min Angle: " + min_angle);
if (_char_list[p3].split_here || _char_list[max_angle_idx].split_here)
TraceCharacters(substring_list, p3, max_angle_idx, _larger_angle_threshold); // strict
else TraceCharacters(substring_list, p3, max_angle_idx, _smaller_angle_threshold);
}
else
if (_debug) Console.WriteLine(" Found none: " + max_angle_idx + " Angle: " + max_angle + " Min Angle: " + min_angle);
}