Silverback9

#야생으로

Creative Coding 독학 제325일 2025년02월15일(토)

오늘은~^^* 긍정적인 신호를 폭넓게 조망하고 위험한 신호를 긴밀하게 알아채는 레이다를 태초의 vehicle 부족에게 장착해 드리는 날~^^* Yeah~^^*

힘이 나는 음식을 잘 챙겨먹는 것도 참 중요한 것 같고요~^^*

긍정적인 시각을 폭넓게 가진다는 것의 힘을 실감한 요즘이기도 한데요~^^*

힘이 나는 음식도 챙겨먹고 더 폭넓은 긍정적인 시각으로 스스로를 격려를 하여 꿈을 이루어 본 경험이 있는 선조님 덕분에~^^* 그 생활자세와 마인드를 물려받은 후세님는 작은 도전들의 작은 실패가 주는 좌절감을 떨쳐내고~^^* 더욱 노력하여 꿈을 향해 전진하게 되는데요~^^*

후세님의 맹활약에 뿌듯해 하면서, 선조님도 꿈너머 꿈을 향해 더욱 묵묵히 전진하게 되는데요~^^*

긍정적인 신호를 폭넓게 받아들이고 위험한 신호를 긴밀하게 포착하는 레이더를 우리의 태초의 vehicle 부족에게 장착해 볼게요~^^* 편안한 아침 보내고 계셔요~^^* 공부 정리하고 올게요~^^* 쓩우웅~^^*

몸에 좋은 음식을 폭넓게 조망하고 몸에 위험한 독약을 아주 가까이에서 알아채는 레이더를 유전자에 심어보겠습니다.

class Vehicle {
  constructor(x, y) {
      .
      .
      .
    this.dna = [];
    this.dna[0] = random(-2, 2);
    //food에 대한 멀어지고픔 최대치 -2 끌림 최대치 +2 사이 무작위 값
    this.dna[1] = random(-2, 2);
    //poison에 대한 멀어지고픔 최대치 -2 끌림 최대치 +2 사이 무작위 값
    this.dna[2] = random(0,100);
    //음식을 인식할 수 있는 범위 0에서 100 사이 무작위 값
    this.dna[3] = random(0,100 );
    //독약을 인식할 수 있는 범위 0에서 100 사이 무작위 
    
  }
    .
    .
    .
}

이 유전자들을 시각적으로 표현해 보겠습니다~^^*

원을 그리는 함수 ellipse()는 (x, y, Diameter) 즉 (x축 중심좌표, y축 중심좌표, 지름)을 parameter로 받습니다~^^*.

그래서, 인식 범위의 radius 반지름 값을 나타내는 dna[2], dna[3]에 2를 곱하여 Diameter 지름 값을 만들어서, ellipse()를 호출할 때 argument로 넘겨 주겠습니다~^^*

class Vehicle {    
     .
     .
     .
  draw() {
        .
        .
        .
    noFill();
    stroke(0, 255, 0);
    line(0, 0, 0,-this.dna[0] * 20);
    ellipse(0, 0, this.dna[2] * 2);
    //food를 인식할 수 있는 범위를 원으로 표현합니다~^^*
    stroke(255, 0, 0);
    line(0, 0, 0,-this.dna[1] * 20);
    ellipse(0, 0, this.dna[3] * 2);
    //poison을 인식할 수 있는 범위를 원으로 표현합니다~^^*
        .
        .
        .
  }
     .
     .
     .
}

이제~^^*

food가 인식 범위에 있으면 다가가 보겠습니다. 그리고 5 pixel보다도 가까이 있다면 food를 맛있게 먹는 것이지요~!!!

poison이 인식 범위에 있으면 피하도록 하겠습니다~^^*

그럴러면…

그렇죠!!!

