当前位置: 首页 > news >正文

Fast Simulation of Mass-Spring Systems in Rust 论文阅读

参考资料:

文章目录

  • 概述
  • 流程概述:
  • 1.前置知识
      • 1.1 运动方程(牛顿第二定律)
      • 1.2 二阶导数的离散化
      • 1.3 代入运动方程
      • 1.4 物理意义
  • 2. 将隐式积分问题转化为一个优化问题
    • 2.1 要解的是隐式积分问题是:
    • 2.2 引入辅助变量d
    • 2.3 Block Coordinate Descent(块坐标下降法)
      • Global Step部分

概述

这篇论文通过引入弹簧方向的辅助变量,并采用块坐标下降法解决了传统隐式欧拉法中速度慢的问题,成功实现了弹簧质点系统的快速仿真。该方法特别适用于实时应用,并且在低迭代次数下也能得到较好的视觉效果。

流程概述:

1.前置知识

1.1 运动方程(牛顿第二定律)

在物理仿真中,系统的运动通常由二阶微分方程描述,例如: M d 2 q d t 2 = f ( q ) M \frac{d^2q}{dt^2} = f(q) Mdt2d2q=f(q)
其中:

  • ( M ) 是质量矩阵,表示系统中各质点的质量。
  • ( q(t) ) 是位置向量,表示质点的位置。
  • ( f(q) ) 是作用在质点上的力,通常是位移 ( q ) 的函数。

1.2 二阶导数的离散化

使用中心差分法,二阶导数 ( d 2 q d t 2 \frac{d^2q}{dt^2} dt2d2q ) 的离散形式为:
d 2 q d t 2 ≈ q n + 1 − 2 q n + q n − 1 h 2 \frac{d^2q}{dt^2} \approx \frac{q_{n+1} - 2q_n + q_{n-1}}{h^2} dt2d2qh2qn+12qn+qn1
其中:

  • ( q_n ) 是时间 ( t_n ) 时的位置。
  • ( q_{n+1} ) 是时间 ( t_{n+1} = t_n + h ) 时的位置。
  • ( q_{n-1} ) 是时间 ( t_{n-1} = t_n - h ) 时的位置。
  • ( h ) 是时间步长

1.3 代入运动方程

将二阶导数的离散化形式代入运动方程 ( M d 2 q d t 2 = f ( q ) M \frac{d^2q}{dt^2} = f(q) Mdt2d2q=f(q) ):
M q n + 1 − 2 q n + q n − 1 h 2 = f ( q n + 1 ) M \frac{q_{n+1} - 2q_n + q_{n-1}}{h^2} = f(q_{n+1}) Mh2qn+12qn+qn1=f(qn+1)
最后我们得到隐式欧拉法的公式:
M ( q n + 1 − 2 q n + q n − 1 ) = h 2 f ( q n + 1 ) M(q_{n+1} - 2q_n + q_{n-1}) = h^2 f(q_{n+1}) M(qn+12qn+qn1)=h2f(qn+1)
其中,( q n + 1 q_{n+1} qn+1 ) 是需要通过求解获得的未知位置,( f ( q n + 1 ) f(q_{n+1}) f(qn+1) ) 依赖于 ( q n + 1 q_{n+1} qn+1 ),因此这是一个隐式公式

1.4 物理意义

在这里插入图片描述

2. 将隐式积分问题转化为一个优化问题

2.1 要解的是隐式积分问题是:

M q n + 1 − 2 q n + q n − 1 h 2 = f ( q n + 1 ) M \frac{q_{n+1} - 2q_n + q_{n-1}}{h^2} = f(q_{n+1}) Mh2qn+12qn+qn1=f(qn+1)
其中:
n是时间迭代步
q是所有粒子的位置向量
M是粒子质量对角矩阵
h是时间步长
f是整个系统的保守力
q n + 1 q_{n+1} qn+1是未知状态量,设为x。 q n q_{n} qn q n − 1 q_{n-1} qn1是已知量,设为 y = 2 q n − q n − 1 y=2q_{n}-q_{n-1} y=2qnqn1
所以得到式子 M ( x − y ) = h 2 f ( x ) M(x-y)=h^2f(x) M(xy)=h2f(x)
求解这个方程,等效于求解下面这个方程的极小值:
(令g(x)求导为0得到上式)
g ( x ) = 1 2 ( x − y ) T M ( x − y ) + h 2 E ( x ) g(x) = \frac{1}{2}(x - y)^T M (x - y) + h^2 E(x) g(x)=21(xy)TM(xy)+h2E(x)

