// Implements http://www.iquilezles.org/www/articles/warp/warp.htm void Warp::warpLine(float y, float warp_factor, float* buf, int outWidth) const { float buf1[outWidth]; float buf2[outWidth]; fbmLine(y, 0, buf1, outWidth); fbmLine(y+1.3, 5.2, buf2, outWidth); for(int x = 0; x < outWidth; x += 1) { Vec2 result_vector = Vec2(x + buf1[x]*warp_factor, y + buf2[x]*warp_factor); buf[x] = fbm(result_vector.x(), result_vector.y()); } }
void UcUseCaseCanvas::draw(QPainter & p) { if (! visible()) return; QRect r = rect(); UseCaseData * data = (UseCaseData *) browser_node->get_data(); p.setRenderHint(QPainter::Antialiasing, true); used_color = (itscolor == UmlDefaultColor) ? the_canvas()->browser_diagram()->get_color(UmlUseCase) : itscolor; QColor col = color(used_color); QBrush brsh = p.brush(); bool realizationp = !strcmp(data->get_short_stereotype(), "realization"); FILE * fp = svg(); int rx = width()/2 - 1; int ry = height()/2 - 1; if (fp != 0) fputs("<g>\n", fp); if (used_color != UmlTransparent) { const int shadow = the_canvas()->shadow() - 1; if (shadow != -1) { r.setRight(r.right() - shadow); r.setBottom(r.bottom() - shadow); p.setPen(::Qt::NoPen); p.setBrush(::Qt::darkGray); p.drawEllipse(r.left() + shadow, r.top() + shadow, r.width(), r.height()); if (fp != 0) { rx = width()/2 - 1; ry = height()/2 - 1; fprintf(fp, "\t<ellipse fill=\"#%06x\" stroke=\"none\"" " cx=\"%d\" cy=\"%d\" rx=\"%d\" ry=\"%d\" />\n", QColor(::Qt::darkGray).rgb()&0xffffff, r.left() + shadow + rx, r.top() + shadow + ry, rx, ry); } } if (fp != 0) fprintf(fp, "\t<ellipse fill=\"%s\" stroke=\"black\"%s stroke-width=\"1\" stroke-opacity=\"1\"" " cx=\"%d\" cy=\"%d\" rx=\"%d\" ry=\"%d\" />\n", svg_color(used_color), (realizationp) ? " stroke-dasharray=\"4,4\"" : "", r.left() + rx, r.top() + ry, rx, ry); } else if (fp != 0) fprintf(fp, "\t<ellipse fill=\"none\" stroke=\"black\"%s stroke-width=\"1\" stroke-opacity=\"1\"" " cx=\"%d\" cy=\"%d\" rx=\"%d\" ry=\"%d\" />\n", (realizationp) ? " stroke-dasharray=\"4,4\"" : "", r.left() + rx, r.top() + ry, rx, ry); p.setBackgroundMode((used_color == UmlTransparent) ? ::Qt::TransparentMode : ::Qt::OpaqueMode); p.setBrush(col); if (realizationp) p.setPen(::Qt::DotLine); else p.setPen(::Qt::SolidLine); p.drawEllipse(r.left(), r.top(), r.width(), r.height()); if (realizationp) p.setPen(::Qt::SolidLine); QString ep = data->get_extension_points(); if (!ep.isEmpty()) { QFontMetrics fbm(the_canvas()->get_font(UmlNormalBoldFont)); const int two = (int) (2 * the_canvas()->zoom()); int he = fbm.height() + two; int py = (int) y() + height()/4; int dx = width() / 15; int px = (int) x() + dx; p.drawLine(px, py, r.right() - dx, py); if (fp != 0) fprintf(fp, "\t<line stroke=\"black\" stroke-opacity=\"1\"" " x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" />\n", px, py, r.right() - dx, py); int h = (height() * 3) / 4 - two; int w = width() - dx - dx; QColor bckgrnd = p.backgroundColor(); py += two; p.setBackgroundColor(col); p.setFont(the_canvas()->get_font(UmlNormalBoldFont)); p.drawText(px, py, w, h, ::Qt::AlignHCenter + ::Qt::AlignTop, "Extension Points"); if (fp != 0) draw_text(px, py, w, h, ::Qt::AlignHCenter + ::Qt::AlignTop, "Extension Points", p.font(), fp); h -= he; if (h > he) { // at least one line may be written py += he; p.setFont(the_canvas()->get_font(UmlNormalFont)); p.drawText(px, py, w, h, ::Qt::AlignCenter, ep); p.setBackgroundColor(bckgrnd); if (fp != 0) draw_text(px, py, w, h, ::Qt::AlignCenter, ep, p.font(), fp); } } if (fp != 0) fputs("</g>\n", fp); p.setBrush(brsh); if (selected()) show_mark(p, rect()); }
void buildcovmat(int *nSite, int *grid, int *covmod, double *coord, int *dim, double *nugget, double *sill, double *range, double *smooth, double *covMat){ int nPairs, effnSite = *nSite, zero = 0; const double one = 1, dzero = 0; double flag = 0; if (*grid) effnSite = R_pow_di(effnSite, *dim); nPairs = effnSite * (effnSite - 1) / 2; double *dist = malloc(nPairs * sizeof(double)), *rho = malloc(nPairs * sizeof(double)), *coordGrid = malloc(effnSite * *dim * sizeof(double)); if (*grid){ //Coord specify a grid for (int i = 0; i < *nSite; i++) for (int j = 0; j < *nSite; j++){ coordGrid[j + i * *nSite] = coord[i]; coordGrid[*nSite * (*nSite + i) + j] = coord[j]; } distance(coordGrid, dim, &effnSite, &zero, dist); } else //Coord don't specify a grid distance(coord, dim, nSite, &zero, dist); switch (*covmod){ case 1: flag = whittleMatern(dist, nPairs, dzero, one, *range, *smooth, rho); break; case 2: flag = cauchy(dist, nPairs, dzero, one, *range, *smooth, rho); break; case 3: flag = powerExp(dist, nPairs, dzero, one, *range, *smooth, rho); break; case 4: flag = bessel(dist, nPairs, *dim, dzero, one, *range, *smooth, rho); break; case 6: if (*grid) flag = fbm(coordGrid, dist, *dim, effnSite, one, *range, *smooth, rho); else flag = fbm(coord, dist, *dim, effnSite, one, *range, *smooth, rho); break; } if (flag != 0.0) error("The covariance parameters seem to be ill-defined. Please check\n"); //Fill the non-diagonal elements of the covariance matrix //#pragma omp parallel for for (int currentPair=0;currentPair<nPairs;currentPair++){ int i = 0, j = 0; getSiteIndex(currentPair, effnSite, &i, &j); covMat[effnSite * i + j] = covMat[effnSite * j + i] = *sill * rho[currentPair]; } //Fill the diagonal elements of the covariance matrix if (*covmod == 6){ //Fractional brownian double irange2 = 1 / (*range * *range); if (*grid){ for (int i = 0; i < effnSite;i++){ covMat[i * (effnSite + 1)] = 0; for (int j= 0; j < *dim; j++) covMat[i * (effnSite + 1)] += coordGrid[i + j * effnSite] * coordGrid[i + j * effnSite]; covMat[i * (effnSite + 1)] = 2 * pow(covMat[i * (effnSite + 1)] * irange2, 0.5 * *smooth); } } else { for (int i = 0; i < effnSite; i++){ covMat[i * (effnSite + 1)] = 0; for (int j = 0; j < *dim; j++) covMat[i * (effnSite + 1)] += coord[i + j * effnSite] * coord[i + j * effnSite]; covMat[i * (effnSite + 1)] = 2 * pow(covMat[i * (effnSite + 1)] * irange2, 0.5 * *smooth); } } } else for (int i = 0; i < effnSite; i++) covMat[i * (effnSite + 1)] = *sill + *nugget; free(dist); free(rho); free(coordGrid); return; }