2017-06-08 17 views
0

誰もが2つの円の交差領域を計算する方法について光沢のあるコードまたはRコードを持っていますか?光沢のある、またはRのコードで2つの円の交差領域を計算する方法

UI

ライブラリ(光沢)

ヒストグラム

shinyUI(fluidPage(

#アプリケーションのタイトル titlePanelを( "あなたの確率を選択してください")、描画アプリケーションのUIを定義します。

#ビン数のスライダ入力付きサイドバー サイドバーレイアウト( 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(function(input、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) 

})

})

答えて

1

あなたはこれを使用することができます。

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) 
関連する問題