其中,( E ) 为系统的势能(因为 ( ∇ E = − f \nabla E = -f E=f ),因此 ( ∇ g = 0 \nabla g = 0 g=0 ) 等效于公式 (7))。

按照胡克定律,弹簧的弹性势能为:

E = 1 2 k ( ∥ p 1 − p 2 ∥ − r ) 2 E = \frac{1}{2} k ( \|p_1 - p_2\| - r )^2 E=21k(p1p2r)2

其中:

  • ( p 1 , p 2 p_1, p_2 p1,p2 ) 为两个粒子的位置,
  • ( r ) 为弹簧的静止长度(rest length)。

但如果直接采用这个形式,上面的 ( g(x) ) 极值问题就不太好解。为了将上式变形为一个方便求解的形式,作者引入了一个辅助变量 ( d ∈ R 3 d \in \mathbb{R}^3 dR3 )。

2.2 引入辅助变量d

公式如下:
假设d是一个未知的三位向量,那么:
( ∥ p 1 − p 2 ∥ − r ) 2 = min ⁡ ∥ d ∥ = r ∥ p 1 − p 2 − d ∥ 2 (\|p_1 - p_2\| - r)^2 = \min_{\|d\|=r} \|p_1 - p_2 - d\|^2 (p1p2r)2=d=rminp1p2d2

1. 左边公式的物理意义:

左边的公式 ( ( ∥ p 1 − p 2 ∥ − r ) 2 (\|p_1 - p_2\| - r)^2 (p1p2r)2 ) 是弹簧势能的表示形式,依据胡克定律,它表示弹簧当前长度 ( |p_1 - p_2| ) 与静止长度 ( r ) 之间的差的平方。这里 ( p 1 p_1 p1 ) 和 ( p 2 p_2 p2 ) 是弹簧两端质点的位置

2. 右边公式的几何解释:

右边的公式引入了一个辅助向量 ( d ),并对其施加约束 ( |d| = r )。这个向量表示固定长度为 ( r ) 的向量,但方向可以自由变化。优化问题为:
min ⁡ ∥ d ∥ = r ∥ p 1 − p 2 − d ∥ 2 \min_{\|d\|=r} \|p_1 - p_2 - d\|^2 d=rminp1p2d2
这个问题的意思是寻找一个向量 ( d ),使得 ( p 1 − p 2 p_1 - p_2 p1p2 ) 与 ( d ) 的差最小,即让 ( ∥ p 1 − p 2 − d ∥ \|p_1 - p_2 - d\| p1p2d ) 最小化

显然当 d = r p 1 − p 2 ∥ p 1 − p 2 ∥ 时取极小值 显然当d = r \frac{p_1 - p_2}{\|p_1 - p_2\|}时取极小值 显然当d=rp1p2p1p2时取极小值

重新定义弹簧的弹性势能E(x,d)

在这里插入图片描述

矩阵L和J的推导

在这里插入图片描述

第一行的式子为什么可以等于L和J,证明如下:
忽略 d i T d i d^T_{i}d_{i} diTdi是关于 d 的平方项,但这项对 x 的优化没有直接影响,因此我们暂时忽略它,只关注 x 和 d 之间的关系

在这里插入图片描述
S i T S_i^T SiT是一个选择矩阵,是一个单位向量(标准基),用于选择第 𝑖个弹簧的位移变量 d i d_{i} di

在这里, d = S i T d d = S_i^T d d=SiTd 可以理解为,向量 d d d 中的每个分量 d i d_i di 对应一个特定的弹簧的偏移量。通过 S i T d S_i^T d SiTd,我们提取了 d d d 中与第 i i i 个弹簧相关的那部分位移。

换句话说, S i T S_i^T SiT 确保我们从总的 d d d 向量中只选取第 i i i 个元素(因为 S i T S_i^T SiT 是一个标准基,其他位置上的元素都会被置为 0)。

因此,对于每个弹簧 i i i,我们有:

d i = S i T d d_i = S_i^T d di=SiTd

这表示 d i d_i di 是通过选择矩阵 S i T S_i^T SiT d d d 中提取出来的。
在这里插入图片描述

外力为什么放在 X T () X^T() XT()里面

外力 𝑓 e x t 𝑓_{ext} fext被视作对系统的额外作用力,所以在总的能量函数中,它会影响线性部分,即外力对位移 x 的作用是线性的。因此,外力项自然可以放入这个线性项中
乘以 h 2 ℎ^2 h2体现了外力在整个时间步长内的累积效应
力和加速度是直接相关的。加速度是位移 𝑥对时间 𝑡的二阶导数。而当我们离散化这个二阶导数时,时间步长 ℎ被平方了

