公告:本站正式转型为非交互式静态网站!
转型:本站将通过笔记和博客的形式继续为大家服务,关于 Mathematica 问答服务请移步至QQ群:365716997
联系:如有问题请联系QQ群管理员,或发送邮件至:lixuan.xyz@qq.com。
感谢:最后非常感谢大家多年来的支持与帮助!
参考《互联网跟帖评论服务管理规定》《中华人民共和国网络安全法》《网络信息内容生态治理规定》《互联网用户账号信息管理规定》

—— 2022-11-27

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

+1 投票
1.9k 浏览
Clear[f, g];
f[{{x1_, y1_}, r1_}, {{x2_, y2_}, r2_}] := {RegionIntersection[Circle[{x1, y1}, r1], Disk[{x2, y2}, r2]], RegionIntersection[Disk[{x1, y1}, r1], Circle[{x2, y2}, r2]]};

g[{{x1_, y1_}, r1_}, {{x2_, y2_}, r2_}] :=
 Module[{p =
    Quiet@Values@
      Solve[{(x - x1)^2 + (y - y1)^2 ==
         r1^2, (x - x2)^2 + (y - y2)^2 == r2^2}, {x, y}, Reals]},
  {Circle[{x1, y1}, r1,
    If[Length@p == 0, {0, 0}, ArcTan @@ (# - {x1, y1}) & /@ p]],
   Circle[{x2, y2}, r2,
    If[Length@p == 0, {0, 0}, ArcTan @@ (# - {x2, y2}) & /@ p]]}
  ]

Table[cs = Table[{RandomReal[{-5, 5}, 2], RandomReal[{4, 6}]}, {2}];
 Graphics[{Circle @@@ cs, Green, g @@ cs}], {5}]



就是上面的代码,本来以为RegionIntersection[Circle[{x1, y1}, r1], Disk[{x2, y2}, r2]]就能直接得到形如Circle[{x,y},r,{t1,t2}]的,但是必须要赋值之后才行,想自己实现一个,可是就遇到了问题

用户: 孺子剑牛不群 (216 分)
修改于 用户:孺子剑牛不群

1个回答

+2 投票
 
已采纳

第一次没理解你的意思。

在你的基础之上改了改:


g[{{x1_, y1_}, r1_}, {{x2_, y2_}, r2_}] := 
 Module[{p = 
    Quiet@Values@
      Solve[{(x - x1)^2 + (y - y1)^2 == 
         r1^2, (x - x2)^2 + (y - y2)^2 == r2^2}, {x, y}, Reals], 
   o12 = ArcTan @@ ({x2, y2} - {x1, y1}), 
   o21 = ArcTan @@ ({x1, y1} - {x2, y2}), q1, q2},
  q1 = Sort[ArcTan @@ (# - {x1, y1}) & /@ p];
  q2 = Sort[ArcTan @@ (# - {x2, y2}) & /@ p];
  {Circle[{x1, y1}, r1, 
    If[Length@p < 2, {0, 0}, 
     If[o12 > q1[[1]] && o12 < q1[[2]], q1, 
      Sort[{q1[[1]] += 2 Pi, q1[[2]]}]]]], 
   Circle[{x2, y2}, r2, 
    If[Length@p < 2, {0, 0}, 
     If[o21 > q2[[1]] && o21 < q2[[2]], q2, 
      Sort[{q2[[1]] += 2 Pi, q2[[2]]}]]]]}]

Table[cs = Table[{RandomReal[{-5, 5}, 2], RandomReal[{4, 6}]}, {2}];
 Graphics[{Circle @@@ cs, Green, g @@ cs}], {5}]

问题在于:你原来并没有判断应该画哪个半圆弧。

用户: 野鹤 (5.1k 分)
采纳于 用户:孺子剑牛不群
我知道啊,因为一些原因必须要用9.0,但9.0没有RegionIntersection,而函数g就是模仿函数f的,但不知道应该怎么改才能和f一样
第一次理解错了,这次修改了。
没看到回答按扭在哪里,还是说当楼主接受回答后就不能再回答了?
Table[cs=Table[{RandomReal[{-5,5},2],RandomReal[{4,6}]},{2}];
Show[Through[{Graphics[Circle@@@#1]&,DiscretizeRegion[RegionBoundary@RegionIntersection[Disk@@@#],MeshCellStyle->{{1,All}->Red,{0,All}->Red}]&}[cs]]],{5}]
楼主是想在mma 9 中使用。RegionIntersection是在10.0之后才有的。
...