自己动手写物理引擎(零)

给Qt装上物理引擎Box2D 前段时间在CuteQt上看到一篇Qt+Box2D的文章,又去QtLab看了下原文,感觉挺有意思的,就动手试了一下。Box2D的1.0版就之前的版本小小的改动了下API,那么下面,就让我简单的介绍下如何用Box2D在Qt上开发吧。在这里,你可以找到:Box2D 1.0版在Qt中的使用简介 阅读详情

前言

为什么要写物理引擎

其实在很久以前就用过别人的物理引擎了,可是这些引擎的功能不满足我的需求,比如说不支持流体的运动,以及实现把一个物体切割成两部分等,还可以制造燃烧,爆炸等效果,别人的物理引擎都没有。所以我决定自己先用python写一款物理引擎,后面再写成JavaScript来实现网页上的效果。

本文的编号是零,意思是这是写物理引擎前的准备工作。

物理引擎的结构

组成物理引擎的是窗口(Window),力(Force),物体(Object)和效果(Effect)。

窗口就是一个物理场,它记录了很多物理常量(如重力加速度等)

同时,它也是物体的载体,可以控制物体是否能跑到窗口外面去。

力可以使物体运动。会考虑重力、引力、浮力等。

物体分为三种:刚体(solid)、流体(liquid)、和关节(joint)

刚体是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。

刚体可以分为线段(segment)球体(其实就是一个圆,circle)和多边形(polygon)。

每个刚体都会考虑碰撞。

流体分为牛顿流体和非牛顿流体。

关节可以约束两个刚体,可以伸缩。

效果则包含劈裂、燃烧等

开始

新建文件

在同一个目录下新建physics.py和demo.py。physics.py使我们的物理引擎。demo.py则用来测试

代码

physics.py

import pygame
import threading
from pygame.locals import *
import sys
pygame.init()
# pygame.draw.circle(window, (0, 0, 255),[300,300], 170, 0)
# pygame.draw.polygon(window, (255,0,0), [[300,300],[100,400],[100,300]])
# pygame.draw.line(window, (0, 0, 0), [100, 300], [500, 300], 5)
class Window():
    def __init__(self,width,height,caption):
        self.width=width
        self.height=height
        self.caption=caption
        self.surface=pygame.display.set_mode((self.width,self.height))
        self.bodies=[]
    def run(self):
        pygame.display.set_caption(self.caption)
        flag=True
        while flag:
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    flag=False
class Object():
    def __init__(self):
        pass
class Solid(Object):
    def __init__(self):
        pass
class Liquid(Object):
    def __init__(self):
        pass
class Joint(Object):
    def __init__(self):
        pass

demo.py

import physics
window1=physics.Window(1000,600,'123')
window1.run()
物理引擎scratch(简单).sb3 只有重力模块,的确很简单,但能直接下载的地方不多。 立即下载

相关推荐

Ape物理引擎-白鹭(egret)库

可用的超轻量的APE物理引擎库。min文件只有38k,APE中总共才12个类,用起来相当的方便。实现了大部分物理模拟(弹性、摩擦力、牵引力等),对于初学物理引擎的同学可以从APE学起。但相比较另一个物理引擎Box2D来说,APE还缺乏例如多边形碰撞等等。

零基础制作物理引擎

上篇其实有重力,但是重力是经过重心,可以把物体看出质点,问题就变得简单,经过重心只产生线速度,不产生角速度。这篇文章的力量其实是指:力(Force)和冲量(Impulse),不一定过重心。边写引擎过程中,边补习牛顿经典力学体系,但是依然记得大学时候物理老师反复强调:“牛顿错了,牛顿错了,牛顿那一套只是狭义相对论在低速下的近似表现”。所以顺带又科普了一下爱因斯坦那一套东西,后来发现,写个物理引擎用牛顿足矣。= =!

qq_43505188的博客 948

物联网技术-第2章-物联网技术架构

• 物联网具有很强的异构性• 为实现异构设备之间的互联、互通与互操作,物联网需要以一个开放的分层的可扩展的为框架。

m0_73804764的博客 2976

