https://mika0203.github.io/Pathfinding-Algorithm/

 

일단 구현 페이지..

 

 

대충 이런 느낌으로 구현했다.

 

알고리즘 구현은 이 단계를 걸쳤다.

A*의 자세한 알고리즘은 아래에 내가 참조한 사이트를 첨부할 예정. 

즉 알고리즘 설명은 거의 없다

 

1. startPosition, targetPosition, obstacles 지정

2. currentNode 를 startPosition 으로 지정

3. currenNode 를 closeNodeList 에 추가, openNodeList 에서 제거

4. currentNode 에서 8방향으로 Node 를 생성하여 ( 여기서 closeNodeList 에 있는 노드는 제외한다)  생성된 Node 들을 openNodeList 에 저장

5. openNodeList 중 적합한 Node 를 찾아 currentNode 로 지정 후 3번으로 이동

 

6. 위의 반복을 벗어나는 조건이 맞으면 이후 단계 진행

* 조건

- currentNode 가 targetPosition 과 위치가 같음 [찾음]

- openNodeList 의 길이가 0임. 즉 더 이상 찾을 Node 가 없음 [못찾음]

- 계산이 너무 많음 (원래 화면을 벗어난 좌표는 제한시켜야하는데 아직 미완성이라... 100,000회 반복하면 종료하게 만들어둠)

 

대충 이렇게 단계를 걸친다.

 

현재 개발이 더 필요하다고 느끼는 점이

1. 장애물 판별하는 코드

장애물 판별을 x, y 값 비교를 하나하나 다 하고 있는데 8방향 Node 를 구할 때 계산이 좀 낭비되는 듯 하다. 

 

2. 시간

잘 만들어진 알고리즘과 비교하였을 때 시간차이가 얼마나 나는지 체크하고 어디서 계산시간이 많이 소모되는지 체크 후 업데이트

 

3. open, closeNodeList 를 시각적으로 표시

 

일단 대충 이정도?

 

git 주소와 astar 알고리즘 소스도 첨부...

github.com/Mika0203/Pathfinding-Algorithm

github.com/Mika0203/Pathfinding-Algorithm/blob/master/src/ts/Astar.ts

 

참조

lhh3520.tistory.com/343

 

[알고리즘] A* (A Star) 길찾기 알고리즘

게임에서 길을 찾는 알고리즘을 사용할때 사용하는 A* 알고리즘 입니다. 이번 포스팅 에서는 A* 알고리즘에 대해 최대한 알기 쉽게 작성해 보도록 하겠습니다. (알고리즘 관련 포스팅 이기 때문

lhh3520.tistory.com

http://egloos.zum.com/cozycoz/v/9748811

 

A* Algorithm 구현

C++ 로 A* 알고리즘을 구현하는데 성공했다. 다익스트라 알고리즘도 직전에 구현했는데 곧 포스팅 하도록 하겠다. A* 알고리즘이란? 길찾기 알고리즘의 일종으로 Openlist, Closedlist, Parent 와 F=G+H 라

coldstew.tistory.com

 

이미지 파일을 선택하면 이미지를 연결된 소켓에 뿌리는 작업을 하고 있었다.

파일을 선택하면 blob 형태로 만들어 뿌렸는데 이게 같은 디바이스에서는 제대로 동작했는데

다른 디바이스에선 제대로 안나오더라..

 

그래서 생각해낸게 blob 을 base64 로 컨버팅해서 base64를 넘기는 형태로 변경

 

const reader = new FileReader();
const blob = ---; // blob or file
reader.readAsDataURL(blob); 
reader.onloadend = () => {
	const base64data = reader.result;
	// base64 converted!
	console.log(base64data);
}

 

 

샘플페이지

 

codepen.io/mika0203/pen/oNBzgGx

 

샘플 페이지

 

 

bool 값으로 정렬해보자.

const booleanArray = [true,false,false,true,false,true,false,true];

booleanArray.sort((a,b) => a === b ? 0 : a? 1 : -1);
// [false, false, false, false, true, true, true, true]

booleanArray.sort((a,b) => a-b);
// [false, false, false, false, true, true, true, true]

// --------------------------------------------------------------------------

booleanArray.sort((a,b) => a === b ? 0 : a? -1 : 1);
// [true, true, true, true, false, false, false, false]

booleanArray.sort((a,b) => b-a);
// [true, true, true, true, false, false, false, false]

 

 

요새 javascript 알고리즘 문제 풀고 있는 사이트에서 문제가 올라왔는데

min 값과 max 값의 사이를 오가는 숫자를 구하는 문제였다

 

yeu.kr/Ptkt6

 

코딩문제를 풀어보세요

미션: 토글카운터를 만들어보자

yeu.kr

 

unity 에선 Mathf.PingPong(float, length) 함수로 쉽게 구할 수 있었는데 js에서는.. 아마 없는듯?

오르는 중인지 내려가는 중인지 bool 값으로 할 수 있었는데 그냥 구현해보고 싶었다

 

// value 를 넣으면 min, max 값을 오가는 값을 리턴 하는 함수

const pingpong = (min,max, value) => {
      // 0을 기준으로 값을 맞춰준다
      const normalizeMin = 0;
      const normalizeMax = max - min;
      const normalizeVal = value - min;
    
      // 값 차이를 2배 해준다
      const max2 = (normalizeMax - normalizeMin) * 2;
      
      // 현재 들어온 값을 위에서 구한 max2 값의 나머지 계산을 해준다
      // 즉 현재 값이 max 보다 큰지 작은지 알 수 있게 해준다
      const overVal = normalizeVal % max2;

      // overVal 값이 Max 값 보다 
      // 작은 경우(숫자가 커지는 경우) ? 정규화 전 min 값 + overVal 한다
      // 큰 경우 (숫자가 작아지는 경우) : 정규화max 보다 초과한 수를 max 에서 빼준다
      return overVal <= normalizeMax 
         ? min + overVal
         : max + (normalizeMax - overVal)
     }
   
  

 

 

확인

yeu.kr/nv8h4#js

 

코딩문제를 풀어보세요

미션: 토글카운터를 만들어보자

yeu.kr

 

switch (foo) {
	case 1 :
    	let bar = 1;
        break;
    case 2 : 
    	let bar = 2;
        break;
}

 

위와 같이 작성하면 bar 가 이미 선언되었다고 오류가 날 것 이다.

 

switch (foo) {
	case 1 : {
    	let bar = 1;
        break;
    }
    case 2 : {
    	let bar = 2;
        break;
    }
}

 

{} 로 감싸서 해결하자

+ Recent posts