Liz Lamperouge
Liz Lamperouge

Reputation: 691

Draw a semicircle in Netlogo

I want to create a semicircle, the center of my semicircle is at the end of the world, for example I want that the center of my semicircle is in the 50,20 position, and goes from 20 to -20. I try with this, but I got an exception:

The point [ 60 , 20 ] is outside of the boundaries of the world and wrapping is not permitted in one or both directions.

to mysemicircle
  let cx 50                ;; x coordinate of patch you want to circle
  let cy 20                ;; y coordinate of patch you want to circle
  let r 10                ;; radius of the circle you want
  let p2r ( 2 * pi * r )  ;; get circumference of the circle
  let step p2r / 360      ;; make step lengths 1/360th of the circumference
  crt 1 [                 ;; create a single drawing turtle
    setxy cx + r cy       ;; move it to the highlight patch + the radius
    pd                    ;; put the pen down
    set heading 0         ;; make it face along the tangent
    while [ p2r > 0 ] [   ;; make the turtle continue to move until the circle is drawn
      lt 1                
      fd step            
      set p2r p2r - step 
      set color white   
    ]
  ]

end

And If i use cx 40 and cy 20 the circle is not from y -20 to y 20, but is only from y 0 to y 20. How Can I do that?

Upvotes: 1

Views: 224

Answers (1)

Luke C
Luke C

Reputation: 10301

Maybe a procedure with arguments would be better for this, something like:

to setup
  ca  
  resize-world -20 20 -20 20
  draw-semi-circle 0 0 15 45 blue
  draw-semi-circle 5 5 5 270 red
  draw-semi-circle -10 -10 8 135 green
  reset-ticks
end

to draw-semi-circle [ x y r a col ] 
  ; Give arguments for x, y, radius, and angle of the semicircle
  let half-p ( pi * r ) 
  let step half-p / 180
  ask patch x y  [
    set pcolor col
  ]
  crt 1 [  
    setxy x y
    set heading a   
    lt 90
    set color col
    back r 
    pd                    
    fd 2 * r
    rt 90
    while [ half-p > step ] [  
      rt 1                
      fd step            
      set half-p half-p - step  
    ]
  ]
end

To get an output like:

enter image description here

Upvotes: 4

Related Questions