如何用Scratch做个简单的物理引擎

3.创建一个变量“重量” 用于计算物体初始重量。(假如物体重量为5并环境处于真空状态)4.利用测算反弹的理论公式(V高+V低)X0.382X重量 计算反弹高度。用Scratch做物理引擎需要以下几个步骤。1.首先我们先用Scratch新建个角色。2.先写出自由下落的物理引擎。5.导入自由下落引擎的翻转。

u013397613的博客 2693

用C#和MQTTnet在WinForm里做个简易物联网监控后台(附完整源码)

本文详细介绍了如何使用C#和MQTTnet库在WinForm中构建一个简易物联网监控后台。通过实战案例,包括环境配置、MQTT服务端实现、客户端监控功能及高级优化技巧,帮助开发者快速搭建高效的物联网监控系统,适用于工业自动化和智能家居场景。

weixin_29540599的博客 392

Avalonia 项目结构说明

Avalonia UI

bjxingch的博客 1271

从零手写《超级玛丽》——前端 Canvas 游戏开发与物理引擎

本文详细介绍了如何使用纯前端技术(HTML5 Canvas + TypeScript + Vite)实现《超级玛丽》克隆版。文章从游戏设计哲学出发,系统讲解了核心开发技术,包括角色状态机、物理模拟、碰撞检测、瓦片地图系统等关键模块的实现。通过模块化架构设计,项目实现了逻辑、渲染、输入的解耦,并针对性能优化提出具体方案。文章还涵盖了前端工程化实践,如PWA支持、本地存储等。最终成果可在多平台流畅运行,完整代码已开源。该教程为初中级前端开发者提供了游戏开发的系统性学习路径,同时深入剖析了经典游戏背后的设计思想。

小二丶的博客 1282

Rockchip rv1126平台在gstreamer1中添加OpenCv实现视频流负片的效果

rv1126 gstreamer opencv negetive effect

Aisy_D的专栏 1463

手写js物理引擎

手写js物理引擎

墨羽晨的博客 1273

YOLO26剪枝 lamp剪枝测试精度仅掉0.7个点,速度提高11.8fps!

针对没有如何去选择剪枝的内容LAMP是层自适应幅度调整剪枝,无需任何参数,通过算法内部自己计算每个层的重要程度进行剪枝。基于权重重要程度和该层权重大小关系,权重越大表明该层越重要的思想进行优化。这个跟我前面说的非结构化全局剪枝是一个解法(MP),也就是lamp是在我前面那个非结构化剪枝的基础上进行优化的。但是这个逐层进行非结构剪枝目前还没有一个清晰的概念,确定每个层要剪枝多少。LAMP得分是一个平方权重大小,由层中所有“幸存权重”的总和归一化。

m0_64661770的博客 673

6、基因组数据可视化与甲基化分析:从基础操作到深入洞察

本文详细介绍了基因组数据可视化和全基因组DNA甲基化分析的方法和技术,包括基因组查看器(IGV)的基本操作、单核苷酸变异的可视化、DNA甲基化与CpG岛的关联分析、统计建模与显著甲基化区域识别,以及不同细胞系之间的甲基化模式差异分析。通过具体案例展示了如何利用MATLAB进行数据分析和可视化,为基因组研究、疾病机制探索及个性化医疗提供了技术支撑和实践参考。

qsc901234的博客 295

零基础制作物理引擎--创造世界

写在前面 2011年在写了个物理引擎,期间重新啃起了物理课本,一晃就是5年, 当年自己写的物理引擎的代码又阅读一遍,受益匪浅,加上最近制作坦克争霸使用Box2d的思考,对物理引擎管线又有了新的认识和体会。 人除了造人,还可以是造世界,这两种时候人能够扮演上帝的角色。有人会说:“几个小球撞来撞球算哪门子世界?”引用《黑客帝国》里 男主角的话:“哪一个才是真实的世界?”在小球的眼里,它的世界就是真实的...

weixin_33737774的博客 344

安装并新建windows下wxwroks7.0 bootrom工程

