C语言SDL库简单界面开发(Linux)-天体运动

2023-10-11 18:59

本文主要是介绍C语言SDL库简单界面开发(Linux)-天体运动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

半路被拉过来给人调程序,通过多线程,模拟行星围绕太阳公转,时间仓促,最后简单实使用了万有引力公式,实现了一个天体围绕恒星旋转的界面。

功能说明

要求使用C 语言实现一个模拟行星围绕太阳公转的界面,进阶要求是通过多线程,加快程序在运行过程中计算所耗费的时间。

编译执行

编译:gcc *.c -o nbodygui -fsanitize=address -g -lSDL2 -lSDL2_gfx -lm -lpthread
执行:
1)./nbodygui 800 600 2000 0.1 -f planets.csv 0.0025 4

设置窗口为800 X 600,循环执行2000次,时间变化速率0.1,-f是代表从下一个参数指定的文件planets.csv中读取数据,窗口缩放比例0.0025(忽略),线程数目为4。
2)./nbodygui 800 600 2000 1 -b 10 0.0025 4
设置窗口为800 X 600,循环执行2000次,时间变化速率0.1,-b是代表自动产生数据,下一个参数表示数据的个数,窗口缩放比例0.0025(忽略),线程数目为4。

常见错误

fatal error: SDL/SDL.h: No such file or directory
原因是SDL库没有安装,根据你使用的是SDL1还是SDL2来进行不同的安装,如下所示:
SDL2:sudo apt-get install libsdl2-dev
SDL1:sudo apt-get install libsdl1.2-dev
fatal error: SDL2/SDL2_gfxPrimitives.h: No such file or directory
同样是没有库文件,下载更新即可:
SDL2:sudo install libsdl2-gfx-dev

运行效果

在这里插入图片描述

工程链接

https://github.com/Wqhong/SDL2_mutithread

这篇关于C语言SDL库简单界面开发(Linux)-天体运动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/190166

相关文章

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.