Silverback9

#야생으로

Creative Coding 독학 제213일 2024년10월26일(토)

오늘은 나뭇가지가 뻗어나가는 방향을 자유롭게 조절해 보고~~^^* 또~~^^* 나뭇가지가 양쪽으로 뻗어나가는~~^^* 좀더 일반적인 나무를 그려보도록 하겠습니다~~^^*

먼저~~^^* 나뭇가지가 뻗어나가는 방향을 조절해 보도록 할게요~~^^*

p5.js에서 제공하는 slider 기능을 사용해 보려고 합니다~~^^*

핵심 작업 지시문들을 준비해 볼게요~^^*

var angle ;
var slider;

slider = createSlider(0, TWO_PI, PI/4, 0.01);
//회전각 크기 범위는 0에서 90도까지로 하고~^^*
//기본 시작값은 45도로 할게요~~^^*  
//각 크기 변화 단위는 0.01로 해서 미세한 각 변화로 나뭇가지의 꺾임이 부드러울 수 있도록 할게요~^^*

angle = slider.value();
//슬라이더를 움직여서 결정되는 값을 변수 angle에 저장합니다.

rotate(angle);
//슬라이더를 움직여 정해진 회전각 크기대로 좌표체계를 회전하겠습니다~~^^*
//회전된 좌표체계에서 일직선을 그리면, 회전각만큼 꺾인 선이 그려진 것처럼 보이겠지요~~^^*

그럼 우리 전체 코드를 살펴 볼까요~~^^*

var angle;

var slider;

function setup(){
  createCanvas(400, 400);
  slider = createSlider(0, TWO_PI, PI/4, 0.01);
}

function draw() {
  background(51);
  angle = slider.value();
  
  var len = 100;
  
  stroke(255);
  translate(200, height);
  branch(len);
}

function branch(len) {
  line (0, 0, 0, - len);
  
  translate(0, - len);
  
  rotate(angle);
  
  if(len > 4) {
    branch(len * 0.7);
  }
}
//메인 함수가 가지가 시작되는 위치를 중심으로 하는 상대좌표체계로 변화 시킨 후 branch함수를 호출하도록 하겠습니다~
//이제 branch함수는 위치좌표를 신경쓰지 않아도 되겠네요~~!!!
//branch 함수 안에서 다음 나뭇가지의 위치를 중심으로 하는 상대좌표 체계로 바꾼 후 나뭇가지 길이를 30% 감소해 나가며 길이 4가 될 때까지 자기호출을 계속해 보겠습니다. 
//나뭇가지 길이가 4보다 작게 되어 자기호출이 멈춰지면, 결과값을 return하기 시작하면서 비로소 나뭇가지가 그려지겠네요~~^^*
//슬라이더를 움직이며 나뭇가지의 꺾임 정도를 조절할 수 있어요~~^^*

슬라이더를 움직여서 나뭇가지의 꺽임 정도를 조절해 보셔요~~^^* 아이 재밌다~~^^*

이번에는 나뭇가지가 오른쪽으로 왼쪽으로 번갈아 꺾일 수 있도록 해보겠습니다~^^* 코드는 간단하니까요~~전체 코드로 바로 보실게요~~^^*

var angle;

var slider;

function setup(){
  createCanvas(400, 400);
  slider = createSlider(0, TWO_PI, PI/4, 0.01);
}

function draw() {
  background(51);
  angle = slider.value();
  
  var len = 100;
  
  stroke(255);
  translate(200, height);
  branch(len);
}

function branch(len) {
  line (0, 0, 0, - len);
  
  translate(0, - len);
  

  
  if(len > 4) {
    rotate(angle);
    branch(len * 0.7);
    rotate(-angle);
    branch(len * 0.7);
  }
}
//메인 함수가 가지가 시작되는 위치를 중심으로 하는 상대좌표체계로 변화 시킨 후 branch함수를 호출하도록 하겠습니다~
//이제 branch함수는 위치좌표를 신경쓰지 않아도 되겠네요~~!!!
//branch 함수 안에서 다음 나뭇가지의 위치를 중심으로 하는 상대좌표 체계로 바꾼 후 나뭇가지 길이를 30% 감소해 나가며 길이 4가 될 때까지 자기호출을 계속해 보겠습니다. 
//나뭇가지 길이가 4보다 작게 되어 자기호출이 멈춰지면, 결과값을 return하기 시작하면서 비로소 나뭇가지가 그려지겠네요~~^^*
//슬라이더를 움직여 나뭇가지의 꺾임 정도를 조절할 수 있어요~^^*
//나뭇가지가 오른쪽 왼쪽 번갈아 꺽이면서 자라는데요? 

모양이 좀 예쁜 것 같아요. 신기한데요!

이 나뭇가지 모양도 신비스럽고 예쁘기는 한데요….

