L3-013. 非常弹的球

本文介绍了一道关于物理模拟的题目——非常弹的球。任务是在理想化的条件下,计算一个具有一定初始动能的弹性球在多次弹跳过程中的最远飞行距离。文章提供了完整的解题思路与代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

L3-013. 非常弹的球

时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
俞勇(上海交通大学)

刚上高一的森森为了学好物理,买了一个“非常弹”的球。虽然说是非常弹的球,其实也就是一般的弹力球而已。森森玩了一会儿弹力球后突然想到,假如他在地上用力弹球,球最远能弹到多远去呢?他不太会,你能帮他解决吗?当然为了刚学习物理的森森,我们对环境做一些简化:

  • 假设森森是一个质点,以森森为原点设立坐标轴,则森森位于(0, 0)点。
  • 小球质量为w/100 千克(kg),重力加速度为9.8米/秒平方(m/s2)。
  • 森森在地上用力弹球的过程可简化为球从(0, 0)点以某个森森选择的角度ang (0 < ang < pi/2) 向第一象限抛出,抛出时假设动能为1000 焦耳(J)。
  • 小球在空中仅受重力作用,球纵坐标为0时可视作落地,落地时损失p%动能并反弹。
  • 地面可视为刚体,忽略小球形状、空气阻力及摩擦阻力等。

森森为你准备的公式:

动能公式:E = m * v2 / 2
牛顿力学公式:F = m * a
重力:G = m * g
其中:
E - 动能,单位为“焦耳”
m - 质量,单位为“千克”
v - 速度,单位为“米/秒”
a - 加速度,单位为“米/秒平方”
g - 重力加速度

输入格式:

输入在一行中给出两个整数:1 <= w <= 1000 和 1 <= p <= 100,分别表示放大100倍的小球质量、以及损失动力的百分比p。

输出格式:

在一行输出最远的投掷距离,保留3位小数。

输入样例:
100 90
输出样例:
226.757

思路:实际上就是典型的物理题目,直接动能守恒推出公式即可

因为E=1/2mv^2,所以v^2=2E/m

当v分解为垂直方向的vsinθ和水平方向的vcosθ,所以水平方向的v为vsinθ,t为vcosθ/g,抛到最高点时通过的路程为s = vt = vsinθvcosθ/g,落下来同样相同的距离,s = 2vsinθvcosθ/g因为2sinθvcosθ=sin2θ,sin2θ的最大值为1,即2θ=90°,θ=45°的时候s取得最大值~

然后根据公式化简可得一次在空中飞行的最大距离为s=(2*E)/(m*g),计算E损失的能量,然后将每次飞行的距离s相加,知道E<1e-9,然后就可以得到答案了

#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    double x,m,p;
    scanf("%lf%lf",&m,&p);
    m=m/100;
    double E=1000;
    double s=0;
    while(E>1e-9)
    {
        x=(2*E/m)/9.8;
        s+=x;
        E*=(1-p/100);
    }
    printf("%.3lf\n",s);
    return 0;
}
此方法还用到了math函数,比第一种方法稍微复杂些,但也差不多。
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    double m,p,s,q;
    cin>>m>>q;
    m=m/100;
    s=0;p=1000;
    while(p>1e-9)
    {
        double v=sqrt(p/m);
        double t=2*sqrt(p/m)/9.8;
        double x=v*t;
        s=s+x;
        p=p*(1-q/100);
    }
    printf("%.3lf\n",s);
    return 0;
}


