오늘은~~^^*
Interactive Selection 상호작용 선택 알고리즘 기반의 Interactive Media 상호작용 미디어 작품의 코드를 살펴 보는 날이예요~~^^*
YEAH~~^^*
그런데요~~^^* 크리스마스가 되기까지 3일 남았네요~^^*
숫자 3은 음(1)과 양(2)이 서로 조화를 이루어 화합하고 새로운 것을 창조한다는 의미를 가지고 있다고 하네요~^^*
네~^^*
피아노 듀오 + 오케스트라 + 합창단
피아노 솔로 + 오케스트라 + 사람 테너 + 인형 중창
여성 트리오 + 바이올린 + 오케스트라 + 합창단
여성 아이돌 솔로 + 남성 아이돌 중창
나와 너가 만나 우리를 넘어선 그 무언가를 창조하는 멋진 날~^^*
크리스마스 되기 3일 남은 날이예요~^^*
우리도~~^^* 크리스마스 3일 남은 날답게~^^*
멋진 창작품인 Interactive Media 상호작용 미디어 작품의~^^*
상호작용 선택 Interactive Selection의 핵심 코드를 함께 살펴 볼까요~^^*
YEAH~^^*
노래 듣고 계시면~^^* 코드 정리해서 바로 돌아올게요~~^^* 쓩~^^*
- 이 꽃들의 genotype 유전형을 살펴 보겠습니다~^^*
이 꽃들의 DNA인 배열 genes[]는 genes[0]에서 genes[13]까지 14개의 구성요소를 가지고 있습니다.
그리고 구성요소 genes[i]에 기록된 DATA 정보는 0과 1 사이의 무작위 실수입니다~^^*
class DNA {
constructor() {
this.genes = [];
for (let i = 0; i < 14; i++) {
this.genes[i] = random(0, 1);
}
}
.
.
.
}
2. 이 꽃들의 phenotype 표현형을 살펴 보겠습니다~^^*
class Flower {
.
.
.
show() {
let genes = this.dna.genes;
let c = color(genes[0], genes[1], genes[2], genes[3]);
// 꽃잎 색을 변수 c에 저장합니다. genes[0],[1], [2], [3]이 각각 Red 빨강, Green 초록, Blue 파랑, Opacity 불투명도 값이 되어, 함수 color()가 색상값을 만들어 주는 것 같습니다.
//그런데....genes[i]의 값이 0에서 1사이의 실수인데...
//그러면...color()의 값이 검은데 투명하여 눈에 안보일 것 같은데...
//그래서...map(genes[i], 0, 1, 0, 255)를 사용하여
//0에서 255까지 값 차이를 내어 주어야 할 것 같은데...
//그런 작업 없이 바로 변수 c에 저장하는 것이 좀 의아합니다.
//플레이를 해보면 색이 잘 나오고 있어서...
//함수 color() 안에 mapping 기능이 내장되어 있나...싶기도 한데...
//함수 color()만 따로 테스트 해보면..color(R, G, B) 무채색 color(R, G, B, O) 투명색으로 나와서 고개를 갸우뚱거리게 되어요....
//테스트를 해 보시겠어요?
let size = map(genes[4], 0, 1, 4, 24);
//꽃잎 크기입니다. 수치는 0=> 4 1=> 24 비례관계로 mapping하여 조정합니다.
let count = floor(map(genes[5], 0, 1, 2, 16));
//꽃잎 갯수입니다. 수치는 0=> 2 1=> 16 비례관계로 mapping하여 조정합니다.
let centerColor = color(genes[6], genes[7], genes[8]);
//꽃 가운데 부분 색상입니다. 근데 mapping 작업은요????
let centerSize = map(genes[9], 0, 1, 24, 48);
//꽃 가운데 부분 크기입니다. 수치는 수치는 0=> 24 1=> 48 비례관계로 mapping하여 조정합니다.
let stemColor = color(genes[10], genes[11], genes[12]);
//줄기 색상입니다. 근데 mapping 작업은요?
let stemLength = map(genes[13], 0, 1, 50, 100);
//줄기 길이입니다.수치는 0=> 50 1=> 100 비례관계로 mapping하여 조정합니다.
push();
translate(this.x, this.y);
// 사각형 둘레를 그립니다.
if (this.rolloverOn) fill(0, 0.25);
else noFill();
stroke(0);
strokeWeight(0.5);
rectMode(CENTER);
rect(0, 0, this.w, this.h);
translate(0, this.h / 2 - stemLength);
// 줄기를 그립니다.
stroke(stemColor);
strokeWeight(4);
line(0, 0, 0, stemLength);
noStroke();
// 꽃잎을 그립니다.
fill(c);
for (let i = 0; i < count; i++) {
let angle = map(i, 0, count, 0, TWO_PI);
let x = size * cos(angle);
let y = size * sin(angle);
ellipse(x, y, size, size);
}
// 꽃 중심을 그립니다.
fill(centerColor);
ellipse(0, 0, centerSize, centerSize);
pop();
// Fitness 적합성 수치를 보여줍니다.
textAlign(CENTER);
if (this.rolloverOn) fill(0);
else fill(0.25);
text("" + floor(this.fitness), this.x, this.y + 90);
}
// 마우스가 꽃 주변에 있으면 Fitness 적합성 수치를 올립니다.
rollover(mx, my) {
if (this.boundingBox.contains(mx, my)) {
this.rolloverOn = true;
this.fitness += 0.25;
} else {
this.rolloverOn = false;
}
}
}
네~^^* 오늘 저와 함께 꽃들의 genotype 유전형과 phenotype 표현형에 대한 핵심코드를 살펴봐 주셔서 감사합니다~^^*
그리고~^^*
함수 color()의 0과 1 사이 실수 mapping 기능 내장 여부에 대해 함께 고민해 주셔서 감사합니다.
mapping 기능이 내장되어 있지 않은 것 같은데….
좀더 고민해 보겠습니다~~^^*
슬퍼하거나 괴로워하는 가사인데 왠지 신나게 되는 오묘한 박자라서 세월을 거슬러 여전히 흥미로운 노래처럼~^^* 0과 1 사이 수 => 0과 255 사이 수 mapping이 안되는 것 같은데 색상은 잘 나오고 있는 오묘한 프로그램인 것 같아요~^^* 신기하네요….^^* 숫자 3의 비밀을 담고 있는 함수 color()인가요~^^*?
내일은 우리 음악 함께 듣고요~^^*
화요일 다시 코딩 공부 이어갈까요~~^^*
화합과 창조의 수 3~~!!!
크리스마스 3일 전인 오늘도 멋진 하루! 보내시고요~!
내일 우리 다시 또 만나요~!
네~!! 꿈은 이루어 집니다~~!!
앗!!! 잠시만요!!!!
원인을 찾아 내었습니다~~!!!
원인은, setUp() 함수에서 함수 colorMode(RGB, 1); 사용을 안해서 입니다!!!
꽃 프로그램의 setUp() 파트를 보시면~~^^* colorMode()를 사용하고 있습니다!
function setup() {
createCanvas(640, 240);
colorMode(RGB, 1);
// This is a very small population!
let populationSize = 8;
// A pretty high mutation rate here, our population is rather small we need to enforce variety
let mutationRate = 0.05;
// Create the population
population = new Population(mutationRate, populationSize);
// A p5.js button
button = createButton("evolve new generation");
button.mousePressed(nextGeneration);
button.position(10, 10);
}
그래서~^^* 함수 color() 테스트 프로그램에 colorMode();를 덧붙였더니!!
function setup() {
createCanvas(120, 100);
colorMode(RGB, 1);
background(200);
let r = random(0,1);
let g = random(0,1);
let b = random(0,1);
let o = random(0.1);
let c1 = color(r, g, b);
let c2 = color(r, g, b, o);
fill(c1);
noStroke();
square(10, 25, 50);
fill(c2);
stroke(255);
square(60, 25, 50)
}
프로그램을 플레이 할 때마다 무작위 색상으로 잘 표현되고 있습니다~~^^*
네~~^^* 화합과 창조의 숫자 3의 비밀은 바로 colorMode(); 였습니다~~!!!
// Use RGB color with values in the range 0-100.
colorMode(RGB, 100);
//100으로 설정하면 0에서 100 사이 수의 범위로 RGB표현하고
colroMode(RGB, 1);
//1로 설정하면 0에서 1 사이의 수의 범위로 RGB를 표현하기 떄문에~
//0에서 1 사이의 무작위 실수를 담고 있는 genes[i]의 값을 따로 다른 수치의 구간으로 mapping할 필요가 없는 것이었습니다!!!
네~^^*
고민이 해결되어 상쾌한 기분이 드네요~^^*
고민 해결을 함께 기뻐해 주셔서 감사합니다~!!!
우리 내일 또 만나요~^^*
네~~!!! 꿈은 이루어 집니다~!!!
댓글 남기기