2012-02-26 8 views
-2

Я пишу графический график функций с 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); 

я думаю, что если я найти домен я бы остановить progrma от рисунка из него

+1

Звучит как вопрос для [Математика] (http://math.stackexchange.com/). –

+1

Можете ли вы дать более подробную информацию о том, что вы пытаетесь выполнить и что вы пробовали? – Nope

ответ

3

Plotting программного обеспечения, как правило, не беспокоит определение домена; он просто оценивает функцию в любой видимой позиции и пропускает рисование любых строк, если результат был «undefined»/«NaN»/etc. Вот ваш код изменен, чтобы сделать что пропуск (непроверенным, и я не соответствовать вашему стилю скобки, потому что я терпеть не могу):

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

+0

Кевин прав. Будет сложно рассчитать домен, поэтому просто вычислите свою функцию для видимого домена – Fuzz

+0

, но мы не можем вычислить все возможные значения в R –

+0

, как вы пишете NaN в C++ –

Смежные вопросы