00001
00005 #ifndef _MultivariateFunctionLayer_h
00006 #define _MultivariateFunctionLayer_h
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "../FunctionBase.h"
00017 #include "IntervalCountLimiter.h"
00018 #include "PlotLayer.h"
00019
00020
00021
00022
00023 class MultivariateFunctionLayer
00024 : public PlotLayer
00025 {
00026 public:
00027
00028
00031 MultivariateFunctionLayer(const PlotControl& targetPlot,
00032 const FunctionBase& function,
00033 unsigned variable1Index = 0,
00034 unsigned variable2Index = 1);
00035
00038 MultivariateFunctionLayer(const MultivariateFunctionLayer& from);
00039
00042 ~MultivariateFunctionLayer(void);
00043
00044
00045
00046
00047
00048 virtual void Draw(wxDC& dc) const;
00049
00050
00051
00052
00053 protected:
00054 private:
00056 class FixedCountLimiter
00057 : public IntervalCountLimiter
00058 {
00059 public:
00060 FixedCountLimiter(unsigned maximumCount);
00061
00062 virtual unsigned operator()(double intervalLength) const;
00063 private:
00064 unsigned mMaximumCount;
00065 };
00066
00067
00068 void DrawPlotLine(wxDC& dc,
00069 double x1,
00070 double y1,
00071 double x2,
00072 double y2) const;
00073
00074 double* ComputeContourLevels(double plotMin,
00075 double plotMax,
00076 unsigned& levelCount) const;
00077
00078 void conrec(double** d,
00079 int ilb,
00080 int iub,
00081 int jlb,
00082 int jub,
00083 double* x,
00084 double* y,
00085 int nc,
00086 double* z,
00087 wxDC& dc) const;
00088
00089
00090
00091 const FunctionBase& mFunction;
00092
00093 unsigned mVariableXIndex;
00094 unsigned mVariableYIndex;
00095 };
00096
00097
00098
00099
00100
00101
00102
00103 #endif // _MultivariateFunctionLayer_h