int main(int argc, char * argv[]) { memset(image, 98, sizeof(image)); value=162; m=0.5;dm=0.7;x=130;y=171-10; swirl(200); K=2;dk=1.0005;m=0.5;dm=0.7;x=129;y=170; swirl(280); printf("P5\n386 320\n255\n"); fwrite(image, sizeof(image), 1, stdout); return 0; }
void swirl(int n) { if (n) { dx = cos(m); dy = sin(m); segment(); m += dm; dm *= 0.9965; swirl(n-1); } }
void Effects::applyEffect(const string& fx) { if(fx == "flip") { flip(true); } else if(fx == "mirror") { mirror(true); } else if(fx == "invert") { invert(true); } else if(fx == "ripple") { ripple(true, 3.5); } else if(fx == "posterize") { posterize(true); } else if(fx == "pixelate") { pixelate(true, pixelate_x, pixelate_y); } else if(fx == "wave") { wave(true, wave_speed, wave_displace, wave_num); } else if(fx == "swirl") { swirl(true, swirl_radius, swirl_angle); } else if(fx == "shake") { shake(true, shake_duration, shake_number, shake_amplitude); } else if(fx == "reflect") { reflect(true); } else if(fx == "crack") { crack(true); } else if(fx == "love") { love(true); } }
int makeGeometry(Box& a_domain) { Real dx; RealVect origin; int eekflag = 0; //parse input file ParmParse pp; Vector<int> n_cell(SpaceDim); pp.getarr("n_cell",n_cell,0,SpaceDim); CH_assert(n_cell.size() == SpaceDim); IntVect lo = IntVect::Zero; IntVect hi; for (int ivec = 0; ivec < SpaceDim; ivec++) { if (n_cell[ivec] <= 0) { pout() << " bogus number of cells input = " << n_cell[ivec]; return(-1); } hi[ivec] = n_cell[ivec] - 1; } a_domain.setSmall(lo); a_domain.setBig(hi); Vector<Real> prob_lo(SpaceDim, 1.0); Real prob_hi; pp.getarr("prob_lo",prob_lo,0,SpaceDim); pp.get("prob_hi",prob_hi); dx = (prob_hi-prob_lo[0])/n_cell[0]; RealVect dxVect = dx*RealVect::Unit; for (int idir = 0; idir < SpaceDim; idir++) { origin[idir] = prob_lo[idir]; } int verbosity = 0; int whichgeom; pp.get("which_geom",whichgeom); EBIndexSpace* ebisPtr = Chombo_EBIS::instance(); if (whichgeom == 0) { //allregular pout() << "all regular geometry" << endl; AllRegularService regserv; ebisPtr->define(a_domain, origin, dx, regserv); } else if (whichgeom == 1) { pout() << "ramp geometry" << endl; int upDir; int indepVar; Real startPt; Real slope; pp.get("up_dir",upDir); pp.get("indep_var",indepVar); pp.get("start_pt", startPt); pp.get("ramp_slope", slope); RealVect normal = RealVect::Zero; normal[upDir] = 1.0; normal[indepVar] = -slope; RealVect point = RealVect::Zero; point[upDir] = -slope*startPt; bool normalInside = true; PlaneIF ramp(normal,point,normalInside); GeometryShop workshop(ramp,verbosity,dxVect); //this generates the new EBIS ebisPtr->define(a_domain, origin, dx, workshop); } else if (whichgeom == 5) { pout() << "sphere geometry" << endl; vector<Real> sphere_center(SpaceDim); pp.getarr("sphere_center",sphere_center, 0, SpaceDim); RealVect sphereCenter; for (int idir = 0; idir < SpaceDim; idir++) { sphereCenter[idir] = sphere_center[idir]; } Real sphereRadius; pp.get("sphere_radius", sphereRadius); bool insideRegular = false; SphereIF implicit(sphereRadius,sphereCenter,insideRegular); GeometryShop workshop(implicit,verbosity,dxVect); //this generates the new EBIS ebisPtr->define(a_domain, origin, dx, workshop); } else if (whichgeom == 13) { pout() << "rhodonea geometry" << endl; vector<Real> tmp(SpaceDim); pp.getarr("rhodonea_center", tmp, 0, SpaceDim); RealVect rhodoneaCenter; for (int idir = 0; idir < SpaceDim; idir++) { rhodoneaCenter[idir] = tmp[idir]; } Real innerRadius; pp.get("inner_radius", innerRadius); Real outerRadius; pp.get("outer_radius", outerRadius); int frequency; pp.get("frequency", frequency); bool insideRegular = false; RhodoneaIF implicit(innerRadius, outerRadius, frequency, rhodoneaCenter, insideRegular); GeometryShop workshop(implicit,verbosity,dxVect); //this generates the new EBIS ebisPtr->define(a_domain, origin, dx, workshop); } else if (whichgeom == 18) { pout() << "Low swirl burner geometry" << endl; // AttachDebugger(); Box domain; for (int idir = 0; idir < SpaceDim; idir++) { origin[idir] = prob_lo[idir]; } Real outerRadius; pp.get("outer_radius",outerRadius); Real outerThick; pp.get("outer_thick",outerThick); Real outerHeight; pp.get("outer_height",outerHeight); Real outerOffset = ((prob_hi - prob_lo[0]) - outerHeight) / 2.0 + prob_lo[0]; Real innerRadius; pp.get("inner_radius",innerRadius); Real innerThick; pp.get("inner_thick",innerThick); Real innerOffset = 0.0; innerOffset += outerOffset; Real innerHeight; pp.get("inner_height",innerHeight); Real plateHeight; pp.get("plate_height",plateHeight); plateHeight += outerOffset; Real plateThick; pp.get("plate_thick",plateThick); int doHoles; pp.get("do_holes",doHoles); Real holeRadius; pp.get("hole_radius",holeRadius); Real holeSpace; pp.get("hole_space",holeSpace); int vaneNum; pp.get("vane_num",vaneNum); Real vaneThick; pp.get("vane_thick",vaneThick); RealVect vaneNorm; Vector<Real> vectVaneNorm; pp.getarr("vane_norm",vectVaneNorm,0,SpaceDim); for (int idir = 0; idir < SpaceDim; idir++) { vaneNorm[idir] = vectVaneNorm[idir]; } Real vaneOffset; pp.get("vane_offset",vaneOffset); Real vaneHeight = innerHeight - 2*vaneOffset; vaneOffset += outerOffset; // Make the outer chamber BaseIF* outerChamber = makeChamber(outerRadius,outerThick, outerOffset,outerHeight); // Make the inner chamber BaseIF* innerChamber = makeChamber(innerRadius,innerThick, innerOffset,innerHeight); // Make the inner plate with holes BaseIF* holyPlate = makePlate(plateHeight,plateThick,innerRadius, doHoles,holeRadius,holeSpace); // Make the vanes BaseIF* vanes = makeVanes(vaneNum,vaneThick,vaneNorm,innerRadius,outerRadius, vaneOffset,vaneHeight); // Union all the pieces together Vector<BaseIF*> pieces; pieces.push_back(outerChamber); pieces.push_back(innerChamber); pieces.push_back(holyPlate); pieces.push_back(vanes); UnionIF swirl(pieces); ComplementIF outside(swirl,true); GeometryShop workshop(outside,verbosity,dxVect); // This generates the new EBIS EBIndexSpace* ebisPtr = Chombo_EBIS::instance(); ebisPtr->define(a_domain, origin, dx, workshop); } else { //bogus which_geom pout() << " bogus which_geom input = " << whichgeom; eekflag = 33; } return eekflag; }