# Circles with polar coordinates

Hi there! I am really interested on Katharina Brunner’s work with circles made with thousand of points. I have read that she made them using a polar coordinate system. I think that she has a package to create them with R. I don’t know what R is, but I ask myself if there is a (easy) way to do somehing like that with processing. Could you please help me to start looking for some tutorial ?

So It is a programming language, shoul I learn It to these kind of things?

No, you don’t have to learn it.

Just use processing.

And How could I start?

1 Like

Ambitious

Regards,

Chrisir

Hi

If you ask how to start learning processing

1 Like

Thank you my funny friends. I was thinking in somehing about polar coordinates or another way to Focus on that, but thank you anyway for your help!

1 Like

Hi

Is this what you want?

Hi @humano

Once I found this but don’t remember the site

``````
final int nbWeeds = 60;
SeaWeed[] weeds;
PVector rootNoise = new PVector(random(123456), random(123456));
int mode = 1;
Boolean noiseOn = true;
PVector center;

void setup()
{
size(1000, 800, P2D);
center = new PVector(width/2, height/2);
strokeWeight(1);
weeds = new SeaWeed[nbWeeds];
for (int i = 0; i < nbWeeds; i++)
{
}
}

void draw()
{
//background(50);
noStroke();
fill(0);//, 50);
rect(0, 0, width, height);
strokeWeight(1);
for (int i = 0; i < nbWeeds; i++)
{
weeds[i].update();
}
stroke(0);
strokeWeight(2);
noFill();
}

void keyPressed()
{
if(key == 'n')
{
noiseOn = !noiseOn;
}else
{
mode = (mode + 1) % 2;
}
}

class MyColor
{
float R, G, B, Rspeed, Gspeed, Bspeed;
final static float minSpeed = .6;
final static float maxSpeed = 1.8;
final static float minR = 200;
final static float maxR = 255;
final static float minG = 20;
final static float maxG = 120;
final static float minB = 100;
final static float maxB = 140;

// final static float minR = 200;
//  final static float maxR = 255;
//  final static float minG = 20;
//  final static float maxG = 120;
//  final static float minB = 100;
//  final static float maxB = 140;

MyColor()
{
init();
}

public void init()
{
R = random(minR, maxR);
G = random(minG, maxG);
B = random(minB, maxB);
Rspeed = (random(1) > .5 ? 1 : -1) * random(minSpeed, maxSpeed);
Gspeed = (random(1) > .5 ? 1 : -1) * random(minSpeed, maxSpeed);
Bspeed = (random(1) > .5 ? 1 : -1) * random(minSpeed, maxSpeed);
}

public void update()
{
Rspeed = ((R += Rspeed) > maxR || (R < minR)) ? -Rspeed : Rspeed;
Gspeed = ((G += Gspeed) > maxG || (G < minG)) ? -Gspeed : Gspeed;
Bspeed = ((B += Bspeed) > maxB || (B < minB)) ? -Bspeed : Bspeed;
}

public color getColor()
{
return color(R, G, B);
}
}
class SeaWeed
{
final static float DIST_MAX = 5.5;//length of each segment
final static float maxWidth = 50;//max width of the base line
final static float minWidth = 11;//min width of the base line
final static float FLOTATION = -3.5;//flotation constant
float mouseDist;//mouse interaction distance
int nbSegments;
PVector[] pos;//position of each segment
color[] cols;//colors array, one per segment
MyColor myCol = new MyColor();
float x, y;//origin of the weed
float cosi, sinu;

{
nbSegments = (int)(p_length/DIST_MAX);
pos = new PVector[nbSegments];
cols = new color[nbSegments];
mouseDist = 40;
pos[0] = new PVector(x, y);
for (int i = 1; i < nbSegments; i++)
{
pos[i] = new PVector(pos[i-1].x - DIST_MAX*cosi, pos[i-1].y - DIST_MAX*sinu);
cols[i] = myCol.getColor();
}
}

void update()
{
PVector mouse = new PVector(mouseX, mouseY);

pos[0] = new PVector(x, y);
for (int i = 1; i < nbSegments; i++)
{
float n = noise(rootNoise.x + .002 * pos[i].x, rootNoise.y + .002 * pos[i].y);
float noiseForce = (.5 - n) * 7;
if(noiseOn)
{
pos[i].x += noiseForce;
pos[i].y += noiseForce;
}
PVector pv = new PVector(cosi, sinu);
pv.mult(map(i, 1, nbSegments, FLOTATION, .6*FLOTATION));

//mouse interaction
//if(pmouseX != mouseX || pmouseY != mouseY)
{
float d = PVector.dist(mouse, pos[i]);
if (d < mouseDist)// && pmouseX != mouseX && abs(pmouseX - mouseX) < 12)
{
PVector tmpPV = mouse.get();
tmpPV.sub(pos[i]);
tmpPV.normalize();
tmpPV.mult(mouseDist);
tmpPV = PVector.sub(mouse, tmpPV);
pos[i] = tmpPV.get();
}
}

PVector tmp = PVector.sub(pos[i-1], pos[i]);
tmp.normalize();
tmp.mult(DIST_MAX);
pos[i] = PVector.sub(pos[i-1], tmp);

//keep the points inside the circle
{
PVector tmpPV = pos[i].get();
tmpPV.sub(center);
tmpPV.normalize();
pos[i] = tmpPV.get();
}
}

updateColors();

if (mode == 0)
{
stroke(0);
}
beginShape();
noFill();
for (int i = 0; i < nbSegments; i++)
{
if (mode == 1)
{
stroke(cols[i]);
vertex(pos[i].x, pos[i].y);
//line(pos[i].x, pos[i].y, pos[i+1].x, pos[i+1].y);
} else
{

noStroke();
ellipse(pos[i].x, pos[i].y, 2, 2);
}
}
endShape();
}

void updateColors()
{
myCol.update();
cols[0] = myCol.getColor();
for (int i = nbSegments-1; i > 0; i--)
{
cols[i] = cols[i-1];
}
}
}

