Cesium JS를 활용한 운석 낙하 시뮬레이션 

이번 시간에는 Cesium JS를 활용하여 운석 낙하 시 피해 반경을 시뮬레이션 하겠습니다.

운석 낙하는 전 세계에서 가끔 일어나는 자연현상 입니다.  과거 2013년 러시아 첼랴빈스크 지역에 운석이 낙하하여 1600여명이 부상당하고 원화 기준으로 약 350억 원의 피해가 발생 했습니다.  떨어진 운석의 크기는 직경17m, 무게 1만 톤으로 추정되었고 대기권 돌입시 추정 속도는 초속 32.5km이었습니다. 

또한 2014년 03월 경상남도 진주시에 운석이 낙하 중 폭발하였고 그 조각들이 다음날로부터 발견된 사례가 있었습니다. 

<러시아 첼랴빈스크 지역에 운석이 낙하 중인 모습과 발견된 운석의 일부 (출처-Google image검색)>

<경남 진주시에 운석 조각이 낙하중인 모습과 발견된 운석 조각 (출처-Google image검색)>

이러한 사례와 참고자료를 발판삼아 가상으로 운석이 낙하하여 충돌할 시 피해 반경을 가늠하여 보았습니다.  

샘플 프로그램 제작 당시 여의도 지역을 운석 낙하 지점으로 설정했습니다. 막상 만들고 보니 저희 나라에 운석이 떨어지는 것이 별로 좋지 않더라구요. 그래서 일본의 모 지역으로 낙하 지점을 변경했습니다. 정확한 시뮬레이션도 아니고 그저 CesiumJS를 활용하는 한 가지 사례로써 어떤 의도가 존재하지도 않습니다.

먼저 결과화면 보겠습니다.

서비스바로가기

운석은 50m급, 100m급 두 등급으로 정했습니다. 각 등급에 근접한 피해 반경을 구하기 위해 여러가지 공식과 참고자료를 활용했습니다. 하지만 참고자료 또한 추정치여서 실제와는 차이가 있습니다.
우주환경 감시기관(한국천문연구원)에서 참고한 운석의 크기와 그에 따른 충돌에너지에 대한 자료입니다.


(출처 - 우주환경 감시기관)

운석 시작 높이는 지상 100km로 설정했습니다. 대부분의 유성 및 운석이 고도 80~100km 부분 열권에서 연소가 되며 연소되지못한 운석들이 지구로 추락합니다. 

낙하속도 산출은 자유낙하 속도 공식을 활용했습니다. (v: 속도 / g: 중력가속도 / t: 시간 / s: 높이) 

 

 

시뮬레이션

시뮬레이션은 총 3단계로 진행 됩니다. 

단계1. 운석 시뮬레이션 버튼을 클릭하여 시뮬레이션 시작
단계2. 운석이 지면에 추락한 후 피해반경 표출
단계3. 피해반경 전체를 가시화

먼저 시뮬레이션 동작을 위한 버튼입니다. 50m, 100m급 시뮬레이션 버튼으로 시뮬레이션을 진행 할 수 있으며 RESET버튼으로 각 시뮬레이션을 마친 후 맵을 초기화 할 수있습니다. (하나의 시뮬레이션 진행 후 RESET기능을 통해 맵을 초기화 하세요.)

 

50m급 시뮬레이션 장면입니다. (50m급의 피해 반경은 약 11km 입니다.)

 

운석이 낙하 지점을 향해 추락하는 모습입니다.

 

 

운석이 낙하지점에 추락 후 피해반경이 표출 된 모습입니다. (50m급 운석)

 

운석 피해 반경 전체를 볼 수 있게 가시화 된 모습입니다. 100m급 시뮬레이션 장면입니다. (100m급의 피해 반경은 약 1.100km입니다.) 

 

 

프로그램 소스

시작점과 도착점을 지정하여 운석이 움직일 수 있도록 하였습니다. 이번 시뮬레이션의 기초 및 핵심이 되는 부분입니다.

 
/*  
 pos1 - 출발점 지정
 pos2 - 도착점 지정
 */
var pos1 = Cesium.Cartesian3.fromDegrees(126.50874937.369581100000.0);
var pos2 = Cesium.Cartesian3.fromDegrees(126.91362037.5192960.0);
var position = new Cesium.SampledPositionProperty();
 
position.addSample(start, pos1);
position.addSample(stop, pos2);
cs

setTimeout 콜백함수를 활용하여 시간에따른 시뮬레이션을 진행하는 부분입니다.

 
// 운석이 도착점에 도달할 시 피해반경 표출
setTimeout(function(){
    viewer.entities.add({
        position : meteorPosition,
        ellipse : {
            semiMinorAxis : 11000.0
            semiMajorAxis : 11000.0
            material : Cesium.Color.RED.withAlpha(0.5)
        }
    });
},23000); 
// 피해반경 가시화 
setTimeout(function(){
    if(particleSystem != null){
        scene.primitives.remove(particleSystem);
    };
    var staticPosition = Cesium.Cartesian3.fromDegrees(139.74390335.69436360000);
    var orientation = new Cesium.HeadingPitchRange(0,300,0); 
    viewer.scene.camera.setView({
        destination : staticPosition,
        orientation : orientation,
        endTransform : Cesium.Matrix4.IDENTITY
    });
},26000);
cs

semiMinorAxis 와 semiMajorAxis는 지름을 지정하는 파라미터입니다. 단위는 m입니다.

 

마치며

본 시뮬레이션을 구현하는 작업은 흥미로웠습니다. 하지만 운석낙하에 대한 자료가 한참 부족하고 대부분 추정치만 존재하다보니 실제의 값에 근접한 값을 도출하는데 수 일의 노력을 기울였습니다.

하지만 프로그웍스와 독자분들을 위한 유령개구리의 노력은 멈추지 않을것입니다. 감사합니다~!

 

 

 

 

 

 

 

+ Recent posts