Week 5 Reading

The reading sounded technical to me. It had a lot of insightful new information about interactive designs using computer vision.  The author talked about Low-level computer vision algorithms and three techniques: frame differencing, background subtraction, and brightness thresholding, detecting motion using frame differencing, and differentiating pixels. ­­Detection through brightness thresholding makes desired objects darker or lighter than their surroundings using illumination. Object tracking is related to finding injects based on the brightness of pixels. Basic interaction locating body pixels and the information can be used in graphical responses in interactive systems. He also highlights problems that come with these algorithms for instance, if people are too close or if the physical circumstances are not good enough. Using IR (infrared) helps in these situations. He also talks about how the use of a “telecentric” lens can significantly improve the performance of certain kinds of shape-based or size-based object recognition algorithms.

I liked the quote: “But even the most sophisticated algorithms and highest-quality hardware cannot help us find meaning where there is none or track an object which cannot be described in code” mainly because it emphasizes the limited capabilities of computers and highlights that without human beings and their logic the computer can do nothing because it only understands zeros and ones. I think computer vision algorithm in interactive and computer-based artworks adds more to the user’s experience, and from the reading, it is not as hard or overwhelming as it sounds. I am not a technical person, but I think that the reading provides a good overview of the potential of computer vision in interactive art. It made me think of codes or the digital world as tools with which Art can be empowered and improved and not just something that is solely technical or logical.

 

Week 4 Writing Assignment – Aakif

I don’t know what to say about this reading. It just gave a really good explanation on how things should be designed and what factors to be considered in addition to establishing a lexicon for understanding design for these objects.

I think one thing that I noticed was that he mentioned how as technology improves, it will become more difficult to understand technology, but at the same time it will make it easier to understand technology because of technology. This is true today. As it is quite difficult to understand today’s mobile devices by older people. It requires one to have a familiarity with technology from a young age or have followed the development of technology over the past few years. It almost if new devices have a barrier to entry, and the threshold is quite high. But at the same time it is so much easier to do such complicated tasks in such a short time if you get the hang of it.

Reading Reflection – Week# 3

I am in agreement and disagreement with the author at the same time. I like that the author really makes it a point to clarify that there are degrees of interactivity and that refrigerator is a low level (zero) and conversation is a high level. But I don’t agree with his way of doing away with all the other media and claiming they are zero interactivity e.g. film, music. The claim that there are degrees of interactivity should be justly applied to these media as I think a medium like film is very much interactive as it has the viewer and the maker in a continuous conversation, albeit the method of conversation is a little different than 1:1 live conversation.

I think the author is biased toward high interactivity activities and is ridiculing other media and reducing their significance to interactivity. In my eyes, interactivity or interactive media is anything that someone interacts with, and film and music are perfectly interactive as is conversation. Just as the author says, in even real life conversations, there isn’t a perfect interative conversation ever because there are so many requirements for it. Building off this point, things like film and music are equal to normal conversations on the scale of interactivity.

assignment 3: object oriented programming

For this project, I created a juggling game and named it Morbid Juggler. The only rule is to keep juggling the (eye)balls for as long as possible. I myself don’t really know how to juggle, so I had to think a little bit about how to create the same stressful experience with code, and the p5.js project embedded below is the culmination of that.

The player adds an (eye)ball to the screen by pressing shift on the keyboard, and the new (eye)ball is added at the cursor’s current position. The (eye)ball travels just as a juggler’s ball would in real life, with gravity acting on it, in a parabolic trajectory. The game goes on if the player can catch (click and hold) an eye(ball) before it leaves the screen, and bring it over to the side and release it again. When an (eye)ball is rereleased, it restarts its motion. The player can add as many (eye)balls as they can handle by pressing shift, but there is a counter in the corner that shows how many (eye)balls they have dropped. The game goes on forever: there’s no winning, because in the Morbid Juggler the player is already dead, and they can keep juggling forever. When they run out of (eye)balls, they can just hit shift again.

Note: when the drawing first loads, the canvas needs to be woken up with a click for it to be able to detect key presses.