``````
``````float ang = 0.0;
float x;
float y;
float rot;
float turn_pts = 14 ;

void setup() {
size(400, 400);
background(0);
}

void draw() {

float x = cos(ang)*150;
float y = sin (ang)*50;

translate(width/2, height/2);
rotate(rot);
noStroke() ;
fill(ang*25,ang*15,ang*5);
ellipse(x, y, 10, 10);
ang += 0.05;
rot += 0.05/turn_pts;
}

``````
1 Like

for trig & circle see https://processing.org/tutorials/trig

an example

an example based on this tutorial (last example)

``````

float px, py; // , px2, py2;

float angle1, angle2, angle3, angle4;

float frequency = 2;

float x, x2;

void setup() {
size(1600, 200);
background (127);
}

void draw() {
// background (127);

circle1();
circle2();
circle3();
circle4();
}

// --------------------------------------------------------------------

void circle1() {
noStroke();
fill(255);

// Rotates rectangle around circle
fill(0);

rect (px, py, 5, 5);
stroke(100);
line(600/8, 75, px, py);
stroke(200);

angle1 -= frequency;
}

void circle2() {

if (abs(angle2)>363)
return;

noStroke();
fill(255);

// Rotates rectangle around circle
fill(0);

rect (px, py, 5, 5);
stroke(100);
line( 2.7*600/8, 75, px, py);
stroke(200);

angle2 -= frequency*2.992687;
}

void circle3() {
return;

noStroke();
fill(255);

// Rotates rectangle around circle
fill(0);

rect (px, py, 5, 5);
stroke(100);
line( 4.9*600/8, 75, px, py);
stroke(200);

angle3 -= frequency*2.992687;
}

void circle4() {
return;

noStroke();
fill(255);

// Rotates rectangle around circle
fill(0);

rect (px, py, 5, 5);
stroke(100);
// line( 6.9*600/8, 75, px, py);
stroke(200);

angle4 -= frequency*2.992687;
}

``````
2 Likes

Thank you so much! I have a lot of material to start working now

2 Likes

This thread about Spirographs features some code that you could play around with

1 Like