安装licence,将zwrsLicense-vx7-perm.lic粘贴到安装目录C盘WindRiver/license下。现在双击Workbench 4,新建vxworks7.0工程,会出现下面的情况,因为没有licence。编译完成binaries下生成wxwroks x86格式,可以修改bootrom硬件信息的配置了。单击x86_wxwroks工程右键,build project编译工程。双击桌面Workbench 4打开,新建windows下工程。新建完成,选择finish。

wangjie36的博客 1922

自己动手写2D物理引擎-初级篇(1)

第一章 框架设计 总体的类如下图所表示。 Shape作为形状基类。存储了与形状有关的物理量 class Shape { public: float I = 0.0f, invI = 0.0f;//转动惯量和逆 }; Rectangle和Circle派生于Shape,存储了实际的形状信息。 class Rectangle :public Shape { public: //存储矩形的长宽 agl::vec2f r; }; class Circle :public Shape { public:

ARTELE的博客 3337

大数据领域数据产品的团队激励与绩效管理

在大数据领域,数据产品的成功离不开高效协作的团队。团队激励与绩效管理的目的在于激发团队成员的工作热情和创造力,提高工作效率和质量,确保数据产品能够按时、高质量地交付。本文章的范围涵盖了大数据领域数据产品团队激励与绩效管理的各个方面,包括激励机制的设计、绩效评估的方法、团队沟通与协作等。本文将按照以下结构进行阐述:首先介绍核心概念与联系,明确相关概念的定义和相互关系;接着讲解核心算法原理和具体操作步骤,为团队激励与绩效管理提供理论支持和实践指导;然后分析数学模型和公式,帮助读者深入理解绩效评估的原理;

Java大师兄的博客 1018

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

自己动手写二维物理引擎(一)

这一篇,继续之前的想法,开始写物理引擎的代码。由于pygame不能同时打开多个窗口,我决定换Qt来显示窗口。

Admibrill的博客 768

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

自己动手写2D物理引擎-初级篇(0)

序言 本系列文章主要讲的的是2D物理引擎设计,从简单开始,引擎中主要完成简单形状的碰撞计算,物理冲量计算,抖动处理,运动计算。主要受到Box2D-Lite启发,亲自动手学习一下。设计过程从框架到细节,涉及到数学原理我会详细讨论并说明。同时,这里只会介绍用到的技术,不用的技术一般不提及或讲解。 章节 第一章 框架设计 第二章 碰撞检测 第三章 冲量处理 第四章 运动处理 ...

ARTELE的博客 1717

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

研究一下物理引擎,做了个游戏,文末有感

原文首发于微信公众号:MinProgram 原作者:花叔 Cocos 已获得转载授权 前阵子过春节,在家看小孩没法出去玩,于是就码起来了,心血来潮想做个基于物理引擎的小游戏,于是愉快地打开了 Cocos Creator。 然后到这个周末,一个算是较为完整的游戏 demo 上线了。 负责的工作 一年多前,我开始学习小游戏开发,并尝试按全栈的方式去独立开发小游戏。由于做小游戏都抱着学习的心态,...

Cocos的博客 1468

build-your-own-x:30 多项技术从零实现完整动手清单

会用框架,却被问到"请求到服务端后到底发生了什么"时答不上来,这个卡点就是 build-your-own-x 想解决的:一个编程学习资源的开源项目合集,带你把熟悉的技术从零实现一遍。 ## 先看清定位:这是个什么从零实现合集 它是"从零实现"类指南的合集:每条都是一个逐步教程,让你亲手把一项技术重写出来。不是视频教程,不看你敲;不是教科书,不空讲原理,它要求你把东西真正跑通。 可以把它当成一

gitblog_00187的博客 956

java做物理引擎_不使用物理引擎,自己动手做真实物理的模拟投篮游戏

最近打算做一个2D投篮游戏,由于对于BOX2D等物理引擎并不熟悉,加之一开始低估了游戏所需要的碰撞检测复杂度,认为仅仅涉及4面墙,篮球,篮板,篮筐,篮网的碰撞检测并不复杂。因此决定自己实现所需要的碰撞检测。结果实际开始做时磕磕碰碰遇到了许多问题。1、如何实现像素级碰撞检测。as3原生的hitTestObject只能检测矩形,对于圆形等其他形状就不适用了;打算用hitTestPoint来检测篮球与篮...

weixin_30334225的博客 977

不使用物理引擎,自己动手做真实物理的模拟投篮游戏

最近打算做一个2D投篮游戏,由于对于BOX2D等物理引擎并不熟悉,加之一开始低估了游戏所需要的碰撞检测复杂度,认为仅仅涉及4面墙,篮球,篮板,篮筐,篮网的碰撞检测并不复杂。因此决定自己实现所需要的碰撞检测。结果实际开始做时磕磕碰碰遇到了许多问题。 1、如何实现像素级碰撞检测。 as3原生的hitTestObject只能检测矩形,对于圆形等其他形状就不适用了;打算用hitTe...

weixin_30577801的博客 416

Unity 2D物理引擎实战:从零实现AABB碰撞系统与空间划分

碰撞检测是游戏开发中的核心技术,它决定了游戏对象之间的交互逻辑与物理反馈。其基本原理是通过几何计算判断物体是否相交,而AABB(轴对齐包围盒)因其计算高效、实现简单,成为2D游戏中最常用的碰撞形状之一。掌握AABB碰撞系统不仅能提升对物理模拟底层原理的理解,更能为特定游戏风格(如像素风、休闲游戏)提供高度可控、性能优化的解决方案,实现超越通用物理引擎的定制化效果。本文基于Unity引擎,深入探讨了AABB碰撞检测的核心算法、高效的空间划分策略(如空间哈希)以及碰撞响应处理,旨在帮助开发者构建轻量、可控的2D

weixin_30675247的博客 359

从零实现C++轻量级物理引擎:碰撞检测与响应核心算法详解

碰撞检测与响应是物理引擎的核心技术,它决定了虚拟世界中物体交互的真实感与稳定性。其基本原理是通过几何计算判断物体间是否发生接触,并依据物理定律模拟碰撞后的运动变化。在游戏开发、机器人仿真和虚拟现实等领域,高效稳定的碰撞处理是保障体验流畅的关键。分离轴定理(SAT)和GJK算法是实现精确碰撞检测的经典方法,前者通过投影区间判断凸多边形相交,后者则通过迭代逼近解决更复杂的凸体碰撞问题。连续碰撞检测(CCD)技术进一步解决了高速运动下的穿透难题。掌握这些底层算法,不仅能优化现有引擎性能,更能为开发特定风格的游戏手

weixin_33417488的博客 323

U3d之物理引擎(上)

如果对你有帮助,请做一棵蒲公英,让知识随风飘荡留在人的心里。 1. 人机交互 为什么说物理引擎要说起人机交互呢?假如我们在玩游戏的时候,要控制的可能是人物,飞机,汽车等游戏对象,我们需要跟电脑进行交互,告诉电脑我们想要进行什么样的骚操作,这个时候电脑才会去按我们的想法去操作,然后才会触发一些现象,比如说物理现象。 键盘: Input类就是u3d引擎提供给我们的人与系统操作的接

放羊的白羊座少年的博客小庙 2395

C++在游戏中的物理引擎

这可不是吹牛,我在一个小项目里试过,用C++实现的简单重力系统,帧率能稳定在60fps以上,而换成其他语言,可能就得掉帧了。再说了,C++的面向对象特性让代码结构更清晰,你可以把物理实体封装成类,比如一个“RigidBody”类,里面包含质量、速度、位置这些属性,再通过继承和多态来扩展功能,比如加上摩擦力或弹力效果。想象一下,游戏里两个物体碰撞时,需要检测它们是否相交,并计算反弹的力和方向。如果你刚入门,建议从简单的2D物理开始,慢慢扩展到3D,多动手写代码,调试优化,你会发现自己也能玩转这个神奇的世界。

2509_93946088的博客 492
上一篇: Hexo博客0氪建站记录(下)
下一篇: 自己动手写二维物理引擎(一)
Admi Brill
博客等级 码龄4年 91粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值