3.1基本图元光栅扫描演示系统 (1)设计目标 图形的绘制实质上是像素的操作,像素有三个参数,位置坐标x、y以及颜色c。本设计使用正方形模拟像素,保持屏幕的纵横比为4:3,将基本图元(直线、圆和椭圆)在像素级别上绘制出来。由于圆是椭圆的特例,即长轴和短轴长度相等的椭圆,可以使用键盘的约束来解决。本设计要求在像素级别演示直线的走样、反走样和颜色渐变;演示椭圆(含圆)的走样和反走样。详细功能要求如下: 使用静态切分视图,将屏幕切分为左右窗格。左窗格是控制窗格,右窗格为显示窗格。 保持右窗格的二维设备坐标系不变,原点位于客户区左上角,x轴水平向右为正,y轴铅直向下为正。 在右窗格内绘制40×30个正方形代表虚拟像素网格,使用橡皮筋技术动态演示基本图元的绘制过程。 在左窗格内借助快捷颜色按钮选择直线的起点和终点颜色,或双击“起点”或“终点”颜色按钮出系统颜色对话框,从中选择直线的起点和终点颜色。在右窗格选择直线段的起点像素和终点像素位置,分别绘制走样直线、反走样直线、颜色渐变直线。要求:在移动鼠标的过程中时,按下Shift键可绘制水平或垂直直线。 在左窗格选择椭圆(含圆)的线条颜色,在右窗格内选择两个像素作为椭圆(包含圆)的外接矩形的左上角点和右下角点,分别绘制走样椭圆(含圆)、反走样椭圆(包含圆)。要求:在移动鼠标的过程中,按下Shift键可以绘制圆。 在状态栏动态显示鼠标在右窗格内的虚拟像素坐标,虚拟像素的坐标取为虚拟像素网格的中心点坐标,需要从设备坐标系转换到虚拟像素坐标系,即右窗格网格左上角点的虚拟像素坐标为(0,0),网格右下角点的虚拟像素坐标为(39,29)。 (2)设计效果 单击左窗格的“直线”按钮后,在右窗格内使用鼠标绘制的走样直线,如图Ⅰ-1所示。 单击左窗格的“直线”按钮,同时选中“反走样”复选框后,在右窗格内使用鼠标绘制的反走样直线如图Ⅰ-2所示。 单击左窗格的“直线”按钮,同时为直线选择了起点和终点颜色后,在右窗格内使用鼠标绘制的颜色渐变直线如图Ⅰ-3所示。 单击左窗格的“直线”按钮,为直线选择了起点和终点颜色后,同时选中“反走样”复选框,在右窗格内使用鼠标绘制的颜色渐变反走样直线如图Ⅰ-4所示。 单击左窗格的“椭圆”按钮后,在右窗格内使用鼠标绘制的走样椭圆如图Ⅰ-5所示。 单击左窗格的“椭圆”按钮同时选中“反走样”复选框后,在右窗格内绘制的反走样椭圆如图Ⅰ-6所示。 单击左窗格的“椭圆”按钮后,在右窗格内拖动鼠标的同时按下Shift键绘制的走样圆如图Ⅰ-7所示。 单击左窗格的“椭圆”按钮同时选中“反走样”复选框后,在右窗格内拖动鼠标的同时按下Shift键绘制的反走样圆如图Ⅰ-8所示。 3.2递归动态体演示系统 (1)设计目标 在正八面体的基础上构建体。正八面体的顶点位于面上,正八面体的体心设为心。 将正八面体每个正三角形表面的三条边的中点连接形成四个小正三角形,并将三个中点拉伸到面上。对每个小正三角形进行同样的递归操作可以构造出体线框模型。 请使用不同深度的递归划分法分别绘制无光照线框,有光照线框、无光照表面和有光照表面。给定沿x,y,z坐标轴3个方向的位移量和绕x,y,z坐标轴的旋转角度,控制体在窗口客户区内运动。当体和客户区边界发生碰撞后,改变运动方向。请使用三维正交变换绘制递归动态体。 (2)设计效果 使用静态切分视图,将窗口切分为左右窗格。左窗格为继承于CForemView类的表单视图类CLeftPortion,右窗格为一般视图类CTestView。 右窗格的三维坐标系原点位于客户区中心,x轴水平向右为正,y轴铅直向上为正, z轴垂直于屏幕指向观察者。 左窗格放置代表“体控制”、“模型分类”、“光源开关”、“平移变换”和“旋转变换”4个组框控件。“体控制”组框提供“体半径”和“面级数”2个滑动条;“模型分类”组框提供“线框”和“表面”2个单选按钮;“光源开关”分类组框提供“关”和“开”2个单选按钮;“平移变换”组框提供“X方向”、“Y方向”和“Z方向”3个滑动条;“旋转变换”组框提供“绕X轴”、“绕Y轴”和“绕Z轴”3个滑动条。 体在右窗格内根据左窗格的设定值运动,并和客户区边界发生碰撞。 当面级数的值为8时,右窗格内的体退化为正八面体。当面级数的值为32时,在右窗格内的正八面体的每个等边三角形的三条边上取3个中点并用直线连接,形成4个小正三角形。将3个中点的模长扩展至体半径长度,得到递归体。当面级数增加时,对每个小正三角形面片继续进行同样的递归,最终生成递归体。 根据左窗格的参数值,分别绘制无光照和有光照消隐线框、无光照和有光照表面。其中无光照消隐线框采用走样直线绘制,颜色为白色;有光照消隐线框采用反走样颜色渐变直线绘制;光照表面使
最新发布
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值