class SineSphere extends SCPattern {
private SawLFO yrot = new SawLFO(0, TWO_PI, 3000);
private SawLFO yrot2 = new SawLFO(0, -TWO_PI, 8000);
+
public final Projection sinespin;
public final Projection sinespin2;
- private BasicParameter rotation = new BasicParameter("rotation", 0);
+
+ //to-do: how to sync all hues across sphery's via one basicparameter
+ //public BasicParameter huespread = new BasicParameter("HueSpread", 180, 360);
+ public BasicParameter rotationx = new BasicParameter("rotx", 0, 0, 1 );
+ public BasicParameter rotationy = new BasicParameter("roty", 1, 0, 1);
+ public BasicParameter rotationz = new BasicParameter("rotz", 0, 0, 1);
+
float modelrad = sqrt((model.xMax)*(model.xMax) + (model.yMax)*(model.yMax) + (model.zMax)*(model.zMax));
Pick Sshape;
public final PVector P = new PVector();
public BasicParameter huespread;
public BasicParameter bouncerate;
public BasicParameter bounceamp;
+ public BasicParameter vibrationrate;
public final PVector circlecenter = new PVector();
public Sphery(float f1xcenter, float f1ycenter, float f1zcenter, float vibration_min, float vibration_max, float vperiod)
this.vperiod = vperiod;
//addParameter(bounceamp = new BasicParameter("Amp", .5));
//addParameter(bouncerate = new BasicParameter("Rate", .5)); //ybounce.modulateDurationBy(bouncerate);
- addParameter(widthparameter = new BasicParameter("Width", .1));
- addParameter(huespread = new BasicParameter("Hue", .5, 10));
+ //addParameter(vibrationrate = new BasicParameter("vibration", 1000, 10000));
+ addParameter(widthparameter = new BasicParameter("Width", .2));
+ addParameter(huespread = new BasicParameter("Hue", 0, 180));
- addModulator( vx = new SinLFO(-4000, 10000, 100000)).trigger() ;
+ addModulator( vx = new SinLFO(500, 10000, 100000)).trigger() ;
//addModulator(xbounce = new SinLFO(model.xMax/3, 2*model.yMax/3, 2000)).trigger();
- addModulator(ybounce= new SinLFO(model.yMax/3, 2*model.yMax/3, 240000./lx.tempo.bpm())).trigger(); //ybounce.modulateDurationBy
+ addModulator(ybounce= new SinLFO(model.yMax/3, 2*model.yMax/3, 240000./lx.tempo.bpm())).trigger(); //bounce.modulateDurationBy
//addModulator(bounceamp); //ybounce.setMagnitude(bouncerate);
- addModulator( vibration = new SinLFO(vibration_min , vibration_max, 240000./lx.tempo.bpm())).trigger(); //vibration.modulateDurationBy(vx);
+ addModulator( vibration = new SinLFO(vibration_min , vibration_max, 240000)).trigger(); //vibration.setPeriod(240000/lx.tempo.bpm());
}
+
+ //for an ellipse
public Sphery(float f1xcenter, float f1ycenter, float f1zcenter, float f2xcenter, float f2ycenter, float f2zcenter,
float vibration_min, float vibration_max, float vperiod)
}
+void setVibrationPeriod(double period){
+// to-do: make this conditional upon time signature
+vibration.setPeriod(period);
+
+}
float distfromcirclecenter(float px, float py, float pz, float f1x, float f1y, float f1z)
float quadrant(PVector q) {
float qtheta = atan2( (q.x-f1xcenter) , (q.z - f1zcenter) );
- //println( "qtheta " + qtheta);
- return map(qtheta, -PI/2, PI/2, 140, 240);
+
+ return map(qtheta, -PI/2, PI/2, 160-huespread.getValuef(), 240 +huespread.getValuef());
//if (q.x > f1xcenter ) {return 140 ;}
//else {return 250;}
}
color spheryvalue (PVector p, float f1xcenter, float f1ycenter, float f1zcenter) {
circlecenter.set(f1xcenter, f1ycenter, f1zcenter);
- // circlecenter = new PVector(f1xcenter, f1ycenter, f1zcenter);
+
//switch(sShpape.cur() ) {}
float b = max(0, 100 - 100*widthparameter.getValuef()*abs(p.dist(circlecenter)
}
return lx.hsb(
- constrain(huespread.getValuef()*5*quadrant(p), 0, 360),
+ constrain(quadrant(p), 0, 360),
80,
b
);
super(glucose);
sinespin = new Projection(model);
sinespin2 = new Projection(model);
+ addParameter(rotationx);
+ addParameter(rotationy);
+ addParameter(rotationz);
addModulator(yrot).trigger();
addModulator(yrot2).trigger();
- addParameter(rotation);
+
+ //addParameter(huespread);
//Sshape = addPick("Shape", , 1);
spherys = new Sphery[] {
new Sphery(model.xMax/4, model.yMax/2, model.zMax/2, modelrad/16, modelrad/8, 3000),
// }
public void run( double deltaMs) {
- float t = lx.tempo.rampf();
- float bpm = lx.tempo.bpmf();
+ double t = lx.tempo.ramp();
+ double bpm = lx.tempo.bpm();
spherys[0].run(deltaMs);
spherys[1].run(deltaMs);
spherys[2].run(deltaMs);
spherys[3].run(deltaMs);
-
+ for ( Sphery s: spherys){
+ s.setVibrationPeriod(240000/bpm);
+ s.vibration.setBasis(t);
+ }
sinespin.reset(model)
.translateCenter(model, 0, 0, 0)
// .scale(1.3,1.3,1.3)
// Rotate around the origin (now the center of the car) about an y-vector
- .rotate(yrot.getValuef(), 0, 1 , 0)
+ .rotate(yrot.getValuef(), rotationx.getValuef(), rotationy.getValuef() , rotationz.getValuef())
.translate(model.cx, model.cy, model.cz);