철도의 무게, 가속력과 최고속력에 도달하는 시간에는 어떤 상관 관계가 있는지 문득 궁금해져서 찾아보았다
https://wiki.factorio.com/Locomotive#Maximum_speed
Locomotive - Factorio WikiThe Locomotive is the engine for movement of trains over track. Trains are useful for moving large amounts of items over large distances.wiki.factorio.com공식 위키에 가보니 깔끔한 수식이 적혀있다
위의 연산을 매 틱마다 수행하면서 열차의 속도가 결정이 되는 것 같은데
정말 그런지 검증을 위해 1틱마다 속도 재가면서 계산해보았고 완벽하게 맞아 떨어지는 것을 확인했다
처음에는 열차의 가속력과 무게만을 생각했는데 공기 저항과 마찰력이라는 변수가 있었음
차량마다의 저 변수값들은 아래와 같음
정리하는 김에 SE Space Trains 모드도 같이 넣어봤음
바닐라 차량의 경우 기관차가 가장 적은 공기 저항을 받고 대포 화물차가 가장 큰 공기저항을 받음
공기저항은 가장 선두의 차량에 대해서만 적용하는 식으로 되어 있기 때문에 기관차<-화물차<-화물차보다는 화물차<-화물차<-기관차가 조금 더 큰 공기저항을 받도록 되어있다
마찰력은 모든 차량이 동일하게 0.5
무게는 기관차가 화물차에 비해 큰 편이고 대포화물차는 그것보다도 더 무겁다
기관차의 파워(=연료 소모량)은 600kW
우주기차의 기관차는 무게가 바닐라의 것보다 6배나 더 무거운 대신 공기저항이 조금 더 적고 파워는 6.66배 더 강력하다
우주기차의 화물차는 마닐라의 화물차와 물리적 특성이 같음. 대신 좀 더 많은 화물이 들어간다
우주기차에는 대포화물차는 엄슴
공식 위키에
열차 속도 = 열차 속도 + (10 × 이동 방향의 기관차 수 × 연료 가속 보너스 ÷ 열차 무게)
라는 수식이 있는데 저기서 10은 바닐라 기관차의 600kW를 60틱으로 나누면 10kW가 나오기 때문에 10임
좀더 범용성 있게 수식을 고치면
열차 속도 = 열차 속도 + (파워/60/1000 × 이동 방향의 기관차 수 × 연료 가속 보너스 ÷ 열차 무게)
이렇게 되는데 /1000이 좀 거슬린다
열차 속도 = 열차 속도 + (파워/60 × 이동 방향의 기관차 수 × 연료 가속 보너스 ÷ (열차 무게×1000))
이렇게 쓰는게 좀 더 합리적인 것 같음
바닐라의 기관차의 무게가 4000인데 저 단위가 톤 이라면 1000을 곱해줌으로써 kg으로 나타낼 수 있게 되기 때문
이전에 썼던 글에서는 무게의 단위를 1톤이 아니라 100kg으로 설정을 했었는데 맞지 않는 부분이 생겨서 좀 불만이긴 하지만 일단은 넘어가도록 하자
기차의 구성을 많이 쓰는 구성인 1-2(기관차<-화물차<-화물차)로 놓고 속도가 어떤식으로 변하는지 한번 보자
기차의 공기저항은 선두가 기관차이므로 0.0075
기차의 총 마찰력은 차량이 3대이므로 0.5*3=1.5
기차의 총 무게는 2000+1000+1000=4000
기차의 파워는 600kW
연료는 일단 보너스 없는 석탄으로 굴러간다 치고 공식에 대입하면
열차 속도 = max(0, (열차 속도) - 열차 마찰력 ÷ 열차 무게)
열차 속도 = 열차 속도 + (파워/60 × 이동 방향의 기관차 수 × 연료 가속 보너스 ÷ (열차 무게×1000))
열차 속도 = 열차 속도 × (1 - 앞쪽 롤링 차량의 공기 저항 ÷ (열차 무게 ÷ 1000))
열차 속도 = max(0, (열차 속도) - 1.5 ÷ 4000)
열차 속도 = 열차 속도 + (600000/60 × 1 × 1 ÷ (4000×1000))
열차 속도 = 열차 속도 × (1 - 0.0075÷ (4000 ÷ 1000))
열차 속도 = max(0, (열차 속도) - 0.000375)
열차 속도 = 열차 속도 + 0.0025
열차 속도 = 열차 속도 × 0.998125
아참 열차 속도에 대해 말하는 것을 잊었다
속도의 단위는 틱당 이동거리량을 의미하는데(m/tick)
최대 속도로 달리는 259.2km/h의 경우
시간당 259200미터
초당 72미터
틱당 1.2미터를 달리게 된다
그래서 게임 내부적인 값은 1.2이다
위의 공식에서 사용하는 열차 속도의 값도 이 값을 기준으로 계산하도록 되어있음
만약 지금 열차속도가 1일 경우(틱당 1m, 초당60m, 시속 216km) 그 다음 틱의 속도는 어떻게 될지 공식을 이용하여 계산해보자
0.999625 = max(0, 1 - 0.000375)
1.002125 = 0.999625 + 0.0025
1.000246 = 1.002125 × 0.998125
그 다음틱의 열차속도는 틱당 1.000246m = 초속 60.0147m = 시속 216.053km 가 된다
틱마다 0.000375를 빼고 0.0025를 더하고 0.998125를 곱하는데
다시 쓰자면 고정적으로 0.002125를 더하고 0.998125를 곱하게 된다
만약 특정 속도 x에 도달했는데 더하고 곱한 값이 원래속도 x가 된다면 그 속도가 종단 속도가 될 것이다
(x+0.002125)*0.998125=x
x=1.1312
틱당 1.1312m = 초속 67.8725m = 시속 244.341km
즉 바닐라 기관차의 스펙은 최대 259.2km/h 이지만 1-2구성일 때는 저 속도에 도달하지 못하고 244.341km를 넘지 못하게 된다
만약 핵연료를 사용할 경우 최대속도는 1.15배, 가속력은 2.5배의 보너스를 받게 되는데 이걸로 다시 계산해보면
열차 속도 = max(0, (열차 속도) - 1.5 ÷ 4000)
열차 속도 = 열차 속도 + (600000/60 × 1 × 2.5 ÷ (4000×1000))
열차 속도 = 열차 속도 × (1 - 0.0075÷ (4000 ÷ 1000))
열차 속도 = max(0, (열차 속도) - 0.000375)
열차 속도 = 열차 속도 + 0.0625
열차 속도 = 열차 속도 × 0.998125
최대 열차 속도 = 최대 열차 속도 × 1.25
1.38= 1.2 × 1.25
틱당 1.38m=초속 82.8m=시속 298.08km
틱마다 0.0005875를 더하고 0.998125를 곱하는데 이 때의 종단속도는 x=3.127458
원래의 최대 제한인 1.38을 아득히 뛰어넘기 때문에 온전한 최대 속력이 나온다
속력에 대한 공식은 아래와 같은 점화식으로 단순화 할 수 있다
S(1) = A*B
S(t+1) = (S(t) + C ) * B
t = (경과시간)
A = (파워)*(연료가속보너스)/(열차무게)/60000
B = 1-(공기저항)/(열차무게)*1000
C = A - (열차마찰력)/(열차무게)
위 점화식을 잘 조작하면 일반식도 얻을 수 있다
S(t) = (AB + D)*B^(t-1) - D
D = B*C/(B-1) (-D는 종단속도와 같음)
핵연료를 사용하는 1-2 기차 구조에 적용하면
A = 600000*2.5/4000/60000 = 0.00625
B = 1-0.0075/4000*1000 = 0.998125
C = 0.00625-1.5/4000 = 0.005875
D = (0.998125*0.005875)/(1-0.998125) = -3.12745833
S(t) = -3.12122*0.998125^(t-1) + 3.12745833
이라는 식이 되고
S(1) = 0.00623828
S(2) = 0.01209057
S(3) = 0.01793188
...
S(133) = 0.69113117 (-> 최대속도 1.38의 절반)
...
S(258) = 1.20058887 (-> 보너스 받기 전 최대 속도)
...
S(311) = 1.38302745 (-> 최대속도 1.38)
311틱=약 5.2초면 최대 속도에 도달한다는 것을 알 수 있음
정확하게 311틱후 최대속도 298.1km/h 에 도달하는 모습
원하는 속도에 걸리는 시간 tick을 구하는 건 일반항을 구했기 때문에 간단히 구할 수 있음
원하는 속도를 V라고 할 경우
S(t) = (AB + D)*B^(t-1) - D = V
t = log( (V+D)/(AB+D)) / log(B) + 1
1-2 핵연료 기차가 최대 속도 1.38에 도달하기 위해선
t = log( (1.38-3.12745833)/(-3.12122))/log(0.998125) +1 = 310.076 -> 311틱이 필요하다는 것을 알 수 있다
위에 -D가 종단속도와 같다고 했는데 목표 속도를 D보다 크게 잡아버리면 log속의 값이 음수가 되어버리면서 계산 불능 되어버림
이러니 저러니 복잡하게 계산했는데 마찰력이나 공기저항이 없다 치고 약식으로 계산하려면
열차 속도 = 열차 속도 + (파워/60 × 이동 방향의 기관차 수 × 연료 가속 보너스 ÷ (열차 무게×1000))
이 식 하나만 쓰면 된다
이 식 만 가지고 계산하자면 핵연료 쓰는 1-2기차의 가속도는 0.00625이기 때문에
최대속도 1.38에 도달할 때까지 걸리는 시간은 1.38/0.00625=211틱이 나오게 되는데
실제 값인 311틱에 비하면 은근 차이가 나는 것을 느낄 수 있음
공기저항이 은근 거슬리긴 한다
위에서 우주 기차를 넣긴 했으니 이것도 안 짚고 넘어 갈 수가 없음
우주 기관차의 최대속도는 바닐라 기관차의 2배인 2.4=초속144m=시속518.4km임
기관차의 질량이 바닐라에 비해 6배라는 점은 가속도 자체에서는 손해를 보고, 대신 마찰력과 공기저항에 의한 감속 측면에서는 더 유리함을 보임
우주기차로 1-2 편성을 하면 일반식은 아래와 같이 정리된다
A = 4000000*1/14000/60000 = 0.0047619
B = 1-0.0025/14000*1000 = 0.999821
C = 0.0047619-1.5/14000 = 0.004655
D = (0.999821*0.004655)/(1-0.999821) = -26.06201 (종단속도)
S(t) = (AB + D)*B^(t-1) - D
S(t) = -26.0572*0.999821^(t-1) + 26.06201
핵연료 기차와 비교해보면서 계산해보기 위해 오른쪽에는 위에서 계산한 핵연료의 속도를 적어보겠음
S(1) = 0.00476105 < 0.00623828
S(2) = 0.00941413 < 0.01209057
S(3) = 0.01406638 < 0.01793188
핵연료의 가속도보너스 250%가 너무 든든하긴 해서 핵연료가 더 빠른 모습을 보임
더 계산해보자
...
S(133) = 0.61183893 < 0.69113117 ( -> 핵연료 최대속도 1.38의 절반)
...
S(258) = 1.17367944 < 1.20058887 ( -> 핵연료 보너스 받기 전 최대 속도)
...
S(305) = 1.3817804
S(311) = 1.40813942 > 1.38302745 ( -> 핵연료 최대속도 1.38)
속도가 1.38즈음에 근접하자 우주 기차가 핵연료 기차의 속도를 추월하였다
공기저항은 속도가 클수록 큰 영향을 주는데 우주기관차의 공기저항이 일반기관차보다 적은 탓에 역전된 것
조금만 더 계산해보자
S(541) = 2.4002839 (-> 우주기차 최대속도 2.4)
감속 영향이 적은 탓인지 최대속도의 절반까지 258틱이 걸렸는데 그지점부터 최대속도에 도달할 때까지 283틱밖에 안걸렸다
초반엔 핵연료가 우세하지만 3바퀴시점에서 우주기차가 따라잡는 모습
재미없는 수식 집어치우고 직관적으로 결론만 보고 싶다면 아래의 스프레드시트로
https://docs.google.com/spreadsheets/d/1a9aIQ3m_YNyeGkFAseLFK-Ka5Pq4o0Y9l2xKyPzAYiQ/edit?usp=sharing
원하는 기관차와 화물차의 수를 입력하면 그거에 따른 시간별 속도 변화 그래프를 그리도록 해놨음
이것저것 만져보고 싶다면 시트 복사한다음 쓰면 될듯
기관차1-화물차2 일때의 그래프
바닐라기차는 속도가 빨라질수록 그래프가 눕는게 명확히 보인다
우주기차는 기울기가 크게 변화하지 않고 가속도가 잘 유지되고 5.1초쯤에서 핵연료의 속도를 따라잡는게 보인다
일반연료는 기울기가 너무 낮아져서 최대속력에 도달조차 못하는데 공기저항과 마찰력이 없다고 가정한 커스텀 세팅은 기울기 드랍이 없어서 8초만에 최대속도에 도달하는 모습이 보인다
이동거리 그래프도 그려봄
6.5초쯤 300m지점 부근에서 우주기차가 핵연료 기차를 추월하는 모습
기관차1-화물차4 일때의 그래프
완벽하게 이해했음
아무튼 우주기차가 킹왕짱이고 장비까지 끼면 말 그대로 우주구급 기차가 된다
뭔소리지 모르지만 개추
와 논문이다 잘읽었어~ (사실안읽음)
생각보다는 1-4효율이 나쁘지 않네
아진짜 물리학이네
상수 마찰력, 선형 저항력, 상수 추진력이 작용하는 물체의 운동방정식 ma = - f sgn(v) - bv + p 의 근사식이네
F=ma만 있는 세상에서 살고싶다
스페이스 트래인 모드 바닐라에선 안되죠? - dc App
바닐라기반에 저 모드만 넣어도 됨
결론은 핵연료 쓰라는거지?
생각이상으로 핵연료의 가속도는 뛰어났다
빨강-노랑 면적만 알면 핵/로켓 차이가 동일시간 대략 몇미터 차이인지, 최고속력으로 몇초차이인지 알수있긴 하겠다 근데 어차피 교차로때문에 핵연료 압살이네
이동거리그래프도 그려봄
선두공기저항까지 있었네
철도역 설치하면 기본적으로 5칸 자리 표시되길래 다들 1-4 쓰는 줄 알았는데 1-2를 많이 쓰는구나
이건 내 편견일수도있음 근데 바닐라면 몰라도 보통 대형모드 환경에서는 다품종소량운송이 필요한 경우가 많아서 그때 4칸쓰긴 좀 많음
무슨 말인지는 모르겠고 아무튼 기분나빠져서 비추 눌렀어요
아스퍼거임?
이게 머선...
아 네......
....도대체 왜 이렇게 까지 해야 하는 거죠...? 박사님...
오 이거 졸라재밋네 - dc App