Line smoothing - minimum angle
Model was written in NetLogo 5.3.1
•
Viewed 350 times
•
Downloaded 21 times
•
Run 0 times
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
globals [Bm Bb Am Ab ang ang1 ang2 p-1_p1_hyp p_p1_hyp p-1_p_hyp A1x A1y A2x A2y B1x B1y B2x B2y Ix Iy thisdist pntlist deg r deglist rlist pos wholist p-1x p-1y px py p1x p1y two_who_list x1 y1 x2 y2 hyp] turtles-own [jag medianx mediany] to setup ca set deglist [] set rlist [] repeat Point_count [ set deg random 360 set r (max-pxcor * (inner / 100)) + random (max-pxcor * (outer / 100) - max-pxcor * (inner / 100)) set deglist lput deg deglist set rlist lput r rlist ] set deglist sort deglist set pos -1 repeat Point_count [ set pos pos + 1 crt 1 [set label jag set size 3 set shape "dot" set heading item pos deglist jump item pos rlist] ] calcjag drawlinks end to plot_angles set-current-plot "Angles" histogram [jag] of turtles set-current-plot "Radius" histogram [distance patch 0 0] of turtles end to noise ask turtles [set heading random 360 jump random noise_distance] calcjag drawlinks plot_angles end to dropjag ask turtles with [jag < angle_threshold] [die] calcjag drawlinks plot_angles end to gomedian ask turtles with [jag < angle_threshold] [carefully [set xcor medianx set ycor mediany][]] calcjag drawlinks plot_angles end to drawlinks set wholist [] ask turtles[set wholist lput who wholist] set wholist sort wholist set pos 0 repeat (length wholist - 1) [ set pos pos + 1 ask turtle (item pos wholist) [create-link-with turtle (item (pos - 1) wholist)]] ask turtle (last wholist) [create-link-with turtle (first wholist)] end to calcjag set wholist [] ask turtles[set wholist lput who wholist] set wholist sort wholist set wholist lput first wholist wholist set wholist lput item 1 wholist wholist set pos 0 repeat (length wholist - 2) [ set pos pos + 1 set p-1x [xcor] of turtle (item (pos - 1) wholist) set p-1y [ycor] of turtle (item (pos - 1) wholist) set px [xcor] of turtle (item pos wholist) set py [ycor] of turtle (item pos wholist) set p1x [xcor] of turtle (item (pos + 1) wholist) set p1y [ycor] of turtle (item (pos + 1) wholist) set p-1_p_hyp hypot p-1x p-1y px py set p_p1_hyp hypot px py p1x p1y set p-1_p1_hyp hypot p1x p1y p-1x p-1y ifelse ((p-1_p_hyp < p_p1_hyp) and (p-1_p1_hyp < p_p1_hyp)) [ ; p_p1_hyp is the longest side of the triangle carefully [set ang (asin ((p2l_dist px py p1x p1y p-1x p-1y) / p-1_p_hyp))][set ang 0] ] [ifelse (p-1_p1_hyp < p-1_p_hyp) and (p_p1_hyp < p-1_p_hyp)[ ; AB is the longest side of the triangle carefully [set ang (asin ((p2l_dist p-1x p-1y px py p1x p1y) / p_p1_hyp))][set ang 0] ] [; AC is the longest side of the triangle carefully [set ang1 (asin ((p2l_dist p1x p1y p-1x p-1y px py) / p_p1_hyp))][set ang1 0] carefully [set ang2 (asin ((p2l_dist p1x p1y p-1x p-1y px py) / p-1_p_hyp))][set ang1 0] set ang 180 - (ang1 + ang2) ] ] ask turtle item pos wholist [set jag int ang set label jag set medianx (first calcmedian p-1x p-1y px py p1x p1y) set mediany (last calcmedian p-1x p-1y px py p1x p1y)] plot_angles ] set wholist but-last but-last wholist end to-report hypot [a b c d] report (((a - c) ^ 2) + ((b - d) ^ 2)) ^ 0.5 end to-report p2l_dist [a b c d f g] set A1x a set A1y b set A2x c set A2y d set B1x f set B1y g set Am (A1y - A2y) / (A1x - A2x) set Ab A1y - (Am * A1x) set Bm -1 / Am set Bb B1y - (Bm * B1x) ;get the y intercept ;solve for point intersection at right angle set Ix ((Bb - Ab) / (Bm - Am)) * -1 set Iy Bm * Ix + Bb report hypot B1x B1y Ix Iy end to-report calcmedian [ax ay bx by cx cy] ;show (se ax ay bx by cx cy) ;line A carefully [ ;if there's an error (division by 0) then set the median to the current turtle coordinates set A1x (ax + cx) / 2 set A1y (ay + cy) / 2 set Am (A1y - by) / (A1x - bx) set Ab A1y - (Am * A1x) ;show (se A1x A1y Am Ab) ;line B set B1x (ax + bx) / 2 set B1y (ay + by) / 2 set Bm (B1y - cy) / (B1x - cx) set Bb B1y - (Bm * B1x) ;show (se B1x B1y Bm Bb) ;lines A and B intersect set Ix ((Bb - Ab) / (Bm - Am)) * -1 set Iy (Bm * Ix) + Bb ] [set Ix bx set Iy by] report (list Ix Iy) end
There is only one version of this model, created about 8 years ago by Eugene Martin.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Line smoothing - minimum angle.png | preview | Preview for 'Line smoothing - minimum angle' | about 8 years ago, by Eugene Martin | Download |
This model does not have any ancestors.
This model does not have any descendants.