Week 3 – Kamila Dautkhan

Concept 

Overall, I wanted to create something that’s between technical and visual. I was inspired by simple motion studies and minimalist generative art, where small variations in movement and size can create an interesting composition. I didn’t really want the artwork to feel chaotic or overly complex. Instead, I wanted to focus on clarity, repetition and subtle variation. My main idea was to treat each block as its own “entity.” When you look at it you can see that all the blocks follow the same basic rules but they move slightly differently since I wanted to create something chaotic rather than static.

Highlight of the Code

I’m especially proud of this part because it is how the blocks are created and stored using a class and an array:

blocks.push(new Block(random(width), random(height)));

I am proud of it because it represents the core idea of the project. It basically generates multiple objects from the same structure while still allowing each one to behave differently.

Reflection

This project helped me better understand how code structure directly affects the visual outcome. I learned that even very simple rules can produce very interesting results if they are applied consistently. I also became more confident using classes and arrays because it felt quite confusing at first but using them actually made the code much easier to manage.

If I were to continue developing this sketch, I would like to experiment with interaction like having the blocks respond to the mouse or to each other. I’m also very interested in exploring color systems more and maybe using gradients in my future works!



Week 2 – Reading Reflection – Kamila Dautkhan

This video really put into words something I’ve been figuring out with my own work. It’s not “randomness” itself that I find interesting, but what happens when you give a system a little bit of freedom to play with the code itself. I really like when my work starts with something simple and then escalates into something complex and interesting ! Also, I really liked the idea of the artist as a gardener, not a painter.

At the same time, the video’s question about “true randomness” and convergence really caught my attention. If you let systems run long enough, they tend to eventually form some sort of patterns. And it is exactly the kind of thing I enjoy the most: you start very broadly and then some kind of order appears.  And that is exactly what I want to see in my own generative pieces. I don’t want pure static, and I don’t want something completely predictable. I want that middle ground where you can still recognize my own aesthetic in the codes I wrote. This video helped me realize that I’m not just making art with controlled chaos, I’m actually designing a system’s tendencies and then letting the computer show me just how far they can be pushed.

 

Week 2 – Generative Artwork – Kamila Dautkhan

Concept:

let a = 0;
let b = 0;
let c = -1;
var z = 0;
var cef = 45;

function setup() {
  createCanvas(1000, 1000);
  background(200);
}

function draw() {
  
  translate(width/2, height/2);
  rotate(b);
  
  for(let i=0; i < 500; i++){
    
    let x = b*sin(i*300 + c -(a*23));
    let y = 100*a*cos(i*100 + b * c);
    
    let xx = 15*PI*cos((cef+30)*i+z);
    let yy = (45+z%10)*PI*tan((cef-30)*i+z);
    
    stroke(0);
    point(x,y);
    point(xx,yy);
 
  
}
  
  a++;
  b+=0.1;
  c-=5;
  z+=0.01;
  if(1) {
    //cefInc = -cefInc;
  }
  if(cef > 7200) {
    cefInc = -cefInc;
  }
}

 

I personally really appreciate minimalist artworks that is why I created this generative art piece. For me, this piece is about how much mood and tension you can create with almost no visual information at all, and how something that looks quiet and minimal on the surface can still feel alive and constantly shifting underneath. I just wanted to force the focus onto rhythm, contrast, and empty space. I did not use any colors other than black and white to create a sense of sophistication. Also, I think if I added other colors it might be distracting for the audience. It’s meant to be looked at slowly. The longer you stare, the more small patterns and tensions appear between the shapes. 

Code I am particularly proud of:

  let xx = 15*PI*cos((cef+30)*i+z);

  let yy = (45+z%10)*PI*tan((cef-30)*i+z);

I am especially proud of this little detail: z % 10 because it introduces a subtle pulse in the y‑movement, so the motion doesn’t feel flat or robotic. It’s a small trick, but it adds character

 

Reflection:

This generative piece that I made showed me how much I can get out of very little. With just a few evolving variables and some trigonometric functions, I ended up with two overlapping systems of points: one smoother and orbital, the other more unstable and spiky. Their interaction creates a black and white field that feels both structured and slightly out of control, which is exactly the mood I was thinking of. For the future improvements, I would like to make it more interactive for the audience by letting the mouse directly influence the main parameters in my system. For example, the horizontal mouse position could control cef, slowly changing the structure of the tan based pattern, while the vertical position could affect a or z, changing the scale. 



Assignment 1 – Kamila

