Courses/CS 461/Winter 2006/Rick Strom/Week One/HW1 - Fire
From CSWiki
< Courses | CS 461 | Winter 2006 | Rick Strom | Week One
;; stromsmoke.nlogo
;; by Rick Strom
;;
;; a 2D fire simulation (smoke version)
;; see Information tab for info on this
globals [this-heatvalue]
patches-own [ heatvalue
next-heatvalue
east
west
north
south ]
to setup
ca
ask patches [
set heatvalue 0
set next-heatvalue 0
]
randomize-bottom-row
end
to go
;; calculate the nextvalues
ask patches [
;; set next-heatvalue to the average of the neighbors minus cooling
ifelse use-large-pallette
[
ifelse heatvalue-of patch-at 1 0 > 99
[set east 99]
[ set east heatvalue-of patch-at 1 0 ]
ifelse heatvalue-of patch-at -1 0 > 99
[set west 99]
[ set west heatvalue-of patch-at -1 0 ]
ifelse heatvalue-of patch-at 0 1 > 99
[set north 99]
[ set north heatvalue-of patch-at 0 1 ]
ifelse heatvalue-of patch-at 0 -1 > 99
[set south 99]
[ set south heatvalue-of patch-at 0 -1 ]
ifelse heatvalue-of patch-at 1 0 < 0
[set east 0]
[ set east heatvalue-of patch-at 1 0 ]
ifelse heatvalue-of patch-at -1 0 < 0
[set west 0]
[ set west heatvalue-of patch-at -1 0 ]
ifelse heatvalue-of patch-at 0 1 < 0
[set north 0]
[ set north heatvalue-of patch-at 0 1 ]
ifelse heatvalue-of patch-at 0 -1 < 0
[set south 0]
[ set south heatvalue-of patch-at 0 -1 ]
]
[
ifelse heatvalue-of patch-at 1 0 > 9
[set east 9]
[ set east heatvalue-of patch-at 1 0 ]
ifelse heatvalue-of patch-at -1 0 > 9
[set west 9]
[ set west heatvalue-of patch-at -1 0 ]
ifelse heatvalue-of patch-at 0 1 > 9
[set north 9]
[ set north heatvalue-of patch-at 0 1 ]
ifelse heatvalue-of patch-at 0 -1 > 9
[set south 9]
[ set south heatvalue-of patch-at 0 -1 ]
ifelse heatvalue-of patch-at 1 0 < 0
[set east 0]
[ set east heatvalue-of patch-at 1 0 ]
ifelse heatvalue-of patch-at -1 0 < 0
[set west 0]
[ set west heatvalue-of patch-at -1 0 ]
ifelse heatvalue-of patch-at 0 1 < 0
[set north 0]
[ set north heatvalue-of patch-at 0 1 ]
ifelse heatvalue-of patch-at 0 -1 < 0
[set south 0]
[ set south heatvalue-of patch-at 0 -1 ]
]
set next-heatvalue (( ( east + west + north + south ) / 4) - cooling)
ifelse use-large-pallette
[
if next-heatvalue < 0 [set next-heatvalue 0]
if next-heatvalue > 9 [set next-heatvalue 9]
]
[
if next-heatvalue < 0 [set next-heatvalue 0]
if next-heatvalue > 99 [set next-heatvalue 99]
]
]
;; reassign the heatvalue for each cell to the
;; next-heatvalue of the cell below it
ask patches [
set heatvalue next-heatvalue-of patch-at 0 -1
set pcolor heatvalue-to-color(heatvalue)
]
;; re-seed the bottom row
randomize-bottom-row
repeat smoothness [ diffuse pcolor 1 ]
end
to randomize-bottom-row
;; assign random values between 1 and 100 for bottom row
ask patches [
if (pycor = 0 - screen-edge-y ) [
ifelse use-large-pallette
[ set pcolor random (100) ]
[ set pcolor random (10) ]
set pcolor heatvalue-to-color(pcolor)
set heatvalue pcolor
]
]
end
to-report heatvalue-to-color [number]
set this-heatvalue number
ifelse use-large-pallette
[
ifelse (number >= 0 and number < 1) [report 0]
[
ifelse (number >= 1 and number < 2) [report 4]
[
ifelse (number >= 2 and number < 3) [report 7]
[
ifelse (number >= 3 and number < 4) [report 13]
[
ifelse (number >= 4 and number < 5) [report 15]
[
ifelse (number >= 5 and number < 6) [report 19]
[
ifelse (number >= 6 and number < 7) [report 25]
[
ifelse (number >= 7 and number < 8) [report 28]
[
ifelse (number >= 8 and number < 9) [report 45]
[
ifelse (number >= 9 and number < 10) [report 49]
[
ifelse (number >= 10 and number < 11) [report 0]
[report 0]
]
]
]
]
]
]
]
]
]
]
]
[
report number
]
end