2.3 Block Coordinate Descent(块坐标下降法)

在这里插入图片描述

Global Step部分

在这里插入图片描述

相关文章:

Fast Simulation of Mass-Spring Systems in Rust 论文阅读

参考资料: 文章目录 概述流程概述:1.前置知识1.1 运动方程(牛顿第二定律)1.2 二阶导数的离散化1.3 代入运动方程1.4 物理意义 2. 将隐式积分问题转化为一个优化问题2.1 要解的是隐式积分问题是:2.2 引入辅助变量d1. 左…...

javaWeb项目-ssm+vue志愿者招募网站功能说明介绍

本项目源码(点击下方链接下载):java-ssmvue志愿者招募网站实现源码(项目源码-说明文档)资源-CSDN文库 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端&#xff1a…...

Selenium + Titanium代理获取请求的接口数据

有一个采集数据的需求,分析了页面数据后发现列表有一个id,但是没有其他数据,打开详情并不是通过id,而是其他一个字段,这就说明通过selenium抓取页面数据还不行,还要接口返回的数据。这个时候就需要用到代理…...

ELK Stack与Graylog:强大的日志分析和可视化工具

ELK Stack的使用方法 ELK Stack由Elasticsearch、Logstash和Kibana三个核心组件组成,它们协同工作,提供了从日志收集、解析、存储到可视化的完整解决方案。 安装与配置Elasticsearch Elasticsearch是ELK Stack的存储和查询引擎,负责存储日…...

安全见闻(6)——开阔眼界,不做井底之蛙

内容预览 ≧∀≦ゞ 安全见闻六:通讯协议安全问题剖析声明引言一、通讯协议的保密性问题二、通讯协议的完整性问题三、身份验证问题四、可用性问题五、通讯协议的实现问题六、协议设计缺陷七、移动通讯协议的安全问题八、物联网通讯协议的安全问题九、工业控制系统通…...

GRU神经网络理解

全文参考以下B站视频及《神经网络与深度学习》邱锡鹏,侧重对GPU模型的理解,初学者入门自用记录,有问题请指正【重温经典】GRU循环神经网络 —— LSTM的轻量级版本,大白话讲解_哔哩哔哩_bilibili 更新门、重置门、学习与输出 注&a…...

Windows 10、Office 2016/2019 和 PPTP 和 L2TP协议即将退役,企业应尽早做好准备

关心微软技术和产品的朋友一定对这个网站很熟悉:https://microsoftgraveyard.com/,这里静静的躺着很多微软技术和产品。近日,微软又在准备一场新的“告别仪式”了,这次是 Windows 10、Office 2016/2019 和一些老旧的协议与技术。让…...

论文阅读:Guided Linear Upsampling

今天介绍一篇有趣的文章,Guided Linear Upsampling,基于引导的线性上采样,这是发表在 ACM transaction on Graphic 的一篇工作。 Abstract 引导上采样是加速高分辨率图像处理的一种有效方法。在本文中,文章作者提出了一种简单而…...

深度图和RGB图对齐

坐标系间的转换_坐标系转换-CSDN博客 深度图与彩色图的配准与对齐_彩色 深度 配准-CSDN博客 kinect 2.0 SDK学习笔记(四)--深度图与彩色图对齐_mapdepthframetocolorspace-CSDN博客 相机标定(三)-相机成像模型_相机小孔成像模型…...

滑动窗口与TCP的缓冲区(buff)的关系

