讨论/面试考题/自由落体的问题/
自由落体的问题

一个球从100米处进行自由落体,重力速度为10m/s,到达地面后反弹速度为接触地面瞬时速度的一半,求经过T秒后,球所经过的距离s。
(v=gt;h=gt^2/2)

展开讨论
大奶爸2333发起于 2020-05-06
package main
import (
    "fmt"
)
func main() {
    // 一个球从100米处进行自由落体,重力速度为10m/s,到达地面后反弹速度为接触地面瞬时速度的一半,求经过T秒后,球所经过的距离s。(v=gt;h=gt^2/2)
    fmt.Println("最终结果:", freeFallDistance(100, 10, 30))
}

func freeFallDistance(h, g, t float64) (s float64) {
    // h = 1/2 * gt^2
    // 第一次落地:
    // 经过时间 t1 = sqrt(2h/g)
    // 反弹时初速度 v1 = 1/2 * gt1
    // 达到反弹最高点:
    // 所经历时间 t2 = v1 / g (公式 v' = v0 + at)
    // 最高点高度:h1 = v1 * t2 + 1/2 * -g(t2)^2 (公式 x = v0t + 1/2 * at^2)
    if t <= 0 {
        return 0
    }
    fmt.Printf("当前高度 h 为:%.2fm,需要经历时间 t 为:%.2fs\n", h, t)
    
    t1 := math.Sqrt(2 * h / g)
    if t - t1 <= 0 {
        // 此时小球并未落地,t为经历的时间
        // 所经历路程 x = 1/2 * gt^2
        x := g * math.Pow(t, 2) / 2
        fmt.Printf("此时小球并未落地,经历时间 t 为: %.2fs,经历路程 x 为:%.2fm\n", t, x)
        return x
    }
    v1 := g * t1 / 2
    fmt.Printf("小球下落经历时间 t1 为:%.2fs\n", t1)
    t2 := v1 / g
    if t - t1 - t2 <= 0 {
        // 小球并未弹起到最大高度, t3 = t - t1 为小球弹起所经历的时间
        // 小球弹起所经过的路程 x = v1 * t3 + 1/2 * (-g)(t3)^2
        t3 := t - t1
        x := v1 * t3 - g * t3 / 2
        fmt.Printf("此时小球并未弹起到最大高度,小球弹起所经历时间 t3 为:%.2fs,弹起所经历路程为:%.2fm\n", t3, x)
        return h + x
    }
    h1 := v1 * t2 + g * math.Pow(t2, 2) / 2
    fmt.Printf("弹起最大高度为 h1 为:%.2fm\n\n", h1)
    
    return h + h1 + freeFallDistance(h1, g, t - t1 - t2)
}

输出结果:

执行完成,耗时:0 ms
当前高度 h 为:100.00m,需要经历时间 t 为:30.00s
小球下落经历时间 t1 为:4.47s
弹起最大高度为 h1 为:75.00m

当前高度 h 为:75.00m,需要经历时间 t 为:23.29s
小球下落经历时间 t1 为:3.87s
弹起最大高度为 h1 为:56.25m

当前高度 h 为:56.25m,需要经历时间 t 为:17.48s
小球下落经历时间 t1 为:3.35s
弹起最大高度为 h1 为:42.19m

当前高度 h 为:42.19m,需要经历时间 t 为:12.45s
小球下落经历时间 t1 为:2.90s
弹起最大高度为 h1 为:31.64m

当前高度 h 为:31.64m,需要经历时间 t 为:8.09s
小球下落经历时间 t1 为:2.52s
弹起最大高度为 h1 为:23.73m

当前高度 h 为:23.73m,需要经历时间 t 为:4.32s
小球下落经历时间 t1 为:2.18s
弹起最大高度为 h1 为:17.80m

当前高度 h 为:17.80m,需要经历时间 t 为:1.05s
此时小球并未落地,经历时间 t 为: 1.05s,经历路程 x 为:5.54m
最终结果: 580.9576881244517

好久没做物理题了,不知道公式对不对

展开全部 3 讨论