오늘은~^^* 긍정적인 신호를 폭넓게 조망하고 위험한 신호를 긴밀하게 알아채는 레이다를 태초의 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는 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의 생존력이
후세에 잘 전해지면 좋겠어요!!!
내일 우리 또 만나서 공부 함께 하는 것인가요~^^*
네~^^* 좋아요~^^* 고마워요~^^*
오늘도 멋진 하루를 보내시기 바래요!
반가운 만남 기쁨 나누는 보람찬 하루 보내시고요~!!!
뿌듯함에 가슴 통통 두드리며 깊고 따뜻한 잠 코~^^* 하시기 바래요~^^*
네~^^* 꿈은 이루어 집니다~^^*
댓글 남기기