当前位置: 首页 > 知识库问答 >
问题:

如何计算两个圆在闪亮或R码中的交集面积

赵智
2023-03-14

有人有关于如何计算两个圆的相交面积的闪亮代码或R代码吗?

图书馆(闪亮)

我的页面

#申请标题标题板(“选择你的可能性”),

#侧边栏与滑块输入箱的数量侧边栏布局(侧边栏面板(

  sliderInput("radius",
              "Probability of A",
              min = 0,
              max = 0.4,
              value = 0.2),
  sliderInput("radius2",
              "Probability of B",
              min = 0,
              max = 0.4,
              value = 0.2)
),
mainPanel(
  plotOutput("distPlot")
)

)))

库(闪亮)库(plotrix)库(栅格)

shinyServer(功能(输入、输出){

输出$distPlot

isolate({
  plot(c(-1,1),c(-1,1), type = 'n')


})

draw.circle(-0.25,0,input$radius)
draw.circle(0.25,0,input$radius2)

})

})

共有1个答案

况弘新
2023-03-14

您可以使用这个:

circle_intersection <- function(x1, y1, r1, x2, y2, r2){
  rr1 <- r1 * r1
  rr2 <- r2 * r2
  d <- sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
  
  if (d > r2 + r1) # Circles do not overlap
  {
    return(0)
  } else if (d <= abs(r1 - r2) && r1 >= r2){ # Circle2 is completely inside circle1  
    return(pi*rr2)
  } else if (d <= abs(r1 - r2) && r1 < r2){ # Circle1 is completely inside circle2
    return(pi*rr1)
  } else { # Circles partially overlap
    phi <- (acos((rr1 + (d * d) - rr2) / (2 * r1 * d))) * 2
    theta <- (acos((rr2 + (d * d) - rr1) / (2 * r2 * d))) * 2
    area2 <- 0.5 * theta * rr2 - 0.5 * rr2 * sin(theta)
    area1 <- 0.5 * phi * rr1 - 0.5 * rr1 * sin(phi)
    return(area1 + area2)
  }
}

circle_intersection(-0.25,0,0.2,0.25,0,0.2)  # 0 (Circles do not overlap)
circle_intersection(-0.25,0,0.2,-0.25,0,0.1) # 0.031 (Circle2 is completely inside circle1)
circle_intersection(-0.25,0,0.1,-0.25,0,0.2) # 0.031 (Circle1 is completely inside circle2)
circle_intersection(-0.25,0,0.3,0.25,0,0.4)  # 0.06641675 (Circles partially overlap)
 类似资料:
  • 我已经开始练习R闪亮,请在下面的代码中找到我试图进行计算的部分。请协助获取输出,因为我无法生成。 用户界面 库(发光)库(发光板) 我的页面 titlePanel(“零基成本模型”), 侧边栏 侧边栏面板(“输入客户详细信息”), 条件="input.tabselect==1", conditionalPanel(condition=“input.tabselect==5”, #submitBut

  • 问题内容: 说,有两个哈希集,如何计算它们的交集? 问题答案: 使用以下方法: 如果要保留集合,请创建一个新集合以保存交集: 该的的说,这正是你想要的: 仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从该集合中删除所有未包含在指定集合中的元素。如果指定的集合也是一个集合,则此操作将有效地修改此集合,以使其值为两个集合的交集。

  • 我如何找到两个数组共有的值?在这种情况下,应返回和。

  • 我发现了如何在Shiny中更改用户界面的背景色。我发现的问题是,它还为我用显示的表的背景上色。这里我展示一个虚拟示例。 用户界面。R shinyUI(页面带有侧栏( 标题面板(“虚拟”), 侧栏面板(标签$hr()), 主面板( 服务器R ShinyServer(函数(输入,输出){输出$虚拟 我得到的是这个 我想得到的(我用GIMP重新创建了它)是 谢谢大家的帮助!

  • 问题内容: 我有两个排序集,并且想要进行交集,即。 关于效率,是否有比以下更好的方法: 问题答案: 您应该先使用ZCARD检查哪些元素较少,然后克隆并修剪较短的元素。 其次,您将剩下2个剩菜。您可以重复使用同一辅助程序,以加快清除速度。 我还想建议克隆使用DUMP和RESTORE,但是对于排序集的情况,ZUNIONSTORE实际上要快得多。这是一个100万个元素集的时间安排:

  • 问题内容: 有什么有效的方法来获取Go中两个切片的交集吗? 我想避免嵌套for循环之类的解决方案 字符串顺序无关紧要 问题答案: 是的,有几种不同的解决方法。.这是一个可以优化的示例。 现在上面定义的交集方法将只运行在的,比如你的例子。您可以在理论上创建一个定义,这个样子的,但是你会依靠反射和类型转换,这样就可以比较,这将增加延迟和使您的代码更难阅读。对于您关心的每种类型,维护和阅读以编写单独的函