Netlogo中圆的交点

Netlogo中圆的交点,netlogo,Netlogo,我正试图让我的代理人移动到一些圆圈交叉点内的一个随机位置。 我试图通过位置(检索每个圆的位置列表,获取交叉点的位置,然后让代理移动到交叉点内的随机位置)来实现这一点 实现这一点的最佳方法是什么?我不知道两个圆相交的透镜状区域的精确公式,所以这里我称之为可接受的平底船。交叉点上的任何东西都必须在第一个圆的圆心半径范围内,也必须在第二个圆的圆心半径范围内。因此,如果你只是生成一系列随机测试点,并检查这两个测试点是否都是真的,那么你得到的第一个“命中”将是交叉点区域中的一个随机点 你可以使用毕达哥拉斯

我正试图让我的代理人移动到一些圆圈交叉点内的一个随机位置。 我试图通过位置(检索每个圆的位置列表,获取交叉点的位置,然后让代理移动到交叉点内的随机位置)来实现这一点
实现这一点的最佳方法是什么?

我不知道两个圆相交的透镜状区域的精确公式,所以这里我称之为可接受的平底船。交叉点上的任何东西都必须在第一个圆的圆心半径范围内,也必须在第二个圆的圆心半径范围内。因此,如果你只是生成一系列随机测试点,并检查这两个测试点是否都是真的,那么你得到的第一个“命中”将是交叉点区域中的一个随机点

你可以使用毕达哥拉斯公式来计算距离,或者用更少的数学运算,你只需在每个圆圈的中心放一只乌龟,然后询问Netlogo从测试点到该代理的距离(即,使用“距离代理”或“距离x y”)

如果两个圆相距太远,根本就不会有交叉点,所以不要去找它

这是一段代码,它粗略地画了两个圆并解决了这个问题。你明白了。我在第一次点击后继续画出镜头形状的区域,以从视觉上确认这是可行的,但是你会在第一次点击时停下来

我画圆圈只是为了确认它在做我认为它在做的事情。你不需要画圆圈,可以跳过所有这些

哦,我不知道你们想对环球旅行做些什么。这是你们的决定

;; globals [ r1 x1 y1 r2 x2 y2 ] by sliders
turtles-own [ fake ]

to setup
  clear-all
   draw-circle x1 y1 r1 green
   draw-circle x2 y2 r2 blue
  reset-ticks
end

to go

  draw-circle x1 y1 r1 green
  draw-circle x2 y2 r2 blue

  ifelse  sqrt((x1 - x2)*(x1 - x2)  + ( y1 - y2 )*(y1 - y2))  >=  ( r1 + r2 )
    [ print " Circles too far apart, so there is no intersection " stop ]
  [ repeat 3 [
           let x max-pxcor - random (  max-pxcor - min-pxcor )
           let y max-pycor - random (  max-pycor - min-pycor )
           let dist1   sqrt((x1 - x )*(x1 - x )  + ( y1 - y  )*(y1 - y ))
           let dist2  sqrt((x2 - x )*(x2 - x )  + ( y2 - y  )*(y2 - y ))
           if  (( dist1  < r1 ) and ( dist2 < r2 ))
              [ ask patch x y [ set pcolor red ]]
  ]]

  reset-ticks
end


to draw-circle [ x y r shade ]
   create-turtles 1 [setxy ( x +  r ) y set color shade pen-down set heading 0 set fake true domove r]
end

to domove [ radius ]
  repeat 100 [fd 1 set heading ( heading -  ( 59 / radius)    ) ]
end
;;通过滑块的全局[r1-x1-y1 r2-x2-y2]
海龟自己的[假]
设置
清除所有
将圆x1 y1 r1画成绿色
画圆x2 y2 r2蓝色
重置滴答声
结束
外带
将圆x1 y1 r1画成绿色
画圆x2 y2 r2蓝色
如果其他sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))>=(r1+r2)
[打印“圆圈相距太远,因此没有交叉点”停止]
[重复3次[
设x max pxcor-随机(max pxcor-min pxcor)
设y max pycor-random(max pycor-min pycor)
设dist1 sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y))
设dist2 sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y))
如果((距离1
谢谢你的回答。实际上我找到了一个更简洁的方法。1)将可行补丁设置为所有补丁2)创建圆圈3)在圆圈上迭代,将可行补丁设置为可行补丁,并位于圆圈内4)循环移动到一个可行补丁后