[英]geosphere/R: Calculate intersection points between two great circles defined with 4 points
[英]how to calculate the intersection area of two circles in shiny or R code
任何人都有關於如何計算兩個圓的相交面積的閃亮代碼或R代碼?
圖書館(閃亮)
ShinyUI(fluidPage(
#應用程序標題titlePanel(“選擇您的概率”),
#帶有用於箱數的滑塊輸入的側欄sidebarLayout(sidebarPanel(
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(函數(輸入,輸出){
output $ distPlot <-renderPlot({
isolate({
plot(c(-1,1),c(-1,1), type = 'n')
})
draw.circle(-0.25,0,input$radius)
draw.circle(0.25,0,input$radius2)
})
})
您可以使用此:
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 + area1)
}
}
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.08051314 (Circles partially overlap)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.