개념글을 검색해보면 철도에 대한 기본부터 심화까지 좋은글이 굉장히 많은데
그래도 요청이 있어서 철도신호의 가장 기본인 철도 블록(rail segment, block)과 방향에 초점을 맞춰보려고 해
2편은 데드락과 연속신호를 하고 싶어
내 실력으로 잘 될진 모르겠지만. 뭔가 쉽게 설명할 자신은 없어...
1. 철도에 신호가 왜 필요한가?
각각의 독립된 선로(교차로가 접한 선로도 포함)위에 기차가 단 한대만 있으면 신호는 전혀 필요없어. 정류장 방향만 맞으면 알아서 잘 다니지. 하지만 두대 이상의 기차가 같은 선로에 있으면 언제 쿵! 박아버릴지 모르게 돼. 여기까진 당연한거지?
2. 기차의 자동운행과 정류장의 방향
미안한데 기차 신호 설명하기 전에 이거부터 설명할게. 기차 신호도 그렇지만 정류장의 방향은 오른쪽이야.
자동운행하는 기차는 양쪽에 기관차가 달려 있어도 정류장에 도착하기 전에는 방향을 바꿀수 없어
따라서 현재 red역에 있는 기차는 white역에 바로 갈수 없어. 하지만 blue역에 들렀다가 white역으로 갈순 있어.
처음이면 기억해둬, 기차의 가는 방향 오른쪽에 신호/정류장이 놓이는거야.
3. 철도 블록 (rail segment, block)
여기부터 본론이야. 철도 신호는 어떤 역할을 하는걸까?
하나, 철도 블록을 나누는 거야.
서로 이어진 철도에 철도 신호나 연속 신호가 없으면 같은 블록이야
여기서 이어졌다는건 교차하는 경우도 포함하는 거야
철도 신호나 철도 연속신호를 손에 들고 있으면 선로위에 색깔로 표시가 돼.
아래 그림에선 4개의 블록이 있어.
(색이 두가지라고 두개가 아니야, 같은색이라도 이어져 있지 않으면 다른 블록이야)
자동으로 운행중일때 하나의 블록위에는 하나의 기차만 존재할수 있어.
아래 그림에서 블록3 에 기차가 있기 왼쪽의 기차는 블록2 에서 멈출거야.
신호 앞방향의 블록에 기차가 있으면 빨간불이 들어오고 기차는 신호에서 멈추는거야. 간단하지?
빨간 기차가 이대로 멈춰있을때 신호를 추가해서 왼쪽 기차가 움직일수 있게 하려면 어떻게 해야될까?
십자교차로에서 세로방향 선로에 신호를 박아주면 빨간 기차가 서있는 곳과 블록3은 다른 블록이 될거야.
(덤)
참고로 기차가 목적지까지 길찾기를 할때 최단거리를 찾는것도 이 철도 블록 단위를 하나씩의 경로로 보고 탐색해.
가끔 기차신호를 완전히 도배하는 녀석들도 있는데 사소하지만 CPU에 부담을 주는거야.
A* 알고리즘과 신호에 붙는 패널티 가중치를 잘 안다면 기차 경로를 유도할수도 있겠지.
4. 철도 블록의 진행방향
둘, 해당 블록에서 진행 가능한 방향을 결정해줘.
철도신호는 선로의 오른쪽에 둘수도, 왼쪽에 둘수도, 양쪽에 둘수도 있어.
양쪽에 신호를 둘때는 신호를 설치할때 반대쪾 방향에 흰색으로 표시가 돼.
이게 해당 블록내에서 진행가능한 방향을 결정해줘.
철도가 이어져 있는데도 경로없음이 뜬다면 어디선가 이 방향이 잘못된거야.
(graph 이론을 배운 이공계라면 블록과 인접한 블록의 방향을 의미한다는걸 알겠지. 실제 경로계산에선 신호등 단위 블록과는 조금 다른 블록을 사용한다는 것도. 그래서 위키에는 segment랑 block를 구분해서 사용하는거 같아.)
(1) 직선의 경우
그냥 보기 좋으라고 연속신호로 해봤어.
그림처럼 해당 블록 안에선 흰색으로 표시된 방향으로만 움직일수 있어.
따라서 이 일직선 선로는 한쪽 끝에서 반대쪽 끝으로 통과할수 없는 선로가 되어버리는 거야.
분명히 선로가 이어져 있는데도 경로없음이 뜬다면 이 방향을 잘 확인해봐야 할거야.
(화면에 안보이는 바깥쪽에 양방향 신호가 없다면 가장자리 블록은 같은 방향)
(2) 교차로나 갈림길의 경우
아래처럼 선로가 교차해서 같은 블록이더라도 기차가 이어서 갈수 없는 다른쪽 방향에는 영향을 주지 않아.
손에 정류장을 들어보면 설치 가능한 지점이 표시되는데, 그게 기차의 진행 가능 방향을 알려주는 셈이지.
기차가 이어서 갈수 있다면 갈림길 모두에 영향을 줘.
그런데 이 둘이 만나면 어떻게 될까?
양방향이 된다네 ㅋ. 이정도면 선로가 합쳐지거나 다른 경우라도 각 선로위에 기차가 움직일수 있는 방향을 짐작할수 있겠지?
중셉?
ㄴ 끝인거 같은데 (ㅌㅌ)
와 씨 감사합니다 일단 댓글 달고 봅니다
첨에 물어본 팩린이인데 고정닉으로 해야할거 같음... 감사해요!
웨 1번인데 2번글이 업는거죠
개추
으렵다.. - dc App
기차 너무 어렵다