나뭇가지가 뻗어 나간 곳, 그 끝점에서 다시 나뭇가지가 반대방향으로 뻗어 나가서, 결국 꼬불꼬불한 라면면발의 신비나무가 탄생한 것 같아요!

음…우리가 일상으로 만나는 나무들의 나뭇가지는 자신이 뻗어나온 시작점에 반대방향으로 뻗어나가는 또 하나의 나뭇가지가 있는 것이겠지요~~^^*

자신의 시작점에 되돌아 와서 다음 나뭇가지를 그리는 것….

어떻게 하면 좋을까요~~^^*

음…팝콘요??

팝팝….조팝나무요?? 이팝나무요??

아!!

그러네요!!

푸쉬 앤 팝!! 피쉬 앤 칩스!! 보다 우리에게 지금 더 필요한! 푸쉬 앤 팝!

정보를 저장했다가 내보내고, 그전 작업의 정보가 기록된 곳에서 다시 작업을 하는!!!

작업 A 종료 지점 -> 푸쉬 -> 작업 B -> 팝 -> 작업 A 종료 지점 -> 푸쉬 -> 작업 C -> 팝

작업 A를 마친 후 작업 B와 작업 C가 각각 작업 A를 이어서 수행된 효과!!

나뭇가지 A의 끝지점에서 나뭇가지 B가 그려지고 다시 나뭇가지 A의 끝지점으로 돌아와 나뭇가지 C가 그려지는 효과!!

나뭇가지 A가 두 개의 나뭇가지 후예를 가지는 효과!!

push() 와 pop()을 사용한 전체 코드로 바로 가보실까요~~^^*

var angle;

var slider;

function setup(){
  createCanvas(400, 400);
  slider = createSlider(0, TWO_PI, PI/4, 0.01);
}

function draw() {
  background(51);
  angle = slider.value();
  
  var len = 100;
  
  stroke(255);
  translate(200, height);
  branch(len);
}

function branch(len) {
  line (0, 0, 0, - len);
  
  translate(0, - len);
  
  if(len > 4) {
    
    push();
    rotate(angle);
    branch(len * 0.7);
    pop();
    
    push();
    rotate(-angle);
    branch(len * 0.7);
    pop();
    
  }
}
//메인 함수가 가지가 시작되는 위치를 중심으로 하는 상대좌표체계로 변화 시킨 후 branch함수를 호출하도록 하겠습니다~
//이제 branch함수는 위치좌표를 신경쓰지 않아도 되겠네요~~!!!
//branch 함수 안에서 다음 나뭇가지의 위치를 중심으로 하는 상대좌표 체계로 바꾼 후 나뭇가지 길이를 30% 감소해 나가며 길이 4가 될 때까지 자기호출을 계속해 보겠습니다. 
//나뭇가지 길이가 4보다 작게 되어 자기호출이 멈춰지면, 결과값을 return하기 시작하면서 비로소 나뭇가지가 그려지겠네요~~^^*
//슬라이더를 움직여 나뭇가지의 꺾임 정도를 조절할 수 있어요~^^*
//하나의 나뭇가지에서 오른쪽 왼쪽 두개의 나뭇가지가 생겨나요!!
//우리가 흔히 보는 나무의 모습이 탄생되었어요!!!

한 가지가 두 개의 후예 가지를 가지고 위로 위로 옆으로 옆으로 뻗어 나가요~~^^* 슬라이드로 나무 가지의 펼침 정도를 조절해 보며, 다양한 모양의 탄생에 우리 함께 놀라와 해볼까요~~^^*

오늘 저와 함께 프랙탈 나무를 쑥쑥 키워 주셔서 감사합니다~~^^*

내일은 또 어떤 프랙탈 도전이 우리를 기다리고 있을까요~~^^* 오른쪽 왼쪽 쑥쑥 폭넓게 펼쳐지는 우리의 프랙탈 나무처럼 우리의 잠재적 기량도 쑥쑥 폭넓게 펼쳐지고 있다고 우리 함께 믿어봐요~~^^*

시월은 나무가 쏙쏙 폭넓게 자라는 계절이었군요~~^^*

폭넓게 퍼지는 햇살처럼요~~^^* 폭넓게 꿈꾸는 어린이처럼요~~^^*

새로운 체험을 하고 다시 제자리로 돌아와 또다른 새로운 체험을 시작한다는 것~, 역량의 폭을 넓혀 나간다는 것~^^*

한 자리에 있지만 바람에 나뭇가지를 유연하게 흔들며, 점점 더 넓은 그늘을 우리에게 나눠주며 자라는 프랙탈 나무처럼~~^^*

오늘도 멋진 아침! 멋진 하루! 보내요, 우리~~^^*

내일 또! 만나요~~!

네~~!!! 꿈은 이루어 집니다~~!!!

댓글 남기기