我至少不是数学家,但我对学习刚体物理学感兴趣(为了实现基本的3d物理引擎).在学校我只通过代数II学习数学,但我已经做了3d开发多年,所以我对向量,四元数,矩阵等有了相当不错的理解.我真正的问题是阅读复杂的公式等等,所以我在寻找对于一些体面的刚体动力学参考,将有一些意义.
有人有什么好的参考?

为什么当我将手机从大约4英尺放到枕头上,然后绘制用户加速度的大小时,我得到的峰值为1.5g然后是1g然后是2.5g然后是1g然后是2.5g然后是1g时间范围内的0g自由落体,有10个样本.理想情况下,由于重力减去空气阻力,它应该以恒定速率向下加速,那么为什么加速度会在自由落体时上下波动?是什么导致了这种噪音?
我基于此使用了以下代码
ballA.vx = (u1x * (m1 - m2) + 2 * m2 * u2x) / (m1 + m2);
ballA.vy = (u1y * (m1 - m2) + 2 * m2 * u2y) / (m1 + m2);
ballB.vx = (u2x * (m2 - m1) + 2 * m1 * u1x) / (m1 + m2);
ballB.vy = (u2y * (m2 - m1) + 2 * m1 * u1y) / (m1 + m2);
Run Code Online (Sandbox Code Playgroud)
但由于该公式是针对一维碰撞而设计的,因此显然效果不佳.
所以我尝试使用本节中的以下公式.

