static void writeLabel(pixel ** const pixels, int const pixcols, int const pixrows, pixval const maxval, const struct colorSystem * const cs) { pixel rgbcolor; /* color of text */ char sysdesc[256]; PPM_ASSIGN(rgbcolor, maxval, maxval, maxval); snprintfN(sysdesc, sizeof(sysdesc), "System: %s\n" "Primary illuminants (X, Y)\n" " Red: %0.4f, %0.4f\n" " Green: %0.4f, %0.4f\n" " Blue: %0.4f, %0.4f\n" "White point (X, Y): %0.4f, %0.4f", cs->name, cs->xRed, cs->yRed, cs->xGreen, cs->yGreen, cs->xBlue, cs->yBlue, cs->xWhite, cs->yWhite); sysdesc[sizeof(sysdesc)-1] = '\0'; /* for robustness */ ppmd_text(pixels, pixcols, pixrows, Maxval, pixcols / 3, Sz(24), Sz(12), 0, sysdesc, PPMD_NULLDRAWPROC, (char *) &rgbcolor); }
Fonc_Num EL_API_VECTO::ParamImage::In(INT aDef)const { GenIm::type_el aType = type_im(mIntegr,mNBB,mSigned,true); GenIm anIm = alloc_im2d(aType,Sz().real(),Sz().imag(),mAdrEl0); return anIm.in(aDef); }
static void tickY(pixel ** const pixels, unsigned int const pixcols, unsigned int const pixrows, pixval const maxval, unsigned int const xBias, unsigned int const yBias, pixel const axisColor, unsigned int const tenth) { /*---------------------------------------------------------------------------- Put a tick mark 'tenth' tenths of the way along the Y axis and label it. 'pixels' is the canvas on which to draw it; its dimensions are 'pixcols' by 'pixrows' and has maxval 'maxval'. -----------------------------------------------------------------------------*/ unsigned int const pxrows = pixrows - yBias; unsigned int const tickRow = (tenth * (pxrows - 1)) / 10; /* Pixel row where the top of the tick goes */ unsigned int const tickThickness = Sz(3); /* Thickness of the tick in pixels */ char s[20]; assert(tenth < 10); sprintf(s, "0.%d", 10 - tenth); ppmd_line(pixels, pixcols, pixrows, maxval, B(0, tickRow), B(tickThickness, tickRow), PPMD_NULLDRAWPROC, (char *) &axisColor); ppmd_text(pixels, pixcols, pixrows, maxval, B(Sz(-30), tickRow + Sz(5)), Sz(10), 0, s, PPMD_NULLDRAWPROC, (char *) &axisColor); }
static void plotWhitePoint(pixel ** const pixels, int const pixcols, int const pixrows, pixval const maxval, const struct colorSystem * const cs, bool const upvp, int const xBias, int const yBias) { int const pxcols = pixcols - xBias; int const pxrows = pixrows - yBias; int wx, wy; pixel rgbcolor; /* Color of the white point mark */ PPM_ASSIGN(rgbcolor, 0, 0, 0); if (upvp) { double wup, wvp; xy_to_upvp(cs->xWhite, cs->yWhite, &wup, &wvp); wx = wup; wy = wvp; wx = (pxcols - 1) * wup; wy = (pxrows - 1) - ((int) ((pxrows - 1) * wvp)); } else { wx = (pxcols - 1) * cs->xWhite; wy = (pxrows - 1) - ((int) ((pxrows - 1) * cs->yWhite)); } PPM_ASSIGN(rgbcolor, 0, 0, 0); /* We draw the four arms of the cross separately so as to leave the pixel representing the precise white point undisturbed. */ ppmd_line(pixels, pixcols, pixrows, maxval, B(wx + Sz(3), wy), B(wx + Sz(10), wy), PPMD_NULLDRAWPROC, (char *) &rgbcolor); ppmd_line(pixels, pixcols, pixrows, maxval, B(wx - Sz(3), wy), B(wx - Sz(10), wy), PPMD_NULLDRAWPROC, (char *) &rgbcolor); ppmd_line(pixels, pixcols, pixrows, maxval, B(wx, wy + Sz(3)), B(wx, wy + Sz(10)), PPMD_NULLDRAWPROC, (char *) &rgbcolor); ppmd_line(pixels, pixcols, pixrows, maxval, B(wx, wy - Sz(3)), B(wx, wy - Sz(10)), PPMD_NULLDRAWPROC, (char *) &rgbcolor); }
static void tickX(pixel ** const pixels, unsigned int const pixcols, unsigned int const pixrows, pixval const maxval, unsigned int const xBias, unsigned int const yBias, pixel const axisColor, unsigned int const tenth) { /*---------------------------------------------------------------------------- Put a tick mark 'tenth' tenths of the way along the X axis and label it. 'pixels' is the canvas on which to draw it; its dimensions are 'pixcols' by 'pixrows' and has maxval 'maxval'. -----------------------------------------------------------------------------*/ unsigned int const pxcols = pixcols - xBias; unsigned int const pxrows = pixrows - yBias; unsigned int const tickCol = (tenth * (pxcols - 1)) / 10; /* Pixel column where the left edge of the tick goes */ unsigned int const tickThickness = Sz(3); /* Thickness of the tick in pixels */ unsigned int const tickBottom = pxrows - Sz(1); /* Pixel row of the bottom of the tick */ char s[20]; assert(tenth < 10); sprintf(s, "0.%u", tenth); ppmd_line(pixels, pixcols, pixrows, maxval, B(tickCol, tickBottom), B(tickCol, tickBottom - tickThickness), PPMD_NULLDRAWPROC, (char *) &axisColor); ppmd_text(pixels, pixcols, pixrows, maxval, B(tickCol - Sz(11), pxrows + Sz(12)), Sz(10), 0, s, PPMD_NULLDRAWPROC, (char *) &axisColor); }
int main() { int n = 2000; double T = 2000_ns; double delta_t = T/n; vector<double> f1_list = { -30_MHz,-25_MHz,-20_MHz,-14.5_MHz,-10_MHz,-5_MHz,0_MHz,5_MHz,10_MHz,14.5_MHz,20_MHz,25_MHz,30_MHz }; for(auto k=f1_list.begin();k!=f1_list.end();k++) { /* Hamiltonian */ double f1 = *k; Operator H = 2*pi*(fe*Sz(0)+f1*Sx(0)); for(int i=0;i<N;i++) H += 2*pi*(fi*Sz(i+1)+Sz(0)*(Azx[i]*Sx(i+1)+Azy[i]*Sy(i+1)+Azz[i]*Sz(i+1))); auto U = H.U(); /* initial state */ double alpha_e = 7.6216e-4; double alpha_i = -1.1579e-6; //Operator rho0 = Op<2>(0,0.5*(1-alpha_e),0,0,0.5*(1+alpha_e)); Operator rho0 = Op<2>(0,0.5,0.5,0.5,0.5); for(int i=1;i<=N;i++) rho0 *= Op<2>(i,0.5*(1-alpha_i),0,0,0.5*(1+alpha_i)); /* output stream */ stringstream fnstream; fnstream << "malonic-DNP_" << f1/1_MHz << "MHz.txt"; string fn = fnstream.str(); ofstream out(fn); cout << fn << ":" << endl; /* calculate and output */ for(int i=0;i<=n;i++) { double t = delta_t*i; cout << fn << ":\t" << t/T*100 << "%" << endl; out << t/1_ns << '\t'; Operator rho = U(t)*rho0*U(-t); Operator rhoe = rho; for(int j=1;j<=N;j++) rhoe = rhoe.tr(j); out << real(tr(rhoe*Sx(0))) << '\t'; out << real(tr(rhoe*Sy(0))) << '\t'; out << real(tr(rhoe*Sz(0))) << '\t'; for(int j=1;j<=N;j++) { Operator rhoj = rho; for(int k=0;k<=N;k++) { if(k==j) continue; rhoj = rhoj.tr(k); } out << real(tr(rhoj*Sz(j))) << '\t'; } out << endl; } out.close(); } }
int main() { int n = 2000; double T = 2000_ns; double delta_t = T/n; vector<double> f1_list = { 5_MHz,10_MHz,14.5_MHz,20_MHz,25_MHz }; for(auto k=f1_list.begin();k!=f1_list.end();k++) { /* Hamiltonian */ double f1 = *k; Operator HI; for(int i=0;i<N;i++) HI += 2*pi*(fi*Sz(i+1)+Sz(0)*(Azx[i]*Sx(i+1)+Azy[i]*Sy(i+1)+Azz[i]*Sz(i+1))); auto Ht = [&HI,f1](double t) { return 2*pi*(fe*Sz(0)+2*f1*cos(2*pi*fe*t)*Sx(0))+HI; }; /* initial state */ double alpha_e = 7.6216e-4; double alpha_i = -1.1579e-6; //Operator rho0 = Op<2>(0,0.5*(1-alpha_e),0,0,0.5*(1+alpha_e)); Operator rho0 = Op<2>(0,0.5,0.5,0.5,0.5); for(int i=1;i<=N;i++) rho0 *= Op<2>(i,0.5*(1-alpha_i),0,0,0.5*(1+alpha_i)); /* output stream */ stringstream fnstream; fnstream << "malonic-lab-coord-DNP_" << f1/1_MHz << "MHz.txt"; string fn = fnstream.str(); ofstream out(fn); cout << fn << ":" << endl; /* calculate and output */ vector<double> time(n+1); for(int i=0;i<=n;i++) { time[i] = i*delta_t; } vector<Operator> rhot = Operator::SolveLiouvilleEq(Ht,rho0,0.01_ns,time,[fn](double t){ cout << fn << ":" << t/1_ns << endl; }); for(auto &rho: rhot) { Operator rhoe = rho; for(int j=1;j<=N;j++) rhoe = rhoe.tr(j); out << real(tr(rhoe*Sz(0))) << '\t'; for(int j=1;j<=N;j++) { Operator rhoj = rho; for(int k=0;k<=N;k++) { if(k==j) continue; rhoj = rhoj.tr(k); } out << real(tr(rhoj*Sz(j))) << '\t'; } out << endl; } out.close(); } }
static void labelAxes(pixel ** const pixels, unsigned int const pixcols, unsigned int const pixrows, pixval const maxval, unsigned int const xBias, unsigned int const yBias, pixel const axisColor, bool const upvp) { /*---------------------------------------------------------------------------- Label the axes "x" and "y" or "u" and "v". -----------------------------------------------------------------------------*/ unsigned int const pxcols = pixcols - xBias; unsigned int const pxrows = pixrows - yBias; ppmd_text(pixels, pixcols, pixrows, maxval, B((98 * (pxcols - 1)) / 100 - Sz(11), pxrows + Sz(12)), Sz(10), 0, (upvp ? "u'" : "x"), PPMD_NULLDRAWPROC, (char *) &axisColor); ppmd_text(pixels, pixcols, pixrows, maxval, B(Sz(-22), (2 * (pxrows - 1)) / 100 + Sz(5)), Sz(10), 0, (upvp ? "v'" : "y"), PPMD_NULLDRAWPROC, (char *) &axisColor); }
void MyDayInfoPlot::DrawPricePlot(wxDC&dc){ TotalDayInfoStru MyDays[TOTAY_DAYS_MYDAYINFO]; double MaxSz,MinSz,MaxSh,MinSh,MaxTotal,MinTotal,MaxDelta,MinDelta; MaxSz=MinSz=MaxSh=MinSh=MaxTotal=MinTotal=MaxDelta=MinDelta=0; for (int tidx=0;tidx<TOTAY_DAYS_MYDAYINFO;tidx++){ MyDays[tidx].Valid=false; } wxString keyPath=WStockConfig::GetMyDayInfoPath(); wxFileName keyf(keyPath); keyf.MakeAbsolute(); xmlDocPtr doc=NULL; if (keyf.FileExists()){ //Load Stocks Name From file doc = xmlParseFile((const char*)keyf.GetFullPath().mb_str()); } //If Load Fail, Create the Xml Memory if (doc==NULL){ dc.DrawText(_("No Info File Found!"),10,10); return; } for (xmlNodePtr node=doc->children->children;node;node=node->next){ if (xmlStrcmp(node->name,(const xmlChar*)"DayInfo")==0){ wxString Date(wxConvUTF8.cMB2WC( (char*)xmlGetProp(node, (const xmlChar*)"Date")),*wxConvCurrent); wxString Sz(wxConvUTF8.cMB2WC( (char*)xmlGetProp(node, (const xmlChar*)"ShenZhen")),*wxConvCurrent); wxString Sh(wxConvUTF8.cMB2WC( (char*)xmlGetProp(node, (const xmlChar*)"ShangHai")),*wxConvCurrent); wxString Total(wxConvUTF8.cMB2WC( (char*)xmlGetProp(node, (const xmlChar*)"Total")),*wxConvCurrent); wxString Delta(wxConvUTF8.cMB2WC( (char*)xmlGetProp(node, (const xmlChar*)"TodayEarning")),*wxConvCurrent); wxDateTime date; date.ParseDate(Date); int idx=(wxDateTime::Today()-date).GetDays(); if (idx<TOTAY_DAYS_MYDAYINFO){ Sz.ToDouble(&MyDays[idx].sz); Sh.ToDouble(&MyDays[idx].sh); Total.ToDouble(&MyDays[idx].total); Delta.ToDouble(&MyDays[idx].delta); MyDays[idx].Valid = true; MyDays[idx].date = date; } } } int i; for (i=0;i<TOTAY_DAYS_MYDAYINFO;i++){ if (MyDays[i].Valid){ if (MyDays[i].sz>MaxSz) MaxSz = MyDays[i].sz; if (MyDays[i].sz<MinSz) MinSz = MyDays[i].sz; if (MyDays[i].sh>MaxSh) MaxSh = MyDays[i].sh; if (MyDays[i].sh<MinSh) MinSh = MyDays[i].sh; if (MyDays[i].total>MaxTotal) MaxTotal = MyDays[i].total; if (MyDays[i].total<MinTotal) MinTotal = MyDays[i].total; if (MyDays[i].delta>MaxDelta) MaxDelta = MyDays[i].delta; if (MyDays[i].delta<MinDelta) MinDelta = MyDays[i].delta; } } dc.SetPen(wxPen(*wxBLACK,3)); int XStart=100,YStart=10,YFree=60; int TotalY=dc.GetSize().y-30-YFree; int XTotal = dc.GetSize().x-110; float TotalDelta=0; if (MinDelta<0) TotalDelta = MaxTotal - MinDelta+YFree; else TotalDelta = MaxTotal+YFree; if (TotalDelta<0.0003) TotalDelta = 1; int ZeroY = (int)(double)(TotalY/TotalDelta * MaxTotal + YStart); dc.DrawLine(XStart,YStart,XStart,YStart + TotalY + YFree); dc.DrawLine(XStart-10,ZeroY,XStart+XTotal,ZeroY); for (i=0;i<TOTAY_DAYS_MYDAYINFO;i++){ if (MyDays[i].Valid){ int MyTotalY=(int)(double)(ZeroY - TotalY/TotalDelta * MyDays[i].total); int MyDeltaY=(int)(double)(ZeroY - TotalY/TotalDelta * MyDays[i].delta); dc.SetBrush(*wxBLACK_BRUSH); dc.DrawRectangle(XStart+(i+1)*(XTotal / (TOTAY_DAYS_MYDAYINFO + 1)) - 5,MyTotalY,10,Abs(ZeroY-MyTotalY)); dc.SetBrush(*wxGREEN_BRUSH); dc.DrawRectangle(XStart+(i+1)*(XTotal / (TOTAY_DAYS_MYDAYINFO + 1)) - 5,MyDeltaY,10,Abs(ZeroY-MyDeltaY)); //wxLogMessage(wxT("Draw Rect at:%d %d %d %d"),(int)(XStart+(i+1)*(XTotal / (TOTAY_DAYS_MYDAYINFO + 1)) - 5), //MyDeltaY,10,Abs(ZeroY-MyDeltaY)); dc.DrawText(MyDays[i].date.FormatISODate(),XStart+(i+1)*(XTotal / (TOTAY_DAYS_MYDAYINFO + 1))-30,YStart+TotalY); } } }
static void plotMonochromeWavelengths( pixel ** const pixels, int const pixcols, int const pixrows, pixval const maxval, const struct colorSystem * const cs, bool const upvp, int const xBias, int const yBias) { int const pxcols = pixcols - xBias; int const pxrows = pixrows - yBias; int x; /* The wavelength we're plotting */ for (x = (upvp? 420 : 450); x <= 650; x += (upvp? 10 : (x > 470 && x < 600) ? 5 : 10)) { pixel rgbcolor; /* Ick. Drop legends that overlap and twiddle position so they appear at reasonable positions with respect to the tongue. */ if (!overlappingLegend(upvp, x)) { double cx, cy, cz, jr, jg, jb, jmax; char wl[20]; int bx = 0, by = 0, tx, ty, r, g, b; int icx, icy; /* Location of the color on the tongue */ if (x < 520) { bx = Sz(-22); by = Sz(2); } else if (x < 535) { bx = Sz(-8); by = Sz(-6); } else { bx = Sz(4); } computeMonochromeColorLocation(x, pxcols, pxrows, upvp, &icx, &icy); /* Draw the tick mark */ PPM_ASSIGN(rgbcolor, maxval, maxval, maxval); tx = icx + ((x < 520) ? Sz(-2) : ((x >= 535) ? Sz(2) : 0)); ty = icy + ((x < 520) ? 0 : ((x >= 535) ? Sz(-1) : Sz(-2))); ppmd_line(pixels, pixcols, pixrows, Maxval, B(icx, icy), B(tx, ty), PPMD_NULLDRAWPROC, (char *) &rgbcolor); /* The following flailing about sets the drawing color to the hue corresponding to the pure wavelength (constrained to the display gamut). */ if (upvp) { double up, vp; up = ((double) icx) / (pxcols - 1); vp = 1.0 - ((double) icy) / (pxrows - 1); upvp_to_xy(up, vp, &cx, &cy); cz = 1.0 - (cx + cy); } else { cx = ((double) icx) / (pxcols - 1); cy = 1.0 - ((double) icy) / (pxrows - 1); cz = 1.0 - (cx + cy); } xyz_to_rgb(cs, cx, cy, cz, &jr, &jg, &jb); (void) constrain_rgb(&jr, &jg, &jb); /* Scale to max(rgb) = 1 */ jmax = MAX(jr, MAX(jg, jb)); if (jmax > 0) { jr = jr / jmax; jg = jg / jmax; jb = jb / jmax; } /* gamma correct from linear rgb to nonlinear rgb. */ gamma_correct_rgb(cs, &jr, &jg, &jb); r = Maxval * jr; g = Maxval * jg; b = Maxval * jb; PPM_ASSIGN(rgbcolor, (pixval) r, (pixval) g, (pixval) b); sprintf(wl, "%d", x); ppmd_text(pixels, pixcols, pixrows, Maxval, B(icx + bx, icy + by), Sz(6), 0, wl, PPMD_NULLDRAWPROC, (char *) &rgbcolor); } } }
static void plotBlackBodyCurve(pixel ** const pixels, int const pixcols, int const pixrows, pixval const maxval, bool const upvp, int const xBias, int const yBias) { int const pxcols = pixcols - xBias; int const pxrows = pixrows - yBias; double t; /* temperature of black body */ pixel rgbcolor; /* color of the curve */ int lx, ly; /* Last point we've drawn on curve so far */ PPM_ASSIGN(rgbcolor, 0, 0, 0); /* Plot black body curve from 1000 to 30000 kelvins. */ for (t = 1000.0; t < 30000.0; t += 50.0) { double lambda, X = 0, Y = 0, Z = 0; int xb, yb; int ix; /* Determine X, Y, and Z for blackbody by summing color match functions over the visual range. */ for (ix = 0, lambda = 380; lambda <= 780.0; ix++, lambda += 5) { double Me; /* Evaluate Planck's black body equation for the power at this wavelength. */ Me = 3.74183e-16 * pow(lambda * 1e-9, -5.0) / (exp(1.4388e-2/(lambda * 1e-9 * t)) - 1.0); X += Me * cie_color_match[ix][0]; Y += Me * cie_color_match[ix][1]; Z += Me * cie_color_match[ix][2]; } if (upvp) { double up, vp; xy_to_upvp(X / (X + Y + Z), Y / (X + Y + Z), &up, &vp); xb = (pxcols - 1) * up; yb = (pxrows - 1) - ((pxrows - 1) * vp); } else { xb = (pxcols - 1) * X / (X + Y + Z); yb = (pxrows - 1) - ((pxrows - 1) * Y / (X + Y + Z)); } if (t > 1000) { ppmd_line(pixels, pixcols, pixrows, Maxval, B(lx, ly), B(xb, yb), PPMD_NULLDRAWPROC, (char *) &rgbcolor); /* Draw tick mark every 1000 kelvins */ if ((((int) t) % 1000) == 0) { ppmd_line(pixels, pixcols, pixrows, Maxval, B(lx, ly - Sz(2)), B(lx, ly + Sz(2)), PPMD_NULLDRAWPROC, (char *) &rgbcolor); /* Label selected tick marks with decreasing density. */ if (t <= 5000.1 || (t > 5000.0 && ((((int) t) % 5000) == 0) && t != 20000.0)) { char bb[20]; sprintf(bb, "%g", t); ppmd_text(pixels, pixcols, pixrows, Maxval, B(lx - Sz(12), ly - Sz(4)), Sz(6), 0, bb, PPMD_NULLDRAWPROC, (char *) &rgbcolor); } } } lx = xb; ly = yb; } }
static void drawAxes(pixel ** const pixels, int const pixcols, int const pixrows, pixval const maxval, bool const upvp, int const xBias, int const yBias) { int const pxcols = pixcols - xBias; int const pxrows = pixrows - yBias; pixel rgbcolor; /* Color of axes */ int i; PPM_ASSIGN(rgbcolor, maxval, maxval, maxval); ppmd_line(pixels, pixcols, pixrows, maxval, B(0, 0), B(0, pxrows - 1), PPMD_NULLDRAWPROC, (char *) &rgbcolor); ppmd_line(pixels, pixcols, pixrows, maxval, B(0, pxrows - 1), B(pxcols - 1, pxrows - 1), PPMD_NULLDRAWPROC, (char *) &rgbcolor); /* Draw tick marks on X and Y axes every 0.1 units. Also label axes. */ for (i = 1; i <= 9; i += 1) { char s[20]; /* X axis tick */ sprintf(s, "0.%d", i); ppmd_line(pixels, pixcols, pixrows, maxval, B((i * (pxcols - 1)) / 10, pxrows - Sz(1)), B((i * (pxcols - 1)) / 10, pxrows - Sz(4)), PPMD_NULLDRAWPROC, (char *) &rgbcolor); ppmd_text(pixels, pixcols, pixrows, maxval, B((i * (pxcols - 1)) / 10 - Sz(11), pxrows + Sz(12)), Sz(10), 0, s, PPMD_NULLDRAWPROC, (char *) &rgbcolor); /* Y axis tick */ sprintf(s, "0.%d", 10 - i); ppmd_line(pixels, pixcols, pixrows, maxval, B(0, (i * (pxrows - 1)) / 10), B(Sz(3), (i * (pxrows - 1)) / 10), PPMD_NULLDRAWPROC, (char *) &rgbcolor); ppmd_text(pixels, pixcols, pixrows, maxval, B(Sz(-30), (i * (pxrows - 1)) / 10 + Sz(5)), Sz(10), 0, s, PPMD_NULLDRAWPROC, (char *) &rgbcolor); } ppmd_text(pixels, pixcols, pixrows, maxval, B((98 * (pxcols - 1)) / 100 - Sz(11), pxrows + Sz(12)), Sz(10), 0, (upvp ? "u'" : "x"), PPMD_NULLDRAWPROC, (char *) &rgbcolor); ppmd_text(pixels, pixcols, pixrows, maxval, B(Sz(-22), (2 * (pxrows - 1)) / 100 + Sz(5)), Sz(10), 0, (upvp ? "v'" : "y"), PPMD_NULLDRAWPROC, (char *) &rgbcolor); }
int main(int argc, char * argv[]) { int argn; const char * const usage = "[-[no]black] [-[no]wpoint] [-[no]label] [-no[axes]] [-full]\n\ [-xy|-upvp] [-rec709|-ntsc|-ebu|-smpte|-hdtv|-cie]\n\ [-red <x> <y>] [-green <x> <y>] [-blue <x> <y>]\n\ [-white <x> <y>] [-gamma <g>]\n\ [-size <s>] [-xsize|-width <x>] [-ysize|-height <y>]"; const struct colorSystem *cs; int widspec = FALSE, hgtspec = FALSE; int xBias, yBias; int upvp = FALSE; /* xy or u'v' color coordinates? */ int showWhite = TRUE; /* Show white point ? */ int showBlack = TRUE; /* Show black body curve ? */ int fullChart = FALSE; /* Fill entire tongue ? */ int showLabel = TRUE; /* Show labels ? */ int showAxes = TRUE; /* Plot axes ? */ ppm_init(&argc, argv); argn = 1; cs = &Rec709system; /* default */ while (argn < argc && argv[argn][0] == '-' && argv[argn][1] != '\0') { if (pm_keymatch(argv[argn], "-xy", 2)) { upvp = FALSE; } else if (pm_keymatch(argv[argn], "-upvp", 1)) { upvp = TRUE; } else if (pm_keymatch(argv[argn], "-xsize", 1) || pm_keymatch(argv[argn], "-width", 2)) { if (widspec) { pm_error("already specified a size/width/xsize"); } argn++; if ((argn == argc) || (sscanf(argv[argn], "%d", &sxsize) != 1)) pm_usage(usage); widspec = TRUE; } else if (pm_keymatch(argv[argn], "-ysize", 1) || pm_keymatch(argv[argn], "-height", 2)) { if (hgtspec) { pm_error("already specified a size/height/ysize"); } argn++; if ((argn == argc) || (sscanf(argv[argn], "%d", &sysize) != 1)) pm_usage(usage); hgtspec = TRUE; } else if (pm_keymatch(argv[argn], "-size", 2)) { if (hgtspec || widspec) { pm_error("already specified a size/height/ysize"); } argn++; if ((argn == argc) || (sscanf(argv[argn], "%d", &sysize) != 1)) pm_usage(usage); sxsize = sysize; hgtspec = widspec = TRUE; } else if (pm_keymatch(argv[argn], "-rec709", 1)) { cs = &Rec709system; } else if (pm_keymatch(argv[argn], "-ntsc", 1)) { cs = &NTSCsystem; } else if (pm_keymatch(argv[argn], "-ebu", 1)) { cs = &EBUsystem; } else if (pm_keymatch(argv[argn], "-smpte", 2)) { cs = &SMPTEsystem; } else if (pm_keymatch(argv[argn], "-hdtv", 2)) { cs = &HDTVsystem; } else if (pm_keymatch(argv[argn], "-cie", 1)) { cs = &CIEsystem; } else if (pm_keymatch(argv[argn], "-black", 3)) { showBlack = TRUE; /* Show black body curve */ } else if (pm_keymatch(argv[argn], "-wpoint", 2)) { showWhite = TRUE; /* Show white point of color system */ } else if (pm_keymatch(argv[argn], "-noblack", 3)) { showBlack = FALSE; /* Don't show black body curve */ } else if (pm_keymatch(argv[argn], "-nowpoint", 3)) { showWhite = FALSE; /* Don't show white point of system */ } else if (pm_keymatch(argv[argn], "-label", 1)) { showLabel = TRUE; /* Show labels. */ } else if (pm_keymatch(argv[argn], "-nolabel", 3)) { showLabel = FALSE; /* Don't show labels */ } else if (pm_keymatch(argv[argn], "-axes", 1)) { showAxes = TRUE; /* Show axes. */ } else if (pm_keymatch(argv[argn], "-noaxes", 3)) { showAxes = FALSE; /* Don't show axes */ } else if (pm_keymatch(argv[argn], "-full", 1)) { fullChart = TRUE; /* Fill whole tongue full-intensity */ } else if (pm_keymatch(argv[argn], "-gamma", 2)) { cs = &Customsystem; argn++; if ((argn == argc) || (sscanf(argv[argn], "%lf", &Customsystem.gamma) != 1)) pm_usage(usage); } else if (pm_keymatch(argv[argn], "-red", 1)) { cs = &Customsystem; argn++; if ((argn == argc) || (sscanf(argv[argn], "%lf", &Customsystem.xRed) != 1)) pm_usage(usage); argn++; if ((argn == argc) || (sscanf(argv[argn], "%lf", &Customsystem.yRed) != 1)) pm_usage(usage); } else if (pm_keymatch(argv[argn], "-green", 1)) { cs = &Customsystem; argn++; if ((argn == argc) || (sscanf(argv[argn], "%lf", &Customsystem.xGreen) != 1)) pm_usage(usage); argn++; if ((argn == argc) || (sscanf(argv[argn], "%lf", &Customsystem.yGreen) != 1)) pm_usage(usage); } else if (pm_keymatch(argv[argn], "-blue", 1)) { cs = &Customsystem; argn++; if ((argn == argc) || (sscanf(argv[argn], "%lf", &Customsystem.xBlue) != 1)) pm_usage(usage); argn++; if ((argn == argc) || (sscanf(argv[argn], "%lf", &Customsystem.yBlue) != 1)) pm_usage(usage); } else if (pm_keymatch(argv[argn], "-white", 1)) { cs = &Customsystem; argn++; if ((argn == argc) || (sscanf(argv[argn], "%lf", &Customsystem.xWhite) != 1)) pm_usage(usage); argn++; if ((argn == argc) || (sscanf(argv[argn], "%lf", &Customsystem.yWhite) != 1)) pm_usage(usage); } else { pm_usage(usage); } argn++; } if (argn != argc) { /* Extra bogus arguments ? */ pm_usage(usage); } pixcols = sxsize; pixrows = sysize; pixels = ppm_allocarray(pixcols, pixrows); /* Partition into plot area and axes and establish subwindow. */ xBias = Sz(32); yBias = Sz(20); makeAllBlack(pixels, pixcols, pixrows); drawTongueOutline(pixels, pixcols, pixrows, Maxval, upvp, xBias, yBias); fillInTongue(pixels, pixcols, pixrows, Maxval, cs, upvp, xBias, yBias, fullChart); if (showAxes) drawAxes(pixels, pixcols, pixrows, Maxval, upvp, xBias, yBias); if (showWhite) plotWhitePoint(pixels, pixcols, pixrows, Maxval, cs, upvp, xBias, yBias); if (showBlack) plotBlackBodyCurve(pixels, pixcols, pixrows, Maxval, upvp, xBias, yBias); /* Plot wavelengths around periphery of the tongue. */ if (showAxes) plotMonochromeWavelengths(pixels, pixcols, pixrows, Maxval, cs, upvp, xBias, yBias); if (showLabel) writeLabel(pixels, pixcols, pixrows, Maxval, cs); ppm_writeppm(stdout, pixels, pixcols, pixrows, Maxval, FALSE); return 0; }
void CalcMaxLoc<Type,TypeBase,Compare>::AllMaxLoc ( ElSTDNS vector<Pt2di> &res, Im2D<Type,TypeBase> Im, Pt2di Vois, Pt2di p0, Pt2di p1, TypeBase vMin ) { Pt2di Sz(Im.tx(),Im.ty()); Vois.x = ElAbs(Vois.x); Vois.y = ElAbs(Vois.y); pt_set_min_max(p0,p1); p0 = Sup(p0,Vois); p1 = Inf(p1,Sz-Vois); if ((p1.x<=p0.x) || (p1.y <= p0.y)) return; INT dlx = Vois.x; INT dly = Vois.y; Type ** data = Im.data(); res.clear(); ElSTDNS vector<Pt3di> & OVois = OrdVois(Vois); for (INT Y0=p0.y ; Y0<p1.y ; Y0+=dly) { INT Y1 = ElMin(p1.y,Y0+dly); for (INT X0=p0.x ; X0<p1.x ; X0+=dlx) { INT X1 = ElMin(p1.x,X0+dlx); Type vMax = vMin; INT xMax = DefXY; INT yMax = DefXY; for (INT y=Y0; y<Y1 ; y++) { for (INT x=X0; x<X1 ; x++) { if (mCmp((TypeBase)vMax,(TypeBase)data[y][x])) { xMax = x; yMax = y; vMax = data[y][x]; } } } if (xMax != DefXY) { bool IsMax = true; for ( std::vector<Pt3di> ::iterator itOV = OVois.begin(); IsMax &&(itOV != OVois.end()); itOV++ ) { Type aVal = data[yMax+itOV->y][xMax+itOV->x]; if (itOV->z) { if (!mCmp((TypeBase)aVal,(TypeBase)vMax)) IsMax = false; } else { if (mCmp((TypeBase)vMax,(TypeBase)aVal)) IsMax = false; } } if (IsMax) { res.push_back(Pt2di(xMax,yMax)); } } } } }
cSsBloc cIncIntervale::SsBlocComplet() { cSsBloc aRes(0,Sz()); aRes.BlocSetInt(*this); return aRes; }
void update_sz(struct node* node) { if(node != NULL) node->sz = Sz(node->lc) + Sz(node->rc) + 1 ; }