‌滑动窗口与TCP的缓冲区(buff)有直接关联。‌ 滑动窗口机制是TCP协议中用于流量控制和拥塞控制的重要机制。滑动窗口实际上是一个操作系统开辟的缓存空间,用于指定无需等待确认应答即可继续发送数据的最大值。这个窗口大小(win&…...

一款好用的搜索软件——everthing(搜索比文件资源管理器快)

everthing官网链接 在官网选择下载 1.下载后双击打开 2.点击OK(需要其他语言自己选择) 3.选择安装位置(路径最好别带中文和空格) 继续点击下一步 4. 点击下一步 5.继续点击安装 6.然后就完成了 7.点击打开然后就可以搜索了...

C#WPF的App.xaml启动第一个窗体的3种方式

WPF的App.xaml启动第一个窗体的3种方式 1.使用App.xaml的StartupUri属性启动&#xff08;推荐使用&#xff09; 在App.xaml文件中&#xff0c;你可以设置StartupUri属性来指定启动时显示的第一个窗口&#xff1a; <Application x:Class"浅看一眼WPF.App"xmlns&…...

【JAVA毕设】基于JAVA的酒店管理系统

一、项目介绍 本系统前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router实现动态路由&#xff0c;Ajax实现前后端通信&#xff0c;Element-plus组件库使页面快速成型。后端部分&#xff1a;采用SpringBoot作为开发框架&#xff0c;同时集成MyBatis、Redis、…...

聚类--机器学习西瓜书阅读笔记(六)

无监督学习&#xff1a;通过对无标记训练样本的学习&#xff0c;揭示数据内在规律和性质。 聚类试图将数据集中的样本划分为若干不相交的子集&#xff0c;聚类过程自动形成簇结构&#xff0c;簇对应的语义需要子集命名把握。 聚类过程可以作为单独的过程&#xff0c;寻找数据…...

OpenHarmony(1)开发环境搭建

一&#xff1a;开源项目 OpenHarmony是由开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目&#xff0c;目标是面向全场景、全连接、全智能时代&#xff0c;基于开源的方式&#xff0c;搭建一个智能终端设备操作系统的框架和平台&#xff0…...

Triton服务在ASR语音识别系统中的实现

Triton服务在ASR语音识别系统中的实现 一、引言二、环境准备1. 硬件环境2. 软件环境 三、模型选择与训练1. 数据准备2. 模型架构3. 模型训练 四、模型转换与优化1. 模型转换2. 模型优化 五、配置Triton服务1. 安装Triton服务2. 创建模型仓库 一、引言 自动语音识别&#xff08…...

Typora一款极简Markdown文档编辑、阅读器,实时预览,所见即所得,多主题,免费生成序列号!

文章目录 Typora下载安装Typora序列号生成 Typora是一款Markdown编辑器和阅读器&#xff0c;风格极简&#xff0c;实时预览&#xff0c;所见即所得&#xff0c;支持MacOS、Windows、Linux操作系统&#xff0c;有图片和文字、代码块、数学公式、图表、目录大纲、文件管理、导入导…...

python机器人编程——用python调用API控制wifi小车的实例程序

目录 一、前言二、一个客户端的简单实现2.1 首先定义一个类及属性2.2 其次定义连接方法2.3 定义一些回调函数2.4 定义发送小车指令方法2.5 定义一个正常关闭方法 三、python编程控制小车的demo实现四、小结PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源p…...

面试学习整理-线程池

线程池 简介JUC包线程池介绍线程池最常问也最常用-参数线程执行分析-线程是怎么运行的进程和线程的区别Executors工厂类提供四种线程池Executors和ThreaPoolExecutor创建线程池的区别两种提交任务的方法spring集成的线程池 简介 线程池作为实际使用和面试较多的技能区, 学习是…...

Debian会取代CentOS成为更主流的操作系统吗?

我们知道&#xff0c;其实之前的话&#xff0c;国内用户对centos几乎是情有独钟的偏爱&#xff0c;很多人都喜欢选择centos系统&#xff0c;可能是受到一些原因的影响导致的吧&#xff0c;比如他相当于免费的红帽子系统&#xff0c;或者一些教程和网上的资料都推荐这个系统&…...

网络安全领域推荐证书介绍及备考指南

在网络安全领域&#xff0c;拥有专业认证不仅可以证明个人的专业能力&#xff0c;还能帮助在实际工作中应用先进的技术和知识。以下是几种热门的网络安全证书介绍及备考指南。 1. OSCP (Offensive Security Certified Professional) 证书简介 OSCP是针对渗透测试领域的入门级…...

SpringBoot项目ES6.8升级ES7.4.0

SpringBoot项目ES6.8.15 升级到 ES7.4.0 前言 由于公司内部资产统一整理&#xff0c;并且公司内部部署有多个版本的es集群&#xff0c;所以有必要将目前负责项目的ES集群升级到公司同一版本7.4.0。es6到es7的升级变化还是挺大的&#xff0c;因此在这里做一下简单记录&#xf…...

深度学习 之 模型部署 使用Flask和PyTorch构建图像分类Web服务

引言 随着深度学习的发展&#xff0c;图像分类已成为一项基础的技术&#xff0c;被广泛应用于各种场景之中。本文将介绍如何使用Flask框架和PyTorch库来构建一个简单的图像分类Web服务。通过这个服务&#xff0c;用户可以通过HTTP POST请求上传花朵图片&#xff0c;然后由后端…...

MFC工控项目实例二十六创建数据库

承接专栏《MFC工控项目实例二十五多媒体定时计时器》 用选取的型号为文件名建立文件夹&#xff0c;再在下面用测试的当天的时间创建文件夹&#xff0c;在这个文件中用测试的时/分/秒为数据库名创建Adcess数据库。 1、在StdAfx.h文件最下面添加代码 #import "C:/Program F…...

springmvc源码流程解析(一)

Springmvc 是基于servlet 规范来完成的一个请求响应模块&#xff0c;也是spring 中比较大的一个 模块&#xff0c;现在基本上都是零xml 配置了&#xff0c;采用的是约定大于配置的方式&#xff0c;所以我们的springmvc 也是采用这种零xml 配置的方式。 要完成这种过程&#xff…...

【论文阅读】SRGAN

学习资料 论文题目:基于生成对抗网络的照片级单幅图像超分辨率(Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network)论文地址:https://arxiv.org/abs/1609.04802代码:GitHub - xiph/daala: Modern video compression for the interne…...

kubelet PLEG实现

概述 kubelet的主要作用是确保pod状态和podspec保持一致&#xff0c;这里的pod状态包括pod中的container状态&#xff0c;个数等。 为了达到这个目的&#xff0c;kubelet需要从多个来源watch pod spec的变化&#xff0c;并周期从container runtime获取最新的container状态。比如…...

leetcode49:字母异位词分组

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", &…...

一个将.Geojson文件转成shapefile和kml文件的在线页面工具(续)

接上一专栏&#xff1a;这个网址有个bug&#xff0c;每个月只能免费转3次&#xff0c;这等于没用&#xff01; 一个将.Geojson文件转成shapefile和kml文件的在线页面工具_geojson转shp在线-CSDN博客 下面这个网址实测可以免费多次转换&#xff01; Quickmaptools : Geojson to…...

论文阅读(二十四):SA-Net: Shuffle Attention for Deep Convolutional Neural Networks

文章目录 Abstract1.Introduction2.Shuffle Attention3.Code 论文&#xff1a;SA-Net&#xff1a;Shuffle Attention for Deep Convolutional Neural Networks(SA-Net&#xff1a;置换注意力机制)   论文链接&#xff1a;SA-Net&#xff1a;Shuffle Attention for Deep Convo…...

wordpress onclick/百度电脑版网页版入口

本期视频演讲稿 https://www.bilibili.com/video/bv1C54y1W7vn 最近正在进行U3D项目移植到h5平台&#xff0c;在移植UI图集时&#xff0c;需要将分离图集 那么如何将下图分离成小图&#xff1f; 最终移植效果游戏在线试玩http://www.4399.com/flash/217641.htm 分离后 操作…...

php怎么做超链接到其他网站/常德政府网站市民留言

毕业前攻克这本基础书吧&#xff0c;虽然不一定做这个&#xff0c;但是这个方向还是很不错的。全书共计21章&#xff0c;这里主要记录要点和自己做的习题解答。 编译环境是debian6.0.6xfce4&#xff0c;用的ide是codeblocks 12.11&#xff08;刚发布&#xff0c;手感不错&#…...

长春建站模板源码/西安seo站内优化

要实现的CSV 的数据格式 [id, age, sex1, 12, 男2, 24, 女 ] 复制代码const EXCEL class {construct () {}/*** [exportsCSV 导出数据到CSV]* param {Array} [_headers[]] [表头]* param {Array} [_body[]] [内容]* param {String} [nameexcel}] [文件名]* return…...

linux上安装wordpress/seo营销推广全程实例

代理设计模式&#xff1a; 动态代理举例&#xff1a; 接口&#xff1a; 被代理类&#xff1a; 测试&#xff1a;...

给银行做网站/百度竞价一个月5000够吗

* 1&#xff0c;报表与子报表的参数传递&#xff0c; 例如 page3包括了子报表page3_1&#xff0c;page3_1包括了子报表page3_1_1&#xff0c; 则在page3的subreport parameters 里面应该刚添加参数page3_1_1&#xff0c;这是page3_1需要的 那page_main包含了page3&#xff0c;p…...

wordpress怎么改后台密码/营销组合策略

如果你在 Ubuntu 16.04 LTS 操作系统中使用 Linux Kernel 4.4 内核&#xff0c;请注意更新系统&#xff0c;以安装修复安全漏洞&#xff0c;它适合 Ubuntu 16.04 LTS 及其 Ubuntu 16.04 衍生版本&#xff0c;根据 Canonical 的修复详情本次共修复了 4 项已知安全漏洞。当然&…...