Behind the scenes, the (eye)balls are objects of the Ball class. When the user hits shift, a new Ball object is instantiated. I think this is where I had the most fun, figuring out how to make the objects move like a real object in free fall. If we launch an object at an angle in a vacuum chamber (no drag), the projectile will have a constant horizontal velocity. Vertically, on the other hand, the object will accelerate due to gravity, and its vertical distance (y) would be a function of time elapsed since launch, which also dictates its horizontal distance (x).

Equipped with this very basic understanding of projectile motion, I save the initial time when an (eye)ball is created, and measure the time that has passed since. This allows me to use values of elapsedTime as a set of x values, which, when plugged into a quadratic equation, give a parabola. Changing the coefficients in the equation allows me to modify the shape of the parabola and thus the trajectory of the (eye)ball, such as how wide the arc created by its motion is. I played around with the coefficients and decided to use (0.4x)(2-x), which works nicely for a canvas of this size.

So I use elapsedTime to move the object horizontally: x=x+elapsedTime/3, and the y values come from the quadratic equation. But I also used the map function to normalize the values, which gives me a nice set of y values from 1 to 5. Both these choices ensure that the simulation runs at a speed appropriate for a playable game.

When the object is created, the time elapsed is zero, so our x value is also zero. As timeElapsed goes on increasing, the y values trace a parabola. The user can click and drag an (eye)ball, and upon release the object’s contactTime property is reset so that timeElapsed is zeroed. This is why the object restarts its parabolic motion.

The drag and drop effect was a little tricky to achieve. Since I’m updating the position of each object using a for loop, and I was trying to update the selected object’s position within the loop, my initial code kept selecting the wrong object for dragging. Although it took me a while to arrive at this, a simple solution was to use a helper function to detect when a particular object is clicked, and then sync its position with mouseX and mouseY in the draw function.

// detect when a user is dragging a ball
function mousePressed() {
  for (let i = 0; i < balls.length; i++) {
    let d = dist(mouseX, mouseY, balls[i].x, balls[i].y);
    if (d < 20) {
      draggingBall = i;
      offsetX = balls[i].x - mouseX;
      offsetY = balls[i].y - mouseY;
      // break oout of the for loop immediately, otherwise a different ball might be selected
      break;
    }
  }
}

For some time, I was trying to import an .obj model into my project so the ball would be 3D. The game would look nicer, but it was starting to get more complicated, and I kept getting errors from the p5 script. i settled for simply rotating the (eye)balls as they move, which is a much simpler workaround but produces a similar visual effect.

Assignment 3

For this assignment I was inspired by Sol Lewitt’s work called Wall Drawings. I wanted to create an algorithm that connects multiple points together with lines similar to the artist’s work which asked people to draw points and join them together with straight lines.

I started off with figuring out how to put random points on the canvas but using classes and arrays. Then, I proceeded on to figure out how to connect them and get rid of the original points. And then I used some code that we saw in class and modified it a little according to my needs to make the points move. I also used the background opacity feature to create a mesmerizing artwork that become more and more hypnotic the more you click on it.

Sketch:

Problems and Potential Future work:

I want to create a further element of interactivity where the points (or lines) move away from the user’s mouse as it is hovered over the canvas. I tried doing it, but ran into confusion due to multiple things going on with the classes and arrays already.

 

let fiftyballs = []; //array for storing however many balls the user wants to create

let xPosition = []; //arrays for x and y position of each point the line begins from
let yPosition = [];
 
let x_Pos; //global variables to make it easy to store the x and y positions of the points
let y_Pos;

let R = 236;
let G = 238;
let B = 129;


let totalcount = 5; // variable for number of points to be created


class ballproducer {
  constructor() {
    
    this.xPos = random(10, width - 10);
    this.yPos = random(10, height - 10);
    
    x_Pos = this.xPos;
    y_Pos = this.yPos;
  
    this.xSpeed = random(-3,3);
    this.ySpeed = random(-3,3);
    
  }
  