먹는 함수 eat()와 행동 함수 behaviours()를 개선해 봐야 할 것 같아요~^^*

 behaviors(good, bad) {
     const steerG = this.eat(good, 0.2, this.dna[2]);
     //몸에 좋은 음식에 대한 반응행동 벡터 steerG입니다.
     //건강 상태 지수가 0.2 증가하겠네요~^^*
     //food 인식 범위 dna[2]를 perception 값으로 전해주겠습니다. 
     const steerB = this.eat(bad, -0.5, this.dna[3]);
     //몸에 나쁜 음식에 대한 반응행동 벡터 steerB입니다.
     //건강 상태 지수가 0.5 줄어들겠네요...
     //poison 인식 범위 dna[3]를 perception 값으로 전해주겠습니다. 

     steerG.mult(this.dna[0]);
     //몸에 좋은 것에 대한 기억인 dna[0]에 저장된 값을 좋은 음식에 대한 반응행동 벡터 steerG의 크기에 곱하겠습니다.  
     steerB.mult(this.dna[1]);
     //몸에 나쁜 것에 대한 기억인 dna[1]에 저장된 값을 나쁜 음식에 대한 반응행동 벡터 steerB의 크기에 곱하겠습니다. 

     this.applyForce(steerG);
     this.applyForce(steerB);
      //vehicle의 행동에 이 반응벡터 steerG와 steerB가 영향을 끼칩니다.     
  }
  
   eat(list, nutrition, perception) {
    var record = Infinity;
    var closest = -1;
    for (var i = 0; i < list.length; i++) {
      var d = this.position.dist(list[i]);
      if(d < record && d < perception) {
      //거리가 이전 기록보다 더 가깝고 인식범위 안에 있으면
        record = d;
        closest = i;
      //기록을 갱신합니다. 
      }
    }
    
    if(record < 5 ) {
      list.splice(closest, 1);
      this.health += nutrition;
      //영양가를 건강상태 지수에 더합니다.
      //몸에 좋은 음식의 영양가는 건강상태 지수를 높이고
      //몸에 위험한 독약의 영양가는 건강상태 지수를 낮춥니다. 
    } else if(closest > -1) {
      return this.seek(list[closest]);  
    }
    return createVector(0,0);
  }
  

이제~^^* food와 poison에 대한 인식범위를 유전자에 장착한 태초의 vehicle 부족을 만나보러 가실까요~^^* 여러 번 플레이를 해 보면…poison 인식 범위가 좁고 food 인식 범위가 넓은 vehicle이 좀 더 오래 생존하는 것이 보이시나요~^^*

이제 좀더 자연스러운 생태계를 만들어 볼게요~^^* 이미 food는 0.05 확률로 더해지고 있는데요~^^* poison도 0.01 확률로 더해지도록 해보겠습니다~^^*

draw() {
   .
   .
   .
 if( random(1) < 0.01) {
     var x = random(width);
     var y = random(height);
     poison.push(createVector(x, y));
  }
//poison도 살짝 추가해 보겠습니다. 0.01확률로 추가해 볼게요~^^*
   .
   .
   .
}  

food도 추가 공급되고 poison도 추가 공급되는…짜릿한…생태계가 조성되었습니다…태초의 vehicle 부족이 잘 생존하시길 바라며 플레이~~^^*

네~^^* 오늘 저와 함께 food에 대한 전망 범위 그리고 poison에 대한 전망 범위를 가진 최신형 레이더를 태초의 vehicle 부족에게 장착해 주셔서 감사합니다~^^*

긍정적 신호들을 폭넓게 포착하며 긍정적 세계관을 유지하며 앞으로 앞으로 전진하면서도

위험한 신호들을 긴밀하게 포착하여 빠르게 예방 조치를 취하는 멋진 vehicle의 생존력이

후세에 잘 전해지면 좋겠어요!!!

내일 우리 또 만나서 공부 함께 하는 것인가요~^^*

네~^^* 좋아요~^^* 고마워요~^^*

오늘도 멋진 하루를 보내시기 바래요!

반가운 만남 기쁨 나누는 보람찬 하루 보내시고요~!!!

뿌듯함에 가슴 통통 두드리며 깊고 따뜻한 잠 코~^^* 하시기 바래요~^^*

네~^^* 꿈은 이루어 집니다~^^*

댓글 남기기