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

 

 

1. 라즈베리 파이 ssh 에서 vncserver -geometry 1920x1080 입력 (해상도는 마음대로)

 

$ vncserver

// geometry 옵션으로 해상도 설정가능
$ vncserver -geometry 1920x1080

 

 

그럼 하단에 나는 192.168.0.13:2 VNC 접속 주소가 주어졌다.

원래 1번포트부터 줄텐데 글쓰느라 한번 더 명령어를 입력해서.

 

2. VNC 뷰어로 저 주소에 접속 시도한다.

 

www.realvnc.com/en/connect/download/viewer/

 

나는 이 프로그램을 썼는데 이상하게 다른 프로그램으론 접속이 안되더라.. 더 알아봐야할듯

 

 

아까 주소로 접속 시도

 

라즈베리 파이 계정명과 패스워드를 입력한다

 

 

접속확인

 

재부팅하면 1번부터 다시 진행해야함.

'Dev' 카테고리의 다른 글

[Nginx] 에러 로그 실시간 확인 하기  (51) 2021.11.23
Fail2ban 설치  (47) 2021.06.07
[Linux] ssh server 자동 실행  (19) 2021.02.16
[Ubuntu] 새 계정 생성시 docker 권한 문제  (50) 2020.09.05
parameter 와 argument 차이  (15) 2020.05.06

+ Recent posts