但问题是我不知道偏转角是什么以及如何计算它.另外,如何考虑这个公式中的弹跳系数?
编辑:我可能还不清楚.上面的代码确实有效,尽管它可能不是预期的行为,因为原始公式是针对一维碰撞而设计的.因此,我正在尝试的问题是: …
在Functional Differential Geometry 的早期,Sussman & Wisdom 开始使用“向上结构”……但我一点也不知道这可能是什么。
(print-expression
((compose P2-chi R2-chi-inverse)
(up ’x0 ’y0)))
Run Code Online (Sandbox Code Playgroud)
我在文本中的任何地方都找不到这个结构的描述,我在 Scheme 的标准版本或语言文档中也找不到它......所以我想知道这些“上结构”和“下结构”到底是什么. 我知道它们对应于基本微积分中的导数和积分。完全不知道它们是如何组合在 Scheme 中的。
scheme functional-programming physics calculus data-structures
我目前正在为卫星游戏构建一个简化的反应控制系统,并且需要一种方法来使用该系统将卫星与世界空间坐标中的给定单位方向对齐。因为这是一个游戏模拟,所以我伪造了系统,只是在物体的震中周围施加了一个扭矩力。
这很困难,因为在我的情况下,Torque 的强度不能改变,它要么打开要么关闭。要么全力,要么不施力。计算需要施加扭矩的方向相对容易,但我很难让它完美对齐而不会失去控制并陷入逻辑循环。它需要在准确的“时间”施加反作用力,以零角速度降落在目标方向上。
到目前为止,我确定的是,我需要根据我当前的角速度和两个向量之间的角度来计算达到零速度所需的“时间”。如果这超过了我达到零角的时间,那么它需要施加相反的扭矩。从理论上讲,这也将防止它围绕轴“弹跳”太多。我几乎让它工作了,但在某些情况下,它似乎在向一个方向施加力时卡住了,所以我希望有人可以检查逻辑。我的模拟目前不考虑质量,因此您可以忽略惯性张量(除非它使计算更容易!)
对于一个轴,我目前正在这样做,但我认为有人会有一个更优雅的解决方案,它实际上可以同时计算偏航轴和俯仰轴(Roll 无效)。
Omega = Angular Velocity in Local-Space (Degrees Per Second)
Force = Strength of the Thrusters
// Calculate Time Variables
float Angle = AcosD(DotProduct(ForwardVector, DirectionVector));
float Time1 = Abs(Angle / Omega.Z); // Time taken to reach angle 0 at current velocity
float Time2 = Abs(DeltaTime * (Omega.Z / Force); // Time it will take to reach Zero velocity based on force strength.
// Calculate Direction we need to apply the force to rotate toward …Run Code Online (Sandbox Code Playgroud) 我正在尝试为一个项目创建一个ios 9应用程序,它将使用这些特殊的理论镜头(称为glenses)来显示3D场景.
一个名为TIM的射线追踪程序已经从头开始编写,用于模拟这些格伦等等,但简单地将其移植到ios是不可行的.
我在搜索网站时的理解(即这个答案以及着色器上的许多其他内容)是它应该是可能的,但我很难获得理想的效果.
我决定在开始进行更复杂的glens类型折射之前,首先实现一种更简单的折射形式:
我能够在相机上使用桶形失真(鱼眼镜头)效果SCNTechnique,但是看起来你只能在相机或整个场景上使用技术,而不是单个几何体.
之后我尝试通过使用SCNMaterial's shaderModifiers属性注入opengl代码来获得应用于几何的桶形失真效果:
var shaders = [SCNShaderModifierEntryPoint: String]()
try! shaders[SCNShaderModifierEntryPoint.fragment] = String(contentsOfFile: Bundle.main.path(forResource: "FishEye", ofType: "fsh")!, encoding: String.Encoding.utf8)
try! shaders[SCNShaderModifierEntryPoint.geometry] = String(contentsOfFile: Bundle.main.path(forResource: "FishEye", ofType: "vsh")!, encoding: String.Encoding.utf8)
let material = SCNMaterial()
material.shaderModifiers = shaders
object.geometry?.materials = [material]
Run Code Online (Sandbox Code Playgroud)
我在这里使用了稍加修改的着色器:
fisheye.vsh
varying vec2 uv;
#pragma body
gl_Position = a_position;
uv = a_position.xy;
Run Code Online (Sandbox Code Playgroud)
fisheye.fsh
uniform sampler2D colorSampler;
const float PI = 3.1415926535;
const float barrelPower = …Run Code Online (Sandbox Code Playgroud) 我正在制作 HTML Canvas 演示,以了解有关圆到圆碰撞检测和响应的更多信息。我相信检测代码是正确的,但响应数学并不完全存在。
该演示已使用 TypeScript 实现,TypeScript 是 JavaScript 的类型化超集,可转换为纯 JavaScript。
我相信问题存在于 Circle 类的 checkCollision 方法中,特别是计算新速度的数学方法。
蓝色圆圈位置由鼠标控制(使用事件侦听器)。如果红色圆圈从蓝色圆圈的右侧碰撞,则碰撞响应似乎正常工作,但如果从左侧接近,则无法正确响应。
我正在寻找有关如何修改 checkCollision 数学以从任何角度正确处理碰撞的一些指导。
这是用于现场演示和开发环境的CodePen: CodePen
class DemoCanvas {
canvasWidth: number = 500;
canvasHeight: number = 500;
canvas: HTMLCanvasElement = document.createElement('canvas');
constructor() {
this.canvas.width = this.canvasWidth;
this.canvas.height = this.canvasHeight;
this.canvas.style.border = '1px solid black';
this.canvas.style.position = 'absolute';
this.canvas.style.left = '50%';
this.canvas.style.top = '50%';
this.canvas.style.transform = 'translate(-50%, -50%)';
document.body.appendChild(this.canvas);
}
clear() {
this.canvas.getContext('2d').clearRect(0, 0, this.canvas.width, this.canvas.height);
}
getContext(): CanvasRenderingContext2D {
return this.canvas.getContext('2d');
} …Run Code Online (Sandbox Code Playgroud) 我使用Matter.js作为物理引擎,我发现我可以检测碰撞。
但是,我不知道如何判断碰撞发生后两个物体是否相互接触。有什么办法可以做到这一点吗?
(在我的特定情况下,我希望球仅在接触特定的地面时才跳跃。)
我正在尝试使用有限差分来求解 3D 扩散方程。我认为我的主循环有问题。特别地,离散方程为:

使用诺依曼边界条件(仅以一个面为例):

现在的代码:
import numpy as np
from matplotlib import pyplot, cm
from mpl_toolkits.mplot3d import Axes3D ##library for 3d projection plots
%matplotlib inline
kx = 15 #Number of points
ky = 15
kz = 15
largx = 90 #Domain length.
largy = 90
largz = 90
dt4 = 1/2 #Time delta (arbitrary for the time).
dx4 = largx/(kx-1) #Position deltas.
dy4 = largy/(ky-1)
dz4 = largz/(kz-1)
Tin = 25 #Initial temperature
kapp = 0.23
Tamb3d = 150 #Ambient …Run Code Online (Sandbox Code Playgroud)