stevesketch
5/18/2016 - 3:56 AM

## #PVector Functions

``````PVector randomInCirc(float cx, float cy, float d) {
d/=4;
float t = TWO_PI*random(d);
float u = random(d)+random(d);
d = (u>1) ? 2-u : u;
return new PVector(cx+d*cos(t), cy+d*sin(t));
}

PVector randomInCircSnap(float cx, float cy, float d, int snap) {
d/=4;
float t = TWO_PI*random(d);
float u = random(d)+random(d);
d = (u>1) ? 2-u : u;
PVector end =  new PVector(cx+d*cos(t), cy+d*sin(t));

return new PVector(round((end.x/snap))*snap, round((end.y/snap))*snap);
}

PVector randomInTri(PVector A, PVector B, PVector C) {
float r1 = random(1);
float r2 = random(1);
float x = (1 - sqrt(r1)) * A.x + (sqrt(r1) * (1 - r2)) * B.x + (sqrt(r1) * r2) * C.x;
float y = (1 - sqrt(r1)) * A.y + (sqrt(r1) * (1 - r2)) * B.y + (sqrt(r1) * r2) * C.y;
return new PVector(x, y);
}``````
``````PVector quantize2dVector(PVector v, int units)
{
float d = dist(v.x, v.y,0,0);
float a = atan2(v.y,v.x);

a = round(a*units/TWO_PI) * TWO_PI/units;

return new PVector( cos(a)*d, sin(a)*d );
}``````
``````void setup()
{
size(500,500);
}
void draw()
{
background(255);
pushMatrix();
translate(width/2, height/2);
PVector m = new PVector(mouseX, mouseY);
PVector c = new PVector(width/2, height/2);
// Compuate actual vector towards mouse
float d = PVector.dist(m,c);
float a = atan2(mouseY-width/2, mouseX-height/2);

PVector v = new PVector(cos(a)*d, sin(a)*d);
float mag = v.mag();
println(mag);
// Draw original line
strokeWeight(2);
stroke(0);
line(0,0, v.x, v.y);

// Quantize it
v = quantize2dVector(v,8);

// Draw Quantized line in green
stroke(0,255,0);
line(0,0, v.x, v.y);
popMatrix();
}

PVector quantize2dVector(PVector v, int units)
{
float d = dist(v.x, v.y,0,0);
float a = atan2(v.y,v.x);

a = round(a*units/TWO_PI) * TWO_PI/units;

return new PVector( cos(a)*d, sin(a)*d );
}``````
``_``