//Вычисление пробной функции //(для всех точек окна знак должен быть одинаков для каждой стороны многоугольника) public bool probn(Window wnd, Figure f) { List <Line> lines = f.lines; double m, b; int lt = 0, ld = 0, rt = 0, rd = 0; for (int i = 0; i < lines.Count; i++) { if (lines[i].first.y > wnd.yUp && lines[i].second.y > wnd.yUp || lines[i].first.y < wnd.yDown && lines[i].second.y < wnd.yDown) { continue; } if ((lines[i].second.x - lines[i].first.x) != 0) { if (lines[i].first.x > wnd.xRight && lines[i].second.x > wnd.xRight || lines[i].first.x < wnd.xLeft && lines[i].second.x < wnd.xLeft) { continue; } m = (lines[i].second.y - lines[i].first.y) / (lines[i].second.x - lines[i].first.x); b = lines[i].second.y - m * lines[i].second.x; lt = 0; ld = 0; rt = 0; rd = 0; if ((wnd.yUp - m * wnd.xLeft - b) >= 0) { lt = 1; } else { lt = -1; } if ((wnd.yDown - m * wnd.xLeft - b) >= 0) { ld = 1; } else { ld = -1; } if ((wnd.yUp - m * wnd.xRight - b) >= 0) { rt = 1; } else { rt = -1; } if ((wnd.yDown - m * wnd.xRight - b) >= 0) { rd = 1; } else { rd = -1; } if (Math.Abs(lt + ld + rt + rd) != 4) { return(false); } } else { //если x1=x2, то в знаменателе 0 m = -lines[i].first.x; lt = 0; ld = 0; rt = 0; rd = 0; if ((wnd.xRight + m) >= 0) { lt = 1; } else { lt = -1; } if ((wnd.xLeft + m) >= 0) { ld = 1; } else { ld = -1; } if (Math.Abs(lt + ld) != 2) { return(false); } } } return(true); }
private void getBorderFigure(ref double x_max, ref double x_min, ref double y_max, ref double y_min, Figure figure) { x_max = -max_coord; x_min = max_coord; y_max = -max_coord; y_min = max_coord; foreach (var line in figure.lines) { if (line.first.x > x_max) { x_max = line.first.x; } if (line.first.x < x_min) { x_min = line.first.x; } if (line.second.x > x_max) { x_max = line.second.x; } if (line.second.x < x_min) { x_min = line.second.x; } if (line.first.y > y_max) { y_max = line.first.y; } if (line.first.y < y_min) { y_min = line.first.y; } if (line.second.y > y_max) { y_max = line.second.y; } if (line.second.y < y_min) { y_min = line.second.y; } } }