Как определить область математических функций? - PullRequest
0 голосов
/ 26 февраля 2012

Я пишу приложение для построения графиков функций с помощью Qt.И мне нужен алгоритм для определения области функции.

вот часть, где я рисую график функции

QPainterPath p(QPointF(-m_w/2,f(-m_w/2)));
m_painter->setPen(m_functionPen);
for(double x=-m_w/2, y; x<m_w/2; x++)
{
    y = f(x/100);
    p.lineTo(x,y*100);
}
m_painter->drawPath(p);

Я думаю, что если я найду домен, я остановлюпрогрма от вытягивания из нее

1 Ответ

3 голосов
/ 26 февраля 2012

Программное обеспечение для печати обычно не беспокоит определение домена; он просто оценивает функцию в каждой видимой позиции и пропускает рисование любых линий, если результат был «неопределен» / «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), то определение домена является проблемой. В этом случае это будет зависеть от того, какие функции у вас есть и как они представлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...