  move() {
    // move the ball
    this.xPos += this.xSpeed;
    this.yPos += this.ySpeed;
    x_Pos = this.xPos;
    y_Pos = this.yPos;
  }
  


  checkForCollisions() {
    // check first for left and right wall
    if (this.xPos <= 15 || this.xPos >= width - 15) {
      this.xSpeed = -this.xSpeed;
    }

    // do the same for the ceiling and the floor
    if (this.yPos <= 15 || this.yPos >= height - 15) {
      this.ySpeed = -this.ySpeed;
    }
  }

  draw() {
    circle(this.xPos, this.yPos, 0);
  }
  

}


function setup() {
  createCanvas(600, 600);
  
  frameRate (60);
  
  for (let i = 0; i < totalcount; i++) {
   
    fiftyballs[i] = new ballproducer(); 
  
  }
  
  
}

function draw() {
  
   background(R, G , B  ,15);
    
  
  for (let i = 0; i < totalcount; i++) {
  
    
    xPosition[i] = x_Pos;
    yPosition[i] = y_Pos;
  
    fiftyballs[i].draw();
    fiftyballs[i].move();
    
    fiftyballs[i].checkForCollisions();
    
    line(xPosition[i], yPosition [i], xPosition[i-1], yPosition[i-1]); //draws the line from the previous to the next point
  
}
}

function mouseClicked(){ //each mouse click adds +1 lines to the graphic
  
  R =  random(140,237);
  G = random(160,238);
  B = random(129,237);
  
   
  fiftyballs[totalcount] = new ballproducer(); // adds a new value to the array which has the objects for the balls
  totalcount =  totalcount+1; //increases the number of points or lines by 1 on each click
}

 

Nourhane’s Reading Response week#3

Chris Crawford’s “The Art of Interactive Design” provides a thought-provoking exploration into the intricacies of interaction in the digital realm. His distinction between simple reactivity and genuine interactivity sets a clear framework for understanding the depth and quality of user experiences. Crawford challenges the reader to move beyond superficial engagements and to recognize the profound difference between merely responding to a user’s input and providing a deep, meaningful interactive experience. His insights, derived from his extensive experience in game design, highlight the importance of thoughtful design in creating truly interactive digital products.

However, one might argue that while Crawford’s insights are invaluable, they are also rooted in his personal experiences and biases towards complex interactions, possibly overshadowing simpler but equally meaningful interactive experiences. As technology continues to evolve, the boundaries of what constitutes genuine interactivity might also shift, and Crawford’s definitions, though foundational, might need to be revisited. Since, in reflecting upon this reading, I find myself thinking about technologies like virtual reality and augmented reality that are gaining traction, and how might Crawford’s definitions and boundaries of interactivity evolve? And more importantly, how can designers ensure that as interactions become more complex, they retain the depth and meaningfulness championed in this seminal work?

“Lights of journey” (Assignment 3)

COMING UP WITH THE IDEA

I had a hard time coming up with the project I would like to create. I tried drawing bouncing random lines made from points, but I wasn’t satisfied with the result. The idea of implementing points as the main objects of artwork wasn’t leaving my head, and finally I came up with this:

SKETCH || MEANING || DESCRIPTION

The artwork reminds me of different things. Firstly, it reminds me of a picture of out-of-focus lights you may see at night when your eyes get tired. Another association I have is more philosophical. All the people have different paths in life, and while trying to figure out the path, they get to meet other people who are on the same journey. As time passes, there are fewer and fewer people around them, as they’re getting closer to figuring out their own unique path.

In my project, I combined different concepts I wanted to implement. The first one was background transparency, which gives a feel of points’ traces. Additionally, I decided to make the sketch more interactive; therefore, I added an opportunity to change color modes with a mouse click and an opportunity to stop a function with a click of the up arrow on the keyboard.

{CODE}

// Creating a model for generating points

class RandomPoints {
  constructor () {
    
      // Setting up random starting position on canvas
    
      this.xPos = random(0,600);
      this.yPos = random(0,600);}
  
  // The function generating the dots
  
