float sizInc = 0.72;

float splatSizDec = 0.4;

float minSpeed = 20;

float maxOffset = 1;

float maxSiz = 20;

//float maxHay = 500; // hay의 최대값인 듯하나 코드 상에서 사용되지 않음

//float maxTay = 500; // tay의 최대값인 듯하나 코드 상에서 사용되지 않음

float maxVar = 300; // Var의 최대값

float mousX = 3;

float prevMousX;

float mousY = 3;

float prevMousY;

float mousVX;

float mousVY;

float time = 0; 

ArrayList paintDots;

  

void setup()

{

  background(255);

  fill(0);

  size(480, 800);

  smooth();

  paintDots = new ArrayList();

}

 

void draw() {

  updateAll(); 

  fade();

  time += 0.01;

}

 

void fade()

{

  if(time > 10)    // 마우스 오른쪽 버튼을 눌렀을 때 흰색 솔리드가 계솓 덮히면서 화면을 덮어나가는 속도입니다.

  {

    noStroke();

    fill(255,255,255,30);

    rect(0,0,700,500);

    time = 0;

  }

  if(mousePressed && (mouseButton == RIGHT))

  {

    for(int i = paintDots.size()-1; i >= 0; i--)

    {  paintDots.remove(i);  }

    fill(255,255,255);

    rect(0,0,700,500);

  }

}

 

void updateAll()

{

  prevMousX = mousX;

  prevMousY = mousY;

  mousX = mouseX;

  mousY = mouseY;

  mousVX = mousX - prevMousX;

  mousVY = mousY - prevMousY;

  if(mousePressed && (mouseButton == LEFT))

  {  

  // 제가 해석한 바로는 여기가 물감과 그 다음 찍힌 물감간의 거리를 조절하는 부분이란 말이죠?

mousVX = mousX - prevMousX; (마우스가 이동한 간격 = 마우스의 현재 위치- 마우스의 이전 위치) 니까. 여기서 마우스 클릭에 따라 생겨나는 점들의 간격/거리 도 정해지는 거잖아요? 그래서 저희가 간격을 줄여보고자 이 부분에 -100 까지도 해봤는데 간격이 줄어들 생각을 안합니다. 왜일까요? 불쌍한 디자인과 학생 돕는다고 생각하시고 제발 한번만 도와주십셔 ㅠㅠ 어제도 정말 감사했었습니다.

  mousVY = mousY - prevMousY;




      float Tay = random(30,50);

      float Hay = random(30,50);

      float Var = random(0,maxVar);


      {

        paintDots.add(new paintDot(mousX, mousY, Tay,Hay,Var));

      }

   }

   updateDots();

}

 

void updateDots()

{

    print(paintDots.size());

    for (int i = paintDots.size()-1; i >= 0; i--)

    {

      paintDot drop = (paintDot)paintDots.get(i);// An ArrayList doesn't know what it is storing so we have to cast the object coming out

      drop.update();

      drop.display();

      if (drop.finished())

      {

        paintDots.remove(i);

      }

    }

}

 

class paintDot {

  float x, y, vx, vy, siz, prevx,prevy, slow, sizDec,life,vectorVar,vectorTay,vectorHay;

  int r,g,b;

  boolean dripping;

  paintDot (float moux, float mouy, float vT, float vH, float vV) {

    r = (int)random(70,80);

    g = (int)random(28,3);

    b = (int)random(5,15);

    vectorHay = vH;

    vectorVar = vV;

    vectorTay = vT;


    sizDec = splatSizDec;//random(0,splatSizDec);

    float offsetX = pow(random(0,maxOffset),2);

    float offsetY = pow(random(0,maxOffset),2);

    x = moux + random(-1,1)*offsetX;

    y = mouy + random(-1,1)*offsetY;

    vx = vectorTay + random(-1*vectorVar,vectorVar);

    vy = vectorHay + random(-0.75*vectorVar,vectorVar);

    siz = random(1,maxSiz);

  }

   

  void update() {

    vx *= slow;

    vy *=slow;

// 위 두 줄을 주석 처리하면 tay, hay, var의 의미를 알 수 있음

    if(dripping == false)


    prevx = x;

    prevy = y;

    x += vx;

    y += vy;

    siz = (siz * sizDec) + sizInc;

    if(dripping)

    {  siz -= (int)(sizInc);  }

    //print("Dot at " + x + ", " + y + " vx = " + vx + " vy = " + vy + " siz = " + siz);

  }

  

   void display()

  {

    stroke(r,g,b,240);

    strokeWeight((int)siz);

    line(x,y,prevx,prevy);

  }

   

  boolean finished()

  {

    if(vx*vx + vy < minSpeed)

    {

      if(dripping == false)

      {

        dripping = true;



         vx = 0;

         vy = pow(random(0,1.5),2);

         return false;  }

      else{

        return true;

      }

    }

    else

    {

      return false;

    }

  }

}


slow 쓰는 부분을 주석처리해 보니(원래 slow 변수에 어떤 값이 있어야 하는 모양인데 이 코드 상에서는 0.0 값이 들어있어서 0이 곱해져서 작동 안한 거)

tay, hay, var가 작동하는데, vx, vy는 점이 매 프레임마다 이동하는 속도인 듯.

tay, hay는 vx, vy에 쓰일 기준 값, var는 랜덤 범위로 vx, vy에 더할 ~±α에서 α의 크기를 지정.


물감 흩뿌리는 걸 구현한 것으로 보임.