지형에 일관된 식물상과 동물상 저작하기 소스 코드 분석 (2022.04.23)
파일 구성
실행 시
conditions.py
flora.py
fauna.py
순으로 실행이 됨.
우선 R0을 conditions.py
에서 처리하고, 이후 R1을 flora.py
, R2를 fauna.py
에서 처리할 듯.
conditions.py
간단하게 코드 진행만 봤을 땐,
dem_filled.tif
파일을 불러옴- 물 데이터 생성
- 12 개월치의 일조량 데이터 생성
- 온도 데이터 생성
물 데이터
DEM 데이터를 바탕으로 물 데이터를 생성함.
- DEM 데이터
dem
행렬에 대해drain.compute(dem, source)
을 호출함flux.flux(dem, source)
호출함- 열의 개수가
dem
의 원소의 개수이고, 행이 4개인 이웃 정수형 행렬neighbors
생성.- 0번째 행은 같은 행 혹은 같은 노드 내에서 낮은 이웃
- 1번째 행은 같은 행 혹은 같은 노드 내에서 그 다음으로 낮은 이웃
- 2번째 행은 같은 열 혹은 같은 노드 내에서 낮은 이웃
- 3번째 행은 같은 열 혹은 같은 노드 내에서 그 다음으로 낮은 이웃
- 열의 개수가
dem
의 원소의 개수인 정수형 열벡터parse
생성 flow.compute_neighbors_grad(dem, neighbors, parse)
호출
- 열의 개수가
월별 일조량 데이터
온도 데이터
온도는 단순히 -(dem / 100) 으로 처리함.
flora.py
- 일조량, 온도, 물, 토양 데이터를 받아옴
- 온도 데이터는 불러온 후 온도 offset(기본 0) 만큼 더해줌
- 물 데이터는 자연 로그로 받아오고, 그 후 offset(기본 0) 만큼 더해줌.
- 토양 데이터는
geology.load(soil_file_path, colors)
로 불러옴soil_file_path
로부터rgb_data
가져옴- 위의 데이터를 정수로 간단화:
- 즉, 32비트 정수를 8비트로 구분하여, 00000000000000000000000000000000 와 같이 나누겠다는 의미.
- 결론적으로
geol
라는 행렬/이미지는 각 픽셀별로 해당하는 soil의 index를 갖고 있을 것
- 데이터로 RAG0 구축
- 월별 온도. `ecosys.convert(온도 + 월별 평균 온도, 일교차(저점), 일교차(고점))
- 온도를 [1 - 10] 스케일로 수정
- 월별 배수량
- 월별 일조량
- 월별 배수량, 일조량도 위의 식으로 동일하게 처리.
-
*
conditions
= { 월별 일조량, 월별 온도, 월별 배수량 }
- 월별 온도. `ecosys.convert(온도 + 월별 평균 온도, 일교차(저점), 일교차(고점))
- 식물 간 경쟁 처리
ecosys.plant_compet(plants, conditions, geol)
- 식물별 데이터:
illum
: 일조량temp
: 온도moisture
: 지상 습도- 위의 데이터는 각각 (최소, 최대, 경쟁)의 값을 갖고 있음.
geology
: 각 색깔별로 생존 가능성을 의미 (1이면 생존, 0이면 생존 불가) 1. 각 식물마다- 밀도 계산
-
2. 데이터(일조량, 온도, 배수량 등) `gpi` 데이터에 기록
- 식물별 데이터:
- 결과
tif
파일로 저장
fauna.py
- 초식동물, 육식동물의 인구 설정
- 자원 데이터 받아옴
- 물 데이터 체인화
- 식생의 밀도 맵 계산
- 접근성 맵 계산
- 물 체인 단순화 및 노드화
- 물을 마실 수 있는 지역(픽셀) 구하기
- 해당 픽셀의 최근접 타원 계산
- 각 영역별로 타원 저장
- 영역 별 노드 저장
- 동물 밀도 맵 계산
- 트레일 가중치 계산
- 자원 간 경로 계산
- 경로 to 트레일
- 일상 계획 계산