RADAR

RADAR preview image

1 collaborator

Turtlezero2-white-048 James Steiner (Author)

Tags

radio 

Tagged by James Steiner over 2 years ago

simulation 

Tagged by James Steiner over 2 years ago

visualization 

Tagged by James Steiner over 2 years ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.2.2 • Viewed 176 times • Downloaded 12 times • Run 0 times
Download the 'RADAR' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

; add model procedures here

globals [ main-antenna ; refers to the turtle acting as the emitter and receiver
          antenna-x antenna-y ; the x/y coordinates of the antenna
          antenna-heading     ; the heading of the antenna, in terms
                              ; of -180 to +180 degrees.
          antenna-direction   ; the direction of rotation of the antenna
          main-scope               ; refers to the turtles acting as the display scope
          scope-x scope-y     ; holds the x/y coordinates of the display scope
          scope-radius        ; holds the radius of the display scope
          horizon             ; the lowest that a UFO can fly
          envelope            ; the highest that a UFO can fly
          old-rf-setting
        ]

breed [ waves wave]
breed [ reflected-waves reflected-wave ]
breed [ antennas an-antenna]
breed [ ufos ufo]
breed [ scopes scopex]
breed [ scope-markers scope-marker]


waves-own
[ pips     ; used to measure the travel of the wave
  bounced? ; helps the wave remember that is has bounced off something
           ; used to prevent our simplified waves
           ; from bouncing multiple times
  wave-move
]
reflected-waves-own
[ pips     ; used to measure the travel of the wave
  bounced? ; helps the wave remember that is has bounced off something
           ; used to prevent our simplified waves
           ; from bouncing multiple times
  wave-move
]
ufos-own
[ goal-x goal-y ; where the ufo is heading
  speed         ; relative speed of the ufo
]

scope-markers-own [ pips ]

to setup
  ;; (for this model to work with NetLogo's new plotting features,
  ;; __clear-all-and-reset-pips should be replaced with clear-all at
  ;; the beginning of your setup procedure and reset-pips at the end
  ;; of the procedure.)
  clear-all
  set-default-shape waves "wave"
  set-default-shape antennas "antenna"
  set-default-shape ufos "ufo"
  set-default-shape scope-markers "phosphor"

  antenna-setup
  scope-setup
  set envelope max-pycor
  set horizon antenna-y + .5 + 1
  create-ufos 3
  [ UFO-setup ]
end 

to antenna-setup
  create-antennas 1
  [ set main-antenna self
    set antenna-direction 1
    set antenna-x 0
    set antenna-y 1
    setxy antenna-x antenna-y
    set size 2
    set heading 0
  ]
end 

to ufo-setup
    ; start on left or right edge
    set xcor plus-or-minus ( max-pxcor  )
    ; start somewhere between horizon and upper limit of sky
    set ycor envelope - random-float ( envelope - horizon )
    ; head for opposite edge
    set goal-x (- xcor)
    ; at some other altitude
    set goal-y envelope - random-float ( envelope - horizon )
    ; point towards the goal
    set heading towardsxy goal-x goal-y
    ;set the size
    set size 1
    ; set the speed and color
    set speed (.5 + random-float 1) / patch-size
    set color random 13 * 10 +  15
end 

to-report plus-or-minus [ value ]
    ; randomly reports either +value or -value
    report value * (((random 2) * 2) - 1)
    ; explanation of "(((random 2) * 2) - 1)"
    ; Operation:    Yields:
    ; random 2   -> 0           or 1
    ;      * 2   -> 0 * 2 =  0  or 1 * 2 = 2
    ;      - 1   -> 0 - 1 = -1  or 2 - 1 = 1
    ; thus, returns -1 or +1
end 

to scope-setup
  set scope-x 0
  set scope-y 0 + min-pycor  - .5
  set scope-radius max-pycor + antenna-y ; - .5
  create-scopes 1
  [ set main-scope self
    set shape "scope"
    set size scope-radius * 2
    setxy scope-x scope-y
    set heading 0
    set color green
  ]
end 

to go
  every (1 / 20) [  ufo-move ]
  every ((.5 * sweep-speed) / 60) [ antenna-sweep antenna-emit-pulse wave-propigate ]
  every (1 / 20) [ scope-fade ]
end 

to-report wave-in
   report [ ->
    set pips pips + 1
    if pycor + dy < (antenna-y - 1) [ die ]
    jump (wave-length / patch-size)
    if ycor <= [ ycor ] of one-of antennas
      [ scope-activate ]
  ]
end 

to-report wave-out
  report [ -> ; advance clock timing the pulse
      set pips pips + 1
      ; pulses are considered lost if they do not return in a certain time.
      ; but for display purposes, we will destroy pulses that leave the screen,
      ; or are below the antenna

      let res wave-length / patch-size
      ifelse not can-move? res
      [ die ]
      [ ; wave moves forward
        jump res
        ; if wave has not yet hit something and there's a UFO in the way...
        if any? ufos with [ distance myself <= .25 ]
        [ wave-bounce ]
      ]
  ]
end 

to wave-propigate
  if rf-visible? or rf-visible? != old-rf-setting [ clear-drawing set old-rf-setting rf-visible? ]
  while [ any? waves ]
  [ ask waves [ run wave-move if rf-visible? [ stamp ] ]
  ]
  if rf-visible? [ display ]
end 

to antenna-sweep
    set antenna-heading antenna-heading + 5 * antenna-direction
    ifelse reciprocate?
    [ if abs antenna-heading > 90
      [ set antenna-heading 90 * antenna-direction
        set antenna-direction antenna-direction * -1
      ]
    ]
    [ if abs antenna-heading >= 180
      [ set antenna-heading -180 * antenna-direction + antenna-direction
      ]
    ]
    ; antenna-dir 0 - antenna-dir
    ask main-scope [ set heading antenna-heading ]
    ask main-antenna [ set heading antenna-heading ]
end 

to antenna-emit-pulse
  if abs antenna-heading < 90
  [ create-waves 1
    [ set shape "wave"
      set size wave-length / patch-size
      set heading antenna-heading
      setxy antenna-x antenna-y
      set bounced? false
      set pips 0
      set color white
      set hidden? not rf-visible?
      set wave-move wave-out
    ]
  ]
end 

to scope-activate
    ; converts the incoming wave to mark the scope
    ; marks the scope based on the travel-time of the wave
     let detected-distance 0

     hide-turtle
     set breed scope-markers
     set shape "phosphor"
     set size  1

     ; move to center of scope
     setxy scope-x scope-y
     set color green + 1
     ; reverse heading
     set heading ( heading + 180 )
     ; calulate distance, and scale for scope viewing.
     set detected-distance pips * wave-length / patch-size / 2.5
     if detected-distance > scope-radius
     [ set detected-distance scope-radius ]
     jump detected-distance
     show-turtle
end 

to scope-fade
    ask scope-markers
    [ ifelse size > (1 / patch-size)
      [ set size size * .96
      ]
      [ die ]
    ]
end 

to ufo-move
  ask ufos
  [ ifelse ( can-move? (speed ) )
    [ jump speed ]
    [ ufo-setup ]
    ;; ask (waves in-radius size) with [ not bounced? ] [ wave-bounce ]
  ]
end 

to wave-bounce
    set wave-move wave-in
    set heading heading + 180
    set color yellow
    set shape "wave-return"
    set bounced? true
end 

There is only one version of this model, created almost 3 years ago by James Steiner.

Attached files

File Type Description Last updated
RADAR.png preview Preview for 'RADAR' almost 3 years ago, by James Steiner Download

This model does not have any ancestors.

This model does not have any descendants.