오늘은 코딩공부 다시 하는 날~~^^* YEAH~~^^*
곳곳을 다니는 Travelling Salesman의 가슴은 뜨거운 열기로 가득 차 있어, 다양한 문화를 녹여내는 용광로가 되기도 할까요?
아르헨티나의 요한 스트라우스, 아스트로 피아졸라의 가슴 속엔 어떤 문화들이 함께 녹아 흐르고 있는 것일까요?
공연 1 작품 느긋하게 감상하시고 계셔요~^^* 코딩 공부 정리해서 다시 돌아올게요~^^* 쓩~^^*
네~^^*
네~^^* 먼저~^^* Travelling Salesman의 이동경로의 총 길이를 계산해 보겠습니다!
(1) 거리 총합을 담을 변수 sum을 준비해 보겠습니다.
(2) 도시 배열의 첫 번째 도시와 두 번째 도시 사이의 거리 d를 구합니다.
(3) 거리 총합 변수 sum에 두 도시 사이 거리 변수 d를 더합니다.
(4) 도시 배열의 마지막 도시의 바로 앞 도시까지 이 과정을 반복합니다.
(Why # 1) 마지막 도시의 바로 앞 도시가 [i]가 되면, 마지막 도시는 [i + 1]가 되어, 첫 번째 도시부터 마지막 도시까지의 거리 총합을 구하는 과정을 깔끔하게 완료할 수 있으니까요~~^^*
(why # 2) 마지막 도시가 [i]가 될 때까지 반복하면, [i+1]은 배열에 존재하지 않는데, 거리값을 구해야 해서 우리 컴퓨터가 당황할 수 있으니까요~~^^*
function calcDistance(points) {
var sum = 0;
for (var i = 0 ; i < points.length - 1; i++) {
var d = dist(points[i].x, points[i].y, points[i+1].x, points[i+1].y);
sum += d;
}
return sum;
}
//도시배열 마지막 바로 앞 도시 points.length - 2까지 반복한다는 것에 우리 주의를 기울여 볼까요?
//도시 배열은, [0] ~ [points.length - 1]까지의 구성요소를 가지고 있지요?
//배열 length 길이가 3이면, 구성요소는 [0], [1], [ 2 (= length-1) ]가 있겠네요?
//이때 배열 마지막 바로 앞의 구성요소는 [ 1 (= length -2) ]가 되겠네요?
//그래서, 도시 배열 마지막 바로 앞 도시와 그 다음 도시(마지막 도시) 사이의 거리를 구하기 위해서는~^^*
//i가 points.length -1 보다 작을 때까지만,
// 즉, i가 points.length - 2가 될 때까지만
// for 구문을 안의 작업문을 반복해 보면 어떨까요?~~^^*
이제, 어느 경로가 가장 짧은 총합 거리를 가지는 지 기록을 해 볼까요?^^*
var recordDistance;
맨 처음 만들어진 여행경로가 첫 번째 신기록이 되겠네요~^^*
function setup() {
createCanvas(400, 400);
for( i = 0; i < totalCities; i++ ) {
var v = createVector(random(width), random(height));
cities[i] = v;
}
var d = calcDistance(cities);
recordDistance = d;
}
// 첫 번째로 구성된 도시 배열의 거리 총합을 구해서 변수 d에 담습니다.
// 이 d의 값이 첫 번째 최단 이동 거리의 신기록 recordDistance가 되겠네요^^*
음…앞으로 도시 이동 순서 배열이 무한 반복 무작위 swap()되어 새로운 여행 경로가 만들어 질텐데요…
새롭게 생성된 여행 경로의 거리 d가 이전에 생성된 여행 경로의 거리 중의 최단 거리 신기록 recordDistance보다 짧다면, 신기록 recordDistance를 갱신해야 되겠네요~!
function draw() {
background(0);
fill(255);
for( i = 0; i < cities.length; i++ ) {
ellipse(cities[i].x, cities[i].y, 8, 8);
}
stroke(255);
strokeWeight(2);
noFill();
beginShape();
for( i = 0; i < cities.length; i++ ) {
vertex(cities[i].x, cities[i].y);
}
endShape();
var i = floor(random(cities.length));
var j = floor(random(cities.length));
swap(cities, i, j);
var d = calcDistance(cities);
if (d < recordDistance) {
recordDistnace = d;
console.log(recordDistance);
}
//도시가 무작위 swap()되어 새롭게 된 도시 이동경로의 거리 총합 d가
//최단거리 신기록 recordDistance보다 작다면
//신기록 갱신~~^^*!!!
//콘솔창에 현재의 최단거리 신기록을 보여주도록 하겠습니다~^^*
}
이제 10개의 도시를 이동하는 경우, 이동경로의 최단 거리 신기록이 갱신되는 짜릿한 현장으로 저와 함께 가보실까요~~^^*
오늘 저와 함께 여행 경로의 최단거리 신기록 갱신 작업을 해 주셔서 감사합니다~^^*
우리 내일 또 Travelling Salesman Problem 코딩작업을 이어가 볼까요~~^^*
자신의 고유한 정체성의 가치를 새롭게 발견하고 이 세계에 새로운 색조를 기여하며 걷고~ 달리고~ 타고~ 날아가는~ Travelling Salesman! 소중한 보부상!
오늘도!
멋진 아침! 맛있는 점심! 보람찬 하루! 보내시고요~^^*
자신의 가슴 속 고유한 불꽃의 색깔을 서로 이해하는 지음.
이 소중한 추억들이 빚어내는 따듯한 겨울 정취 속 편안한 저녁과 밤 보내시기 바래요~^^*
네~^^* 꿈은 이루어 집니다~^^*
댓글 남기기