  pointdraw (strokeWeightnumber, RGBcolor) {
      strokeWeight(strokeWeightnumber);
    
      // Offset is used to make the change of y coordinate more smooth
    
      let offset = 0.0;
      offset = offset + .01;
      let n = noise(offset) * random(-55,55);
    
      // Change of x and y coordinates
    
      let xChange = random(-25,25);
      let yChange = random(- n - 15, n + 15);
      
      this.xPos += xChange;
      this.yPos += yChange;
    
      // Setting up different color modes
      
      if (RGBcolor == 'red'){
        stroke( 50 * random(4, 5), random(70,90),  random(80,150));
      }

      if (RGBcolor == 'green'){
        stroke( random(100,200), 50 * random(3, 5),  random(100,200));
      }

      if (RGBcolor == 'blue'){
        stroke( random(130,150), random(130,200), 50 * random(4,5));
      }
      
      //The generation of points
    
      point(this.xPos, this.yPos);
    }
  }

In this part of the code, the class describes an object (a point) and controls its movements. Furthermore, in class, I described the color-changing modes. I thought about creating a palette of random colors, but decided to stop with three color modes. It enabled me to create a mouse click function that considers the current color option.

THOUGHTS ABOUT FUTURE PROJECTS

I feel that I’m getting more confident with coding and have more freedom in translating concepts from my head to P5. In the future, I would like to make my projects more interactive and give users a broader range of options and control over the things on Canvas.

 

Week 3 Reading Reflection

For me, the concept of interactivity was always intuitive. I never tried to establish the definition of interactivity. The reading helped me delve deeper into what interactivity is and made me think about whether the actions we perform every day that imply interactions with objects can be called interactivity. Moreover, it helped me get a better sense of what interactive design is, which I’ll try to implement in my future projects.

The author made a good point about the three main features of interactivity: listening, thinking, and speaking. But the use of these terms in the text is quite vague. Even though the author considers an act of turning the light on in a refrigerator by human an interaction, I don’t think that this interpretation is right. I believe that the term interactivity should be split between digital interactivity and natural interactivity. I consider them to be two different terms because natural interactivity offers a wider range of reactions than digital interactivity. While interacting with people or other living creatures, we cannot always predict the way another actor will react. At the same time, while interacting with computers, particular actions have specific outcomes that are always the same for each action. Therefore, from my perspective, it would be wise to distinguish between natural and digital interactivity based on the concept of predictability.

 

Assignment 2: Generative art

I wanted to craft a celestial portrait in the cosmic expanse. I wanted to portray the animation of the galaxy in motions with every bit detail. Even though its a bit complex, I started coding. Initially, I experimented with mixing various colors and intertwining with for loop and strokes to create an appearance of radiating rays.This was the output.

And then I tried to make the beginning point to the center. Although I wanted to recreate it like a swirl. And then I added some animations to it. I wanted it to be like ellipse, but I appreciated the artistic form it took, so I opted to leave it unchanged. This was the output.

As I mentioned previously, I had a strong desire to enhance its realism. It occurred to me that with a deeper understanding of 3D animations, I might be able to achieve this goal in the future.

Response to Video – Week 2

I think that the reading really challenged my idea of computer-generated art and how much meaning does it have. I didn’t associate much meaning to algorithmically generated art as I thought it’s just a bunch of code, but after seeing this lecture I find it to be way more meaningful. It is essentially a study of how randomness gives meaning to things in nature, as in nature we see things that follow certain rules, but with slight variation just like how Casey Reas mentions in his lecture.
I am also intrigued by the idea that the universe was all random and chaotic before a God or almighty power brought order to it, as Casey mentions in the beginning of the lecture. I want to relate it to the concept of entropy, which entails that the universe is constantly moving towards a state of randomness; it’s going toward chaos from a state of orderliness. If a certain part is cold and another hot, the laws of physics are making sure that it all becomes equal in temperature everywhere. My questions are:
Is the existence of life and current state of the universe the most likely state that the universe can be in? If entropy is a real thing, is the current state of the universe the most likely scenario, the most homogenous it can get? Or is it merely a stage in the process?