link

function setup() {
  rectMode(CENTER);
  angleMode(DEGREES);

  createCanvas(600, 700);
}

function draw() {
  background(255);

  //   hair
  fill(61, 13, 6);
  rect(300, 400, 600, 800, 200);

  //   neck
  noStroke();
  fill(209, 166, 146);
  rect(300, 500, 200, 200);

  //   head
  stroke(33, 6, 4);
  strokeWeight(3);
  fill(209, 166, 146);
  ellipse(300, 300, 360, 450);

  //  nose
  noStroke();
  fill(219, 199, 186, 87);
  triangle(350, 360, 300, 270, 250, 360);

  //   eyes
  noStroke();

  fill(254);
  ellipse(220, 240, 90, 70);

  fill(254);
  ellipse(370, 240, 90, 70);

  fill(97, 48, 16);
  ellipse(220, 230, 35, 40);

  fill(97, 48, 16);
  ellipse(370, 230, 35, 40);

  //   ears

    noFill();
    stroke(209, 166, 146);
    strokeWeight(12);
    arc(120, 300, 70, 80, 30, 14, CHORD);

    stroke(209, 166, 146);
    strokeWeight(12);
    arc(480, 300, 70, 80, 30, 14, CHORD);

  // airpods

  fill(5, 0, 0);
  rect(100, 300, 100, 170, 20);

  fill(5, 0, 0);
  rect(500, 300, 100, 170, 20);

  fill(145, 17, 173);
  rect(100, 200, 60, 200, 5, 5, 100, 100);

  fill(145, 17, 173);
  rect(500, 200, 60, 200, 5, 5, 100, 100);

  fill(145, 17, 173);
  stroke(145, 17, 173);
  strokeWeight(50);
  curve(73, 120, 500, 120, 274, 1, 50, 50, 50, 100, 10, 100);
  fill(145, 17, 173);
  stroke(145, 17, 173);
  strokeWeight(50);
  curve(10, 120, 96, 106, 274, 1, 50, 50, 50, 100, 10, 100);

  //  lips
  noStroke();

  stroke(130, 12, 12);
  strokeWeight(7);
  fill(145, 39, 39);
  arc(305, 410, 150, 100, 0, 180, CHORD);

  //   brows
  noStroke();
  fill(64, 17, 14);
  rect(215, 180, 80, 10, 50);

  fill(64, 17, 14);
  rect(365, 180, 80, 10, 50);
}

For this project, I created a self-portrait of mine.  My goal was to use only basic shapes (rectangles, ellipses, triangles, and arcs) to represent my facial features and a few signature details: my hair, bold lipstick, and big headphones.

The part I’m most proud of is the headphone area. I used rectangles for the ear pieces and thick curves for the band to suggest a 3D shape using only 2D primitives:

// airpods fill(5, 0, 0); rect(100, 300, 100, 170, 20); fill(5, 0, 0); rect(500, 300, 100, 170, 20); fill(145, 17, 173); rect(100, 200, 60, 200, 5, 5, 100, 100); fill(145, 17, 173); rect(500, 200, 60, 200, 5, 5, 100, 100); fill(145, 17, 173); stroke(145, 17, 173); strokeWeight(50); curve(73, 120, 500, 120, 274, 1, 50, 50, 50, 100, 10, 100); fill(145, 17, 173); stroke(145, 17, 173); strokeWeight(50); curve(10, 120, 96, 106, 274, 1, 50, 50, 50, 100, 10, 100); The reason I chose this specific chunk of code is because it turned out to be exactly the way I wanted it to look like. The rectangles stack together to feel like ear cups and stems. The thickcurve()lines work as the headband, wrapping over the hair. Reusing the same purple color for all the headphone parts makes it look like one connected object even though it’s made of separate shapes.

I started by setting up the canvas and using rectMode(CENTER) so positioning the neck and hair was easier. I built the face using an ellipse for the head and a rectangle for the neck. I added features (eyes, nose, lips, brows) with ellipses, a triangle, an arc, and rectangles. The hair is a large rounded rectangle in the background. For the AirPods, I experimented with curve() and thick strokeWeight to make a band that feels like it wraps over the head. I didn’t use any image files, textures, or external assets, just p5.js drawing functions.

Breaking everything down into simple shapes helped me understand coordinate systems and layering in p5.js. Also, using consistent color palettes made the portrait feel more cohesive. I would make the sketch more interactive next time. For example: eyes following the mouse, or changing lip color with a key press.