Sound through a medium
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
HOW IT WORKS
HOW TO USE IT
THINGS TO TRY
EXTENDING THE MODEL
NETLOGO FEATURES
CREDITS AND REFERENCES
Developed by Michael Novak, Northwestern University, Evanston, IL.
This model is based on the code from the NetLogo Wave Machine model: http://ccl.northwestern.edu/netlogo/models/WaveMachine. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
HOW TO CITE
If you mention this model in a publication, we ask that you include this citation
- Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
COPYRIGHT AND LICENSE
Copyright 1997 Uri Wilensky.
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at uri@northwestern.edu.
This model was created as part of the project: CONNECTED MATHEMATICS: MAKING SENSE OF COMPLEX PHENOMENA THROUGH BUILDING OBJECT-BASED PARALLEL MODELS (OBPML). The project gratefully acknowledges the support of the National Science Foundation (Applications of Advanced Technologies Program) -- grant numbers RED #9552950 and REC #9632612.
This model was converted to NetLogo as part of the projects: PARTICIPATORY SIMULATIONS: NETWORK-BASED DESIGN FOR SYSTEMS LEARNING IN CLASSROOMS and/or INTEGRATED SIMULATION AND MODELING ENVIRONMENT. The project gratefully acknowledges the support of the National Science Foundation (REPP & ROLE programs) -- grant numbers REC #9814682 and REC-0126227. Converted from StarLogoT to NetLogo, 2001.
Comments and Questions
;extensions [profiler] globals [ membrane-edge-x ;; horizontal distance from center to edge of membrane membrane-edge-y ;; vertical distance from center to edge of membrane membrane-center detector-value-1 detector-value-2 membrane-surface atom-batch-twist ; driver-vibration-frequency red-detector-size blue-detector-size length-of-simulation ; stength-of-push empty-space #atoms vibrate-particles? dark-friction-in-medium stiffness distance-of-blue-squares-from-sound-source particle-shape friction-in-medium ] breed [grids grid] breed [particles particle] breed [dark-particles dark-particle] breed [boundaries boundary] breed [atoms atom ] breed [detectors detector] breed [graphics-detectors graphic-detector] particles-own [ edge? ;; are we on the edge of the membrane? driver? ;; are we part of the green driving plate? x ;; position on x axis in space y ;; position on y axis in space z ;; position on z axis in space velocity ;; velocity along z axis neighbor-particles ;; agentset of particles adjacent to us ] dark-particles-own [ edge? driver? x ;; position on x axis in space y ;; position on y axis in space z ;; position on z axis in space velocity ;; velocity along z axis neighbor-particles ;; agentset of particles adjacent to us ] boundaries-own [ edge? driver? x ;; position on x axis in space y ;; position on y axis in space z ;; position on z axis in space velocity ;; velocity along z axis neighbor-particles ;; agentset of particles adjacent to us ] patches-own [detector? detector-number] atoms-own [kind x y offset-distance tracking?] to setup clear-all set stiffness 3.0 set vibrate-particles? true set empty-space 1 set #atoms 3 set friction-in-medium 0 set distance-of-blue-squares-from-sound-source 1 set dark-friction-in-medium 6 ;set stength-of-push 15 set length-of-simulation 499 ; set driver-vibration-frequency 30 set red-detector-size 1 set blue-detector-size 1 set atom-batch-twist false set membrane-surface "" set membrane-surface "rigid" set particle-shape "offset-circle" create-graphics-detectors 1 [set color black setxy -3.5 0 set size 6 set shape "detector" set hidden? not show-detector-region?] ask patches [set detector? false set pcolor white] ask patches with [(pxcor <= max-pxcor - 1) and pycor = 0] [ sprout 1 [ set breed particles ; set color [0 255 0 150] set hidden? true set edge? false set driver? false set size 1.1 if (( pxcor >= (min-pxcor + 2) and pxcor <= min-pxcor + 3) and pxcor != max-pxcor ) [set driver? true set shape "rectangle" set color orange set hidden? false set size 3.6 ; if pxcor = (min-pxcor + 4) [set shape "half-face"] ] set x xcor set y ycor set z 0 set velocity 0 ; repack-new ] ] ask patches with [(pxcor <= max-pxcor - 1) and pycor = 0][ sprout 1 [ set breed dark-particles set edge? false set driver? false set x xcor set y ycor set z 0 set velocity 0 set hidden? true ; repack-new ] ] ask patches with [(pxcor = max-pxcor) and pycor >= (min-pycor + empty-space) and pycor <= (max-pycor - empty-space)][ sprout 1 [ set breed boundaries set edge? false set driver? false set color violet set x xcor set y ycor set z 0 set velocity 0 set hidden? true ; repack-new ] ] ask particles [ let these-particle-neighbors particles-on neighbors4 let these-boundary-neighbors boundaries-on neighbors4 let myxcor x ; if (driver?) [set hidden? false] ; set shape "square" ; set size 2 ifelse myxcor = (max-pxcor - 1) [set neighbor-particles (turtle-set these-particle-neighbors these-boundary-neighbors) with [x != myxcor] ] [ set neighbor-particles these-particle-neighbors with [x != myxcor] ] ] ask dark-particles [ let these-dark-neighbors dark-particles-on neighbors4 let these-boundary-neighbors boundaries-on neighbors4 let myxcor x ifelse myxcor = (max-pxcor - 1) [ set neighbor-particles (turtle-set these-dark-neighbors these-boundary-neighbors) with [x != myxcor]] [ set neighbor-particles these-dark-neighbors with [x != myxcor] ] ] ask boundaries [ let these-dark-neighbors dark-particles-on neighbors4 let these-particle-neighbors particles-on neighbors4 let myxcor x set neighbor-particles (turtle-set these-dark-neighbors these-particle-neighbors) with [x != myxcor] ] ask patches [ let min-xpos -5 if (pxcor >= (min-xpos + distance-of-blue-squares-from-sound-source) and pxcor <= (min-xpos + distance-of-blue-squares-from-sound-source + 1) ) and (abs pycor < 2 ) [set detector? true] ] ; ask patches [ ; sprout 1 [set breed grids set shape "grid" set color [255 255 255 55] stamp die] ; ] make-atoms-new ; ask atoms [ ; ifelse show-particles-in-medium? ; [set hidden? not show-particles-in-medium?] ; [set hidden? not show-particles-in-medium?] ; ] repack-new calculate-detector-values reset-ticks end to make-atoms-new let counter-x 0 let min-x (min-pxcor + 5) let x-offset -.45 let x-offset-2 0 let x-offset-3 0 let counter-y 0 let min-y -1.4 let closest-particle nobody repeat 3 [ repeat 2 [ repeat 2 [ repeat (abs (min-x * 2) + 4) [ create-atoms 1 [set breed atoms set size (.45 * particle-size) set color [50 175 50] set shape "offset-circle" set hidden? false setxy (min-x + counter-x + x-offset + x-offset-2 + x-offset-3 ) (min-y + counter-y) set offset-distance (pxcor - xcor) rt random 360 set color [50 175 50] set closest-particle min-one-of particles [distance myself] create-link-from closest-particle [tie set hidden? true] set x xcor set y ycor set tracking? false ] set counter-x counter-x + 1 ] set counter-x 0 set x-offset x-offset + 0.5 set counter-y counter-y + 0.25 ] set x-offset -.45 set x-offset-2 x-offset-2 + (0.052) ] set x-offset -.45 ; set x-offset-2 0 set x-offset-3 x-offset-3 - (0.16) ] ask particles with [not edge? and not driver?] [set hidden? true] end to repack ;; turtle procedure' let my-xcor 0 ask (turtle-set particles boundaries dark-particles) [ if not edge? [ setxy x y set heading -90 fd z / slide-step ] ] end to repack-new ;; turtle procedure' let my-xcor 0 ask (turtle-set particles boundaries dark-particles) [ if not edge? [ setxy x y set heading -90 fd z / slide-step ] ] ask (particles) [ if not edge? [ let this-z z ; fd z / slide-step if breed = particles and any? link-neighbors [ set my-xcor x let left-neighbor-particle one-of neighbor-particles with [x < my-xcor] let right-neighbor-particle one-of neighbor-particles with [x > my-xcor] let z-left [z] of left-neighbor-particle let z-right[z] of right-neighbor-particle ask link-neighbors [ set xcor x set ycor y set heading -90 fd this-z / slide-step if offset-distance < 0 [fd offset-distance * (z-left - this-z) / slide-step] if offset-distance > 0 [fd offset-distance * (this-z - z-right) / slide-step] ; if wiggle? [rt random 360] ] ] ;ask atoms with [] ] ] end to check-driver ask particles [ let driver-vibration-frequency vibration-frequency * 30 ifelse driver? [ set z (vibration-amplitude * -1 * (sin (0.1 * driver-vibration-frequency * ticks))) if (0.1 * driver-vibration-frequency * ticks) / 360 >= #-of-repeated-vibrations [set z 0] ] [ set z (z + velocity)] ; set hidden? true ] ask boundaries [ set z (z + velocity)] ask dark-particles [ set z (z + velocity)] end to go if (ticks > length-of-simulation) [stop] ask particles with [not edge?] [ propagate-across-particles friction-in-medium ] ask boundaries [ propagate-across-particles friction-in-medium] ask dark-particles [ propagate-across-particles dark-friction-in-medium] check-driver check-mouse-click repack-new calculate-detector-values tick end to check-mouse-click if mouse-down? and mouse-inside? [ let this-mouse-xcor mouse-xcor let this-mouse-ycor mouse-ycor let atoms-near-mouse atoms with [sqrt (((xcor - mouse-xcor) ^ 2) + ((ycor - mouse-ycor) ^ 2)) <= .25 ] ask atoms [set tracking? false set color [50 175 50]] if any? atoms-near-mouse [ask atoms-near-mouse [set tracking? true]] ] ifelse mouse-inside? [ask atoms with [tracking? = true][set color red] ] [ask atoms with [tracking? = true][set tracking? false set color [50 175 50]] ] end to calculate-detector-values ask graphics-detectors [set hidden? not show-detector-region?] end to propagate-across-particles [this-friction-in-medium] ;; turtle procedure -- propagates the wave from neighboring particles set velocity (velocity + (stiffness * 0.01) * (sum [z] of neighbor-particles - 2 * z)) set velocity (((1000 - this-friction-in-medium) / 1000) * velocity) end to-report #-atoms-at-detector let p 0 ifelse show-detector-region? [set p (count atoms with [pxcor >= -4 and pxcor <= -3] )] [set p "N/A"] report p end ; Copyright 1997 Uri Wilensky. ; See Info tab for full copyright and license.
There is only one version of this model, created about 7 years ago by Michael Novak.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.