Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shiny 需要一些帮助来写一个“";向心力;物理课应用程序_Shiny_Shiny Reactivity - Fatal编程技术网

Shiny 需要一些帮助来写一个“";向心力;物理课应用程序

Shiny 需要一些帮助来写一个“";向心力;物理课应用程序,shiny,shiny-reactivity,Shiny,Shiny Reactivity,我对rshiny还不太熟悉。我确信我的问题在各种文档中都得到了解决,但我没有找到它 向心力(物理)取决于质量、速度和半径。我想让学生们玩这三个,看看原力会发生什么。我正在使用滑块作为变量 但我也希望他们能探索,当力固定时,速度和半径之间的关系。为此,我使用了一个复选框,并尝试捕捉是移动了半径滑块(在这种情况下,更新速度滑块以使力固定)还是移动了速度滑块(在这种情况下,更新保持力固定的半径滑块) 这导致了一些不希望出现的行为-移动一个滑块会更新另一个滑块,但它们会不断更新,最终会一直向左或向右移动

我对rshiny还不太熟悉。我确信我的问题在各种文档中都得到了解决,但我没有找到它

向心力(物理)取决于质量、速度和半径。我想让学生们玩这三个,看看原力会发生什么。我正在使用滑块作为变量

但我也希望他们能探索,当力固定时,速度和半径之间的关系。为此,我使用了一个复选框,并尝试捕捉是移动了半径滑块(在这种情况下,更新速度滑块以使力固定)还是移动了速度滑块(在这种情况下,更新保持力固定的半径滑块)

这导致了一些不希望出现的行为-移动一个滑块会更新另一个滑块,但它们会不断更新,最终会一直向左或向右移动

我认为,当移动所有三个滑块时,我希望力输出是被动的,但选中复选框时,我不希望力输出是被动的。我想把它修好

我需要一些帮助或提示。这是我的密码:

library(shiny)

# Define UI for application that explores centripetal acceleration
update_svg <- function(radius, velocity) {
    svg <- paste(readLines("images/centripetal-animated.svg"), collapse = "\n")

    # transformations ...
    scale <- round(radius/40, 4)

    dt <- round(2*pi*radius/velocity, 2)
    dy <- round(-36*velocity/62.83/scale, 4)
    a <- velocity^2/radius
    dx <- round(-52.92*a/100/scale, 4)
    x0 <- 148.166664 + dx

    cx <- round((scale - 1)*95.25, 2)
    cy <- round((scale - 1)*100.54166, 2)


    svg <- sub("\\{scale\\}", scale, svg)
    svg <- sub("\\{DY\\}", dy, svg)
    svg <- sub("\\{X0\\}", x0, svg)
    svg <- sub("\\{DX\\}", -dx, svg)
    svg <- sub("\\{DT\\}", dt, svg)
    svg <- sub("\\{CX\\}", -cx, svg)
    svg <- sub("\\{CY\\}", -cy, svg)

    con <- paste0(tempfile("svg"), ".svg")
    writeLines(svg, con)

    con
}

ui <- fluidPage(

    # Application title
    titlePanel("Physics"),

    # Tabset panel
    tabsetPanel(
        tabPanel("Centripetal Acceleration",
            # Sidebar with a slider input for number of bins 
            sidebarLayout(
                sidebarPanel(
                    sliderInput("mass",
                                "Mass (kg):",
                                min = 0,
                                max = 10,
                                value = 5),
                    sliderInput("radius",
                                "Radius (m):",
                                min = 0,
                                max = 60,
                                value = 30),
                    sliderInput("velocity",
                                "Tangential Velocity (m/s):",
                                min = 0,
                                max = 60,
                                value = 30),
                    textOutput("angular"),
                    textOutput("acceleration"),
                    list(textInput("force", "Force (N):", 150), checkboxInput("freeze", "Fix mass & force"))
                ),

                # Show a plot of the generated distribution
                mainPanel(
                    imageOutput("svg")
                )
            )
        )
    )

)

# Define server logic 
server <- function(input, output, session) {
    # if force is fixed, observe change in radius and adjust
    # velocity to maintain fixed acceleration and force.
    observeEvent(input$radius,  {
        if (input$freeze == 1) {
            updateSliderInput(session = session, inputId = "velocity",
                              value = sqrt(as.numeric(input$force)*input$radius/input$mass))
        }
    })

    # if force is fixed, observe change in velocity and
    # adjust radius to maintain fixed acceleration and force.
    observeEvent(input$velocity,  {
        if (input$freeze == 1) {
            updateSliderInput(session = session, inputId = "radius",
                              value = input$mass*input$velocity^2/as.numeric(input$force))
        }
    })

    observe({
        angular <- input$velocity/input$radius
        acceleration <- input$radius*angular^2
        force <- input$mass*acceleration

        output$angular <- renderText(paste0("Angular Velocity: ", signif(angular, 2), " (rad/s)"))
        output$acceleration <- renderText(paste0("Acceleration: ", signif(acceleration, 2), " (m/s^2)"))
        updateTextInput(session ,"force", value = signif(force, 2))

        output$svg <- renderImage(list(src = update_svg(input$radius, input$velocity)))
    })
}

# Run the application 
shinyApp(ui = ui, server = server)
库(闪亮)
#为探索向心加速度的应用程序定义UI
更新svg