35#include "ramCanvas.hpp"
36#include "MRMathLINM.hpp"
39typedef mjr::ramCanvas3c8b::coordFltType drT;
43void drawLevelCurves(
int numBand, drT bandWidth, drT zMin, drT zMax, drT minRealX, drT maxRealX, drT minRealY, drT maxRealY,
const char *file);
47 std::chrono::time_point<std::chrono::system_clock> startTime = std::chrono::system_clock::now();
48 drawLevelCurves(10, 0.0, 0, 0, -20, 20, -20, 20,
"level_curves_l.tiff");
49 drawLevelCurves( 0, 0.0, 0, 0, -20, 20, -20, 20,
"level_curves_c.tiff");
50 std::chrono::duration<double> runTime = std::chrono::system_clock::now() - startTime;
51 std::cout <<
"Total Runtime " << runTime.count() <<
" sec" << std::endl;
56 return sin(x)+cos(y)+sqrt(x*x+y*y)*0.05;
60void drawLevelCurves(
int numBand, drT bandWidth, drT zMin, drT zMax, drT minRealX, drT maxRealX, drT minRealY, drT maxRealY,
const char *file) {
62 mjr::ramCanvas3c8b::csIntType clr;
63 drT fxy, bandGap, band, minDist, minBand;
65 mjr::ramCanvas3c8b theRamCanvas(1024, 1024, minRealX, maxRealX, minRealY, maxRealY);
68 if( (zMax == 0) && (zMin == 0) ) {
69 fprintf(stderr,
"Compute zMax and zMin\n");
70 zMax = zMin = f(theRamCanvas.int2realX(0), theRamCanvas.int2realY(0));
71 for(y=0;y<theRamCanvas.getNumPixY();y++) {
72 for(x=0;x<theRamCanvas.getNumPixX();x++) {
73 fxy = f(theRamCanvas.int2realX(x), theRamCanvas.int2realY(y));
74 if(fxy > zMax) zMax=fxy;
75 if(fxy < zMin) zMin=fxy;
80 bandGap = 1.0*(zMax-zMin)/numBand;
81 fprintf(stderr,
"Compute curves\n");
82 for(y=0;y<theRamCanvas.getNumPixY();y++) {
83 for(x=0;x<theRamCanvas.getNumPixX();x++) {
84 fxy = f(theRamCanvas.int2realX(x), theRamCanvas.int2realY(y));
86 theRamCanvas.setDfltColor(mjr::ramCanvas3c8b::colorType(255, 0, 0));
89 theRamCanvas.setDfltColor(mjr::ramCanvas3c8b::colorType(0, 255, 0));
92 clr =
static_cast<mjr::ramCanvas3c8b::csIntType
>(mjr::math::linm::gen_map(fxy, zMin, zMax, (drT)0, (drT)(255*4+1)));
93 theRamCanvas.setDfltColor(mjr::ramCanvas3c8b::colorType::csCColdeIceToWaterToHot::c(clr));
96 theRamCanvas.setDfltColor(mjr::ramCanvas3c8b::colorType(0, 0, 255));
98 minDist = (zMax-zMin+1);
100 for(band=zMax; band>zMin; band=band-bandGap) {
101 if(fabs(band-fxy) < minDist) {
102 minDist = fabs(band-fxy);
108 clr =
static_cast<mjr::ramCanvas3c8b::csIntType
>(mjr::math::linm::gen_map(minBand, zMin, zMax, (drT)0, (drT)(255*4+1)));
109 theRamCanvas.setDfltColor(mjr::ramCanvas3c8b::colorType::csCColdeIceToWaterToHot::c(clr));
112 theRamCanvas.setDfltColor(mjr::ramCanvas3c8b::colorType(0, 0, 255));
114 for(band=zMax; band>zMin; band=band-bandGap) {
115 if(fabs(band-fxy) < bandWidth) {
116 clr = (int)((zMax-fxy)/(zMax-zMin)*250);
117 theRamCanvas.setDfltColor(mjr::ramCanvas3c8b::colorType(255, 255, 255));
126 theRamCanvas.drawPoint(x, y);
130 theRamCanvas.writeTIFFfile(file);
int main(int argc, char *argv[])