// Better table void ImprovedTable(wxArrayString& header,wxArrayPtrVoid& data) { // Column widths double w[4] = {40,35,40,45}; // Header size_t i; for (i = 0; i <header.GetCount(); i++) { Cell(w[i],7,header[i],wxPDF_BORDER_FRAME,0,wxPDF_ALIGN_CENTER); } Ln(); // Data size_t j; for (j = 0; j < data.GetCount(); j++) { wxArrayString* row = (wxArrayString*) data[j]; Cell(w[0],6,(*row)[0],wxPDF_BORDER_LEFT | wxPDF_BORDER_RIGHT); Cell(w[1],6,(*row)[1],wxPDF_BORDER_LEFT | wxPDF_BORDER_RIGHT); Cell(w[2],6,(*row)[2],wxPDF_BORDER_LEFT | wxPDF_BORDER_RIGHT,0,wxPDF_ALIGN_RIGHT); Cell(w[3],6,(*row)[3],wxPDF_BORDER_LEFT | wxPDF_BORDER_RIGHT,0,wxPDF_ALIGN_RIGHT); Ln(); } // Closure line Cell((w[0]+w[1]+w[2]+w[3]),0,wxS(""),wxPDF_BORDER_TOP); }
// Colored table void FancyTable(wxArrayString& header, wxArrayPtrVoid& data) { // Colors, line width and bold font SetFillColour(wxColour(255,0,0)); SetTextColour(255); SetDrawColour(wxColour(128,0,0)); SetLineWidth(.3); SetFont(wxS(""),wxS("B")); //Header double w[4] = {40,35,40,45}; size_t i; for (i = 0; i < header.GetCount(); i++) { Cell(w[i],7,header[i],wxPDF_BORDER_FRAME, 0, wxPDF_ALIGN_CENTER, 1); } Ln(); // Color and font restoration SetFillColour(wxColour(224,235,255)); SetTextColour(0); SetFont(wxS("")); // Data int fill = 0; size_t j; for (j = 0; j < data.GetCount(); j++) { wxArrayString* row = (wxArrayString*) data[j]; Cell(w[0],6,(*row)[0],wxPDF_BORDER_LEFT | wxPDF_BORDER_RIGHT,0,wxPDF_ALIGN_LEFT,fill); Cell(w[1],6,(*row)[1],wxPDF_BORDER_LEFT | wxPDF_BORDER_RIGHT,0,wxPDF_ALIGN_LEFT,fill); Cell(w[2],6,(*row)[2],wxPDF_BORDER_LEFT | wxPDF_BORDER_RIGHT,0,wxPDF_ALIGN_RIGHT,fill); Cell(w[3],6,(*row)[3],wxPDF_BORDER_LEFT | wxPDF_BORDER_RIGHT,0,wxPDF_ALIGN_RIGHT,fill); Ln(); fill = 1 - fill; } Cell((w[0]+w[1]+w[2]+w[3]),0,wxS(""),wxPDF_BORDER_TOP); }
int main(int argc, char *argv[]) { Halide::Func data_mat; Halide::Var row, col, ki, iter; //Halide::Expr e = row + col; // initialize data matrix data_mat(row, col) = 1.0f; // initialize model matrix L, R Halide::Func L, R; L(row, ki) = 1.0f; R(ki, col) = 1.0f; Halide::Func approx_mat; approx_mat(row, col) = 0.0f; Halide::RDom k(0, kRank); approx_mat(row, col) = approx_mat(row, col) + L(row, k) * R(k, col); Halide::Func diff_mat; diff_mat(row, col) = approx_mat(row, col) - data_mat(row, col); Halide::Func Ln, Rn; Ln(row, ki) = 1.0f; Rn(ki, col) = 1.0f; Halide::RDom c(0, kWidth); Ln(row, ki) = L(row, ki) - step_size * diff_mat(row, c) * R(ki, c); Halide::RDom r(0, kHeight); Rn(ki, col) = R(ki, col) - step_size * diff_mat(r, col) * L(r, ki); Halide::Image<float> Ln_output = Ln.realize(kHeight, kRank); Halide::Image<float> Rn_output = Rn.realize(kRank, kWidth); for (int i = 0; i < Ln_output.height(); i++) { std::cout << i << " - "; for (int j = 0; j < Ln_output.width(); j++) { std::cout << j <<":" << Ln_output(i, j) << " "; } std::cout << std::endl; } for (int i = 0; i < Rn_output.height(); i++) { std::cout << i << " - "; for (int j = 0; j < Rn_output.width(); j++) { std::cout << j <<":" << Rn_output(i, j) << " "; } std::cout << std::endl; } std::cout << "Success!" << std::endl; return 0; }
// Simple table void BasicTable(wxArrayString& header,wxArrayPtrVoid& data) { size_t j; // Header for (j = 0; j < header.GetCount(); j++) { Cell(40,7,header[j],wxPDF_BORDER_FRAME); } Ln(); // Data for (j = 0; j < data.GetCount(); j++) { wxArrayString* row = (wxArrayString*) data[j]; size_t k; for (k = 0; k < (*row).GetCount(); k++) { Cell(40,6,(*row)[k],wxPDF_BORDER_FRAME); } Ln(); } }
// Page header void Header() { // Logo Image(wxS("wxpdfdoc.png"),10,8,28); // Helvetica bold 15 SetFont(wxS("Helvetica"),wxS("B"),15); // Move to the right Cell(80); // Title Cell(30,10,wxS("Title"),wxPDF_BORDER_FRAME,0,wxPDF_ALIGN_CENTER); // Line break Ln(20); }
U0 Zoom(F64 d) { F64 sx,sy,wx,wy; I64 i,x=ipx,y=ipy; d=Exp(Ln(d)/ZOOM_STEPS); for (i=0;i<ZOOM_STEPS;i++) { S2W(x,y,&wx,&wy); zoom=Limit(zoom*d,0.02,50); W2S(wx,wy,&sx,&sy); task->win_scroll_x=ipx-sx-task->win_pixel_left; task->win_scroll_y=ipy-sy-task->win_pixel_top; Sleep(10); } }
double Math::LambertW( const double arg ) { if(0.0 == arg) return 0.0; const double eps = 4.0e-16; const double em1 = 0.3678794411714423215955237701614608; assert(arg>=-em1); double p,e,t,w; if(arg < (-em1+1e-4)) { // series near -em1 in sqrt(q) double q = arg+em1; double r=Sqrt(q); double q2=q*q; double q3=q2*q; return -1.0 +2.331643981597124203363536062168*r -1.812187885639363490240191647568*q +1.936631114492359755363277457668*r*q -2.353551201881614516821543561516*q2 +3.066858901050631912893148922704*r*q2 -4.175335600258177138854984177460*q3 +5.858023729874774148815053846119*r*q3 -8.401032217523977370984161688514*q3*q; // error approx 1e-16 } /* initial approx for iteration... */ if(arg < 1.0) { /* series near 0 */ p = Sqrt(2.0 * (2.7182818284590452353602874713526625*arg + 1.0)); w = -1.0 + p * (1.0 + p * (-0.333333333333333333333 + p * 0.152777777777777777777777) ); } else w=Ln(arg); /* asymptotic */ if(arg > 3.0) w -= Ln(w); /* useful? */ for (unsigned int i=0; i<10; ++i) { /* Halley iteration */ e = Exp(w); t = w * e - arg; p = w + 1.0; t /= e * p - 0.5 * (p + 1.0) * t / p; w -= t; if (Abs(t) < eps * (1.0 + Abs(w))) return w; /* rel-abs error */ } assert(false && "Lambert W - No convergence."); return 0.0f; } // Math::LambertW
Double Log(Double base, Double x) { return (Ln(x) / Ln(base)); }
Float Log(Float base, Float x) { return (Ln(x) / Ln(base)); }