Программное обеспечение для печати обычно не беспокоит определение домена; он просто оценивает функцию в каждой видимой позиции и пропускает рисование любых линий, если результат был «неопределен» / «NaN» / и т. д. Вот ваш код, модифицированный для этого пропуска (непроверенный, и я не соответствовал вашему стилю фигурных скобок, потому что я не могу это выдержать):
QPainterPath p();
double previousY = 1/0 /* NaN */;
m_painter->setPen(m_functionPen);
for(double x=-m_w/2, y; x<m_w/2; x++) {
y = f(x/100);
if (y == y /* not-NaN test */) {
if (previousY == previousY) {
p.lineTo(x,y*100);
} else {
p.moveTo(x,y*100);
}
}
previousY = y;
}
m_painter->drawPath(p);
(Я предполагаю, что QPainterPath p()
создаст пустой путь. Я не знаком с библиотекой, которую вы используете.) Обратите внимание, что теперь это обрабатывает первую точку как другие точки для простоты кодирования.
(Кроме того, эта стратегия не даст правильный график, если вы оцениваете функцию, подобную f(x) = 1/(x + 0.00005)
, потому что неопределенная точка будет просто пропущена, и вы получите вертикальную линию. Не существует простого общего решения для эта проблема.)
С другой стороны, если вы пытаетесь найти разумные границы для вашего графа (вашей переменной m_w
), то определение домена является проблемой. В этом случае это будет зависеть от того, какие функции у вас есть и как они представлены.