该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

我把源代码分享出来,欢迎有兴趣的朋友下载测试,修改优化。

/***********************************************************************

此程序是考虑空气阻力条件下弹弓抛射8mm钢珠飞行轨迹的C++程序。

用到的公式:空气阻力的公式:F=(1/2)CρSV^2

计算.式中:C为空气阻力系数;ρ为空气密度;S物体迎风面积;V为物体与空气的相对

运动速度.但是C是空气阻力系数。

一些物体的风阻:垂直平面体风阻系数大约1.0 球体风阻系数大约0.5 一般轿车

风阻系数0.28-0.4 好些的跑车在0.25 赛车可以达到0.15 飞禽在0.1-0.2 飞机达到0.08

目前雨滴的风阻系数最小 在0.05左右。

作者:哈笛 时间:2019年10月19日

************************************************************************/

#include

#include

#include "SDL2/SDL.h"

#include

#include #define G 9.8

#define Pi 3.14159265359SDL_Window *win=NULL;

SDL_Renderer *render=NULL;

int main()

{

int i,j,k,k1; //for循环用的变量

float s,v,vt,vx,vy,theta_jd,theta_hd,F,Fy,C,P,S,Sy,Sy0,a,ay,m,T,T1,T2,tb,SS,ss,wc;

//v是钢珠的初速度,vt是钢珠水平方向的即时速度,vx,vy是钢珠水平、垂直方向的即时速度,theta_jd是射出角的角度表示,theta_jd是射出角的弧度表示,F是水平方向的空气阻力,

//Fy是垂直方向的空气阻力,C是钢珠的空气阻力系数,P是空气密度,S是小球的迎风面积,Sy是小球垂直方向的位移,Sy0是钢珠在单位时间tb内的垂直方向的位移,

//a是钢珠水平方向的加速度,ay是钢珠在垂直方向的加速度,m是钢珠的质量,T是钢珠总的飞行时间,T1是钢珠上升时间,T2是钢珠的下降时间,tb是单位时间,

//SS是钢珠水平方向的位移,ss是钢珠在单位时间tb内水平方向的位移,wc是理想瞄准位置与弹着点的偏差距离。

float x[1000],y[1000]; //用来标记单位时间钢珠水平、垂直方向位置的数组

FILE *fp; /*文件指针*/

int len; /*行字符个数*/

v=90; //钢珠射出的初速度

C=0.5; //钢珠的风阻系数

P=1.2; //空气密度

S=Pi*0.008*0.008; //钢珠的迎风面积

m=5.29*0.001; //钢珠的质量

/*for(theta_jd=1;theta_jd<=45;theta_jd++)

{

theta_hd=(Pi*theta_jd)/180;

s=(v*v*sin(2*theta_hd))/G;

printf("theta=%d s=%f ",theta_jd,s);

if(theta_jd%5==0) printf("\n");

}*/

theta_jd=37; //钢珠的射出角度

theta_hd=(Pi*theta_jd)/180; //射出角度的弧度制表示

printf("\n");

vy=v*sin(theta_hd); //钢珠在垂直方向的初速度

Fy=C*P*S*vy*vy/2; //钢珠在垂直方向的空气阻力

ay=-(Fy/m+G); //钢珠在垂直方向的加速度(上升阶段)

tb=0.01; //单位时间,0.01秒,用于将钢珠的飞行等分为若干小段,在每小段内钢珠为匀加速运动,该参数可以控制精度

T1=0; //上升阶段的飞行时间

T2=0; //下降阶段的飞行时间

Sy=0; //垂直方向的位移

i=0; //用于计算在上升阶段经历了少个单位时间,也用于垂直方向的坐标计算

while(vy>0) //此循环用于处理垂直向上运动,每个单位时间计算各项参数,结束条件为垂直方向速度小于等于0

{

vy=vy+ay*tb; //利用加速度、速度公式计算单位时间垂直方向的即时速度

Sy0=vy*tb+ay*tb*tb/2; //利用加速度、速度、位移公式计算单位时间垂直方向的位移

Sy+=Sy0; //对垂直方向的位移进行累加

Fy=C*P*S*vy*vy/2; //重新计算垂直方向的即时空气阻力

ay=-(Fy/m+G); //重新计算垂直方向的即时加速度

T1+=tb; //累加垂直方向的位移

y[i]=Sy; //将垂直方向的坐标存入数组y[i],数组的下标是时间单位,内容是单位时间垂直方向的位移

i++; //对数组下标进行累加,同时对用掉的单位时间进行计数

}

vy=0; //垂直方向的速度归零,准备处理垂直向下运动

Fy=C*P*S*vy*vy/2; //垂直方向的空气阻力,初值为零

ay=-Fy/m+G; //垂直方向的加速度

while(Sy>0) //此循环用于处理垂直向下运动,每个单位时间计算各项参数,结束条件为垂直向下的位移等于垂直向上的位移

{

vy=vy+ay*tb; //利用加速度、速度公式计算单位时间垂直方向的即时速度

Sy0=vy*tb+ay*tb*tb/2; //利用加速度、速度、位移公式计算单位时间垂直方向的位移

Sy-=Sy0; //对垂直方向的位置坐标进行计算

y[i]=Sy;//将垂直方向的坐标存入数组y[i],数组的下标是时间单位,内容是单位时间垂直方向的位移

i++; //对数组下标进行累加,同时对用掉的单位时间进行计数,最终值为数组元素的最大个数

Fy=C*P*S*vy*vy/2; //重新计算垂直方向的即时空气阻力

ay=-Fy/m+G; //重新计算垂直方向的即时加速度

T2+=tb; //累计垂直向下运动的时间

}

//T=2*v*sin(theta_hd)/G;

T=T1+T2; //计算运动时间

printf("T=%f ",T); //输出运动时间

vx=v*cos(theta_hd); //计算水平方向的初速度

F=C*P*S*vx*vx/2; //计算水平方向的空气阻力

a=-F/m; //计算水平方向的加速度

vt=v*cos(theta_hd);//计算水平方向的即时速度

/*t=T/1000;

SS=0;

for(i=1;i<=1000;i++)

{

ss=vt*t+a*t*t/2;

vt=vt+a*t;

if(vt<=0) break;

F=C*P*S*vt*vt/2;

a=-F/m;

SS+=ss;

}*/

SS=0; //SS为水平方向的位移量

j=0; //j是水平坐标值的下标

while(T>=0) //此循环用于处理水平方向的运动,每个单位时间动态计算各项参数的值,结束条件为水平运动的事件与垂直方向运动的总时间相等

{

ss=vt*tb+a*tb*tb/2; //利用速度、时间、加速度动态计算水平方向的位移

vt=vt+a*tb; //动态计算每个事件段结束时水平方向的即时速度

if(vt<=0) break; //如果出现水平速度为负,跳出循环

F=C*P*S*vt*vt/2; //动态计算每个时间间隔结束后水平方向的空气阻力

a=-F/m; //动态计算每个时间间隔结束后水平方向的加速度

T-=tb; //没运行一次,总运行时间减去时间间隔,总运行时间减至零时,结束循环

SS+=ss; //水平位移累计

x[j]=SS; //计算每个事件间隔的水平位置,存入数组,数组下标为事件单位,内容为水平坐标

j++; //数组下标加一

}

wc=SS*tan(theta_hd); //计算需向上瞄准的距离

printf("SS=%f wc=%f\n",SS,wc); //输出水平射程,向上瞄准的距离

if((fp = fopen("/storage/emulated/0/myprogram/text.txt","w")) == NULL)

{

perror("fail to write!");

exit (1) ;

}

for(k=0;k

{

fprintf(fp,"x[%d]=%f,y[%d]=%f \n",k,x[k],k,y[k]);

}

fclose(fp);

SDL_Rect rect;

SDL_Init(SDL_INIT_EVERYTHING);

win=SDL_CreateWindow("SDL2 DRAW",0,0,1080,1920,1);

render=SDL_CreateRenderer(win,-1,NULL);

SDL_RenderClear(render);

SDL_SetRenderDrawColor(render,0,255,0,255);

for(k=0;k

{

//SDL_RenderDrawPoint(render,10*y[k],10*x[k]); //利用SDL中的绘点函数绘制曲线

//绘点函数绘出的曲线太细,为了加粗曲线,以点为中心绘制矩形。

rect = {10*y[k]+3,10*x[k]-3,7,7}; //定义矩形的顶点坐标,矩形的长、宽

SDL_RenderDrawRect(render, &rect); //绘制矩形

SDL_RenderFillRect(render, &rect); //填充矩形

}

SDL_RenderPresent(render);

SDL_Delay(50000);

return 0;

}

小球斜抛公式用C语言怎么写,利用C4droid绘制小球斜抛运动轨迹(考虑空气阻力)...相关推荐

  1. C语言编码小球斜抛运动,利用C4droid绘制小球斜抛运动轨迹(考虑空气阻力)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我把源代码分享出来,欢迎有兴趣的朋友下载测试,修改优化. /*********************************************** ...

  2. 小球移动轨迹渐变 android,利用C4droid绘制小球斜抛运动轨迹(考虑空气阻力)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我把源代码分享出来,欢迎有兴趣的朋友下载测试,修改优化. /*********************************************** ...

  3. android设计一个多线程和画图的程序小球,Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例...

    本文实例讲述了Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能的方法.分享给大家供大家参考,具体如下: 1.布局界面 xmlns:tools="http://sc ...

  4. R语言中如何利用ggplot2绘制qq图和boxplot图

    文章目录 绘制qq图 函数介绍 geom_qq() 参数介绍 注意事项 例子 Using to explore the distribution of a variable 绘制boxplot 函数介 ...

  5. matlab m语言,我要编写matlab一个公式的m语言,请问错在哪里?,M语言的MATLAB的M语言...

    导航:网站首页 > 我要编写matlab一个公式的m语言,请问错在哪里?,M语言的MATLAB的M语言 我要编写matlab一个公式的m语言,请问错在哪里?,M语言的MATLAB的M语言 匿名网 ...

  6. R语言表示文件路径应该如何使用斜杠符号?

    R语言表示文件路径应该如何使用斜杠符号? 目录 R语言表示文件路径应该如何使用斜杠符号? R语言是解决什么问题的? R语言表示文件路径应该如何使用斜杠符号? R语言是解决什么问题的? R 是一个有着统 ...

  7. C语言算三角形外心坐标,三角形外心坐标公式(含C语言代码).pdf

    三角形外心坐标公式(含C语言代码).pdf (1页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 =2 − + − − −2 − + − ...

  8. 【C语言练习】1.1弹跳小球

    [C语言练习]1.1弹跳小球 声明: 此片作为博主学习记录 #程序代码 实现限定区域内小球弹跳的效果 #include<stdio.h> #include<stdlib.h> ...

  9. 12点的idft c语言,IDFT的公式及C语言实现.doc

    IDFT的公式及C语言实现.doc 百度空间?|?百度首页? ??????????????? sszhou's blog track, true view, thinking ? 主页博客相册|个人档 ...

  10. 【C语言】简易版_反弹小球游戏

    目录 前言 正文 一.显示静止的小球 二.小球下落 三.上下弹跳的小球 四.斜着弹跳的小球 五.控制小球弹跳的速度 六.完整代码 写在最后 前言 我们利用printf 函数实现一个在屏幕上弹跳的小球, ...

最新文章

  1. 函数调用栈的获取原理分析【转】
  2. Linux(CentOS)中常用软件安装,使用及异常——Zookeeper, Kafka
  3. C++派生类含有成员对象构造函数析构函数顺序
  4. view类不响应自定义消息_安卓平台如何给控件添加自定义操作?
  5. 关于python语言的编程模式、哪个说法正确_测验1: Python基本语法元素 (第1周) 单选题+程序题...
  6. [原创]C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件
  7. 【重点】LeetCode 146. LRU Cache
  8. ORACLE数据库测试题(一)
  9. JVM对象分配和GC分布【JVM】
  10. 雅虎邮箱 找回密码_如何恢复被遗忘的Yahoo! 密码
  11. 服务器iso文件如何打开方式,iso文件怎么打开(iso文件用什么打开)
  12. Visual Studio 2019 企业版 16.9.x 创建离线包并安装教程(带百度网盘下载地址和序列号)
  13. besiege机器人_《围攻》双脚机器人制作图文教程 双脚机器人怎么制作
  14. 音频左右声道数据合并到一个声道
  15. 高温定型窗帘值得我们选择吗?-江南爱窗帘十大品牌
  16. Photoshop几何3D立体头像制作教程
  17. javaWeb的分页
  18. 2010高分传记剧情《国王的演讲》DVD中英双字1024高清
  19. mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法
  20. Mysql聚簇索引和费聚簇索引的区别

热门文章

  1. Android中EditText去掉下划线的方法
  2. 区块链 之 以太坊的那些坑
  3. Sqlite字段长度填坑
  4. 二手房数据分析预测系统
  5. Google I/O 2014之Android面面观
  6. 优雅的避免字体侵权——微软雅黑并不免费
  7. win7开启ftp被动模式_什么是FTP功能?Win7旗舰版下如何开启FTP功能?
  8. com.thoughtworks.xstream.security.ForbiddenClassException com.thoughtworks.xstream 1.4.18
  9. JS数值类型与字符串类型的内置方法
  10. Redis -- 羊哥CodeSheep20题(转发)