我已经为此尝试了典型的物理方程,但它们都没有真正起作用,因为方程式处理的是恒定加速度,我的需要改变才能正常工作.基本上我有一辆可以在很大的速度范围内行驶的汽车,当它到达路径的末端时需要减速并停留给定的距离和时间.
所以,我有:
V0,或当前速度
Vf,或我想要达到的速度(通常为0)
t,或者我想要达到路径末端的时间量
d,或者我想改变的距离从V0到Vf
我想计算
a,或从V0到Vf所需的加速度
这成为一个特定于编程的问题的原因是因为a需要在汽车停止时每一个时间步重新计算.因此,V0不断地改变为V0从最后的时间步长plus的a是计算最后的时间步长.所以基本上它会开始缓慢停止然后最终会突然停止,有点像现实生活中的汽车.
编辑:
好的,谢谢你们的好评.我需要的很多东西只是帮助思考这个问题.现在让我更具体一点,我从你们所有人那里得到了更多的想法:
我有一辆车c是64 pixels从它的目的地,所以d=64.它正在开车2 pixels per timestep,在哪里timestep is 1/60 of a second.我想找到加速度a,使其达到0.2 pixels per timestep行进时的速度d.
d = 64 //distance
V0 = 2 //initial velocity (in ppt)
Vf = 0.2 //final velocity (in ppt)
此外,因为这发生在游戏循环中,变量delta将传递给每个动作,即multiple of 1/60s that …
我正在寻找XNA的3D物理引擎.我听说过一些选择,但我需要的是:
你用过这样的东西吗?你能推荐什么吗?
我有一个移动点(在一个维度上),我需要它顺利移动.所以我认为它的速度必须是一个连续的函数,我需要控制加速度然后计算它的速度和位置.
该算法对我来说似乎并不明显,但我想这一定是一个常见问题,我只是找不到解决方案.
笔记:
我几乎完成了一个处理一些非常大的整数的算法(大约2的数量增加到100,000,000的功率).这需要在16核心服务器上使用几个小时的高度并行代码,并且内存足够,因为算法不是内存密集型的.我使用.NET 4中的BigInteger类.
算法的细节并不重要,但对于上下文,以下是对这些整数执行的操作的非常详尽的列表以及算法的一些显着特征:
我已经尽可能地优化了代码,现在分析只显示了两个瓶颈:
考虑到内存访问和日志操作,我开始考虑GPU以及是否可以有效地卸载一些工作.我对GPU知之甚少,只是它们针对浮点运算进行了优化.
我的问题是,使用像GPU .NET这样的库,如何在GPU上处理如此大的数字?我可以以某种方式利用浮点优化来计算如此大数的Log吗?
寻找形成战略的起点.
我决定使用神经网络来创建我拥有的动画引擎的行为.神经网络为我拥有的每个身体部位提供3个vector3s和1个欧拉角.第一个vector3是位置,第二个是它的速度,第三个是它的角速度.欧拉角是身体部位的旋转.我有7个身体部位.这些数据类型中的每一个都有3个浮点数.7*4*3 = 84,所以我的神经网络有84个输入.输出映射到角色的肌肉.它们提供适用于每块肌肉的力量,其中有15种.
我同时运行15个网络10秒,通过计算最低能量使用,具有最小量的z和x运动,以及如果身体部位处于与其余部分相比正确的y位置来评定其适合度(hips.y> upperleg.y,upperleg.y> lowerleg.y等),然后通过遗传算法运行它们.我正在运行一个神经网络,每个隐藏层有168个神经元,有8个隐藏层.我试图让角色站直,不要走动太多.我跑了3000代,我甚至没有接近.
神经网络和遗传算法是本教程的 C#版本.我将交叉方法从一个点改为混合.
我有84个输入和15个输出.我的神经网络应该有多大?
animation physics machine-learning neural-network genetic-algorithm
我已经写过/我正在编写一段物理分析代码,最初是为了我自己,现在希望由一小群物理学家使用和扩展.我们都不是C++大师.我已经整理了一个小框架,将"物理事件"数据抽象为由一系列工具操作的对象,这些工具可以根据分析要求轻松交换.
这创造了代码的两半:"物理分析"代码,它操纵事件对象并通过基础"工具"的衍生产生我们的结果; 以及附加输入文件的"结构"代码,将作业拆分为并行运行,根据某些脚本将工具链接到链中等.
问题在于:对于其他人来说,要使用代码,每个用户都应该能够遵循以任何方式修改事件数据的每一步.因此,(许多)额外的困难结构代码线可能是令人生畏的,除非它明显且明显地是物理学的外围.更糟糕的是,在太多细节上看它可能会给人们一些想法 - 我宁愿他们没有很好的理由不编辑结构代码 - 最重要的是他们不得引入任何影响物理的东西.
我希望能够:
在我理想的场景中,事件数据将是私有的,派生的物理工具继承了Tool基类的访问权限.当然,实际上这是不允许的.我听说有充分的理由,但这不是问题.
不幸的是,在这种情况下,从基础(它是朋友)调用getter/setter的方法会产生比它解决的问题更多的问题 - 代码应该是干净的,易于遵循的,并且尽可能地连接到物理上.工具本身的实现(用户不需要成为C++的专家或程序的内部工作来创建工具).
鉴于我有一个值得信赖的基类,任何衍生品都会受到密切关注,是否有其他环形交叉口但经过良好测试的方式只允许访问这些衍生品?或者任何拒绝访问某些其他基础的衍生物的方法?
为了澄清情况,我有类似的东西
class Event
{
// The event data (particle collections etc)
};
class Tool
{
public:
virtual bool apply(Event* ev) = 0;
};
class ExampleTool : public Tool
{
public:
bool apply(Event* ev)
{
// do something like loop over the electron collection
// and throw away those will low energy
}
};
Run Code Online (Sandbox Code Playgroud)
由于上述两个原因(A和B),理想情况是将对Event的内容的访问限制为仅这些工具.
感谢大家提出的解决方案.我认为,正如我所怀疑的那样,我所希望的完美解决方案是不可能的.dribeas的解决方案在任何其他设置中都是完美的,但它恰好在apply()函数中,代码需要尽可能清晰和简洁,因为我们基本上会花一整天时间编写/编辑apply()函数,并且还会需要了解每个人写的每一行.它与可读性和努力能力无关.我喜欢"无用"的预处理器解决方案.它并没有真正强制执行分离,但有人需要真正恶意破坏它.对于那些建议使用图书馆的人,我认为这肯定是一个很好的第一步,但并没有真正解决两个主要问题(因为我仍然需要提供源代码).
我想模拟自由落体和地面碰撞(例如弹跳球).物体将处于真空状态 - 可以省略空气阻力.与地面的碰撞会导致一些能量损失,因此最终物体将停止移动.我使用JOGL渲染一个点,这是我的下落对象.重力是恒定的(-9.8 m/s ^ 2).
我找到了一个计算点的新位置的欧拉方法:
deltaTime = currentTime - previousTime;
vel += acc * deltaTime;
pos += vel * deltaTime;
Run Code Online (Sandbox Code Playgroud)
但我做错了什么.该点反弹几次然后向下移动(非常慢).
这是一个伪代码(初始pos =(0.0f,2.0f,0.0f),初始vel(0.0f,0.0f,0.0f),gravity = -9.8f):
display()
{
calculateDeltaTime();
velocity.y += gravity * deltaTime;
pos.y += velocity.y * deltaTime;
if(pos.y < -2.0f) //a collision with the ground
{
velocity.y = velocity.y * energyLoss * -1.0f;
}
}
Run Code Online (Sandbox Code Playgroud)
获得逼真效果的最佳方法是什么?欧拉方法如何参考恒定加速度方程?
我正在尝试使用MATLAB生成一些计算机生成的全息图.我使用等距网格来初始化空间网格,我得到了下面的图像

除中心区域外,这种模式是我需要的.条纹应该清晰但模糊.我认为这可能是网格的问题.我尝试在极坐标中生成网格,并使用MATLAB pol2cart函数将其映射到笛卡尔坐标.不幸的是,它不起作用.人们可能会建议使用精细网格.它也不起作用.我想如果我能生成一个螺旋网格,也许这个问题是可以解决的.另外,一般来说,螺旋臂的数量可以是任意的,任何人都可以给我一个暗示吗?
我附上了代码(我的最终项目并不完全相同,但它有类似的问题).
clc; clear all; close all;
%% initialization
tic
lambda = 1.55e-6;
k0 = 2*pi/lambda;
c0 = 3e8;
eta0 = 377;
scale = 0.25e-6;
NELEMENTS = 1600;
GoldenRatio = (1+sqrt(5))/2;
g = 2*pi*(1-1/GoldenRatio);
pntsrc = zeros(NELEMENTS, 3);
phisrc = zeros(NELEMENTS, 1);
for idxe = 1:NELEMENTS
pntsrc(idxe, :) = scale*sqrt(idxe)*[cos(idxe*g), sin(idxe*g), 0];
phisrc(idxe) = angle(-sin(idxe*g)+1i*cos(idxe*g));
end
phisrc = 3*phisrc/2; % 3 arms (topological charge ell=3)
%% post processing
sigma = 1;
polfilter = [0, 0, 1i*sigma; 0, …Run Code Online (Sandbox Code Playgroud) 我正在开始游戏,我正在使用Farseer作为物理引擎.
我已经设置了几个用作地形图块的框和一个用作播放器的框.这两者之间的碰撞非常奇怪,当它不是"直接"撞击时它们相交并滑动.
以下是发生了什么的GIF:http://i.imgur.com/HR0J0D3.gifv
以下是片段:
//Creating the body
PhysBody = BodyFactory.CreateRectangle(
Transform.World.PhysWorld,
ConvertUnits.ToSimUnits(Width * Transform.Scale),
ConvertUnits.ToSimUnits(Height * Transform.Scale),
5,
ConvertUnits.ToSimUnits(Transform.Position.ToVector2()));
//The tiles are static, the player is not
PhysBody.BodyType = Static ? BodyType.Static : BodyType.Dynamic;
//Drawing the test rectangles
ShapeRenderer.Instance.DrawRectangle(
sb,
ConvertUnits.ToDisplayUnits(PhysBody.Position).ToVector2(),
new Size2((int)(Width * Transform.Scale), (int)(Height * Transform.Scale)),
Color.White);
Run Code Online (Sandbox Code Playgroud)
我不认为其余的很重要,我所做的就是创造一个9.8重力的世界.
我也尝试过不使用Transform.Scale并且在播放器下方只有一个框,问题仍然存在.
我正在使用的图形引擎是紫外线
我正在尝试编写FORTRAN代码来评估f(r)=exp(-(r^2))使用FFTW3库的高斯函数的快速傅里叶变换.众所周知,高斯函数的傅里叶变换是另一种高斯函数.
我考虑在球面坐标中评估高斯函数的傅里叶变换积分.
因此,可以将得到的积分简化为积分[r*exp(-(r^2))*sin(kr)]dr.
我编写了以下FORTRAN代码来评估离散SINE变换DST,它是使用PURELY实数输入数组的离散傅立叶变换DFT.DST通过执行C_FFTW_RODFT00现有的FFTW3,考虑到在位置空间中的离散值是R = I*增量(i = 1,2,...,1024),以及用于DST输入数组是函数r*exp(-(r^2))NOT高斯.积分中的正弦函数是由积分[r*exp(-(r^2))*sin(kr)]dr超过SPHERICAL坐标产生的,并且它不是exp(ik.r)一般采用解析傅里叶变换时出现的虚部.
然而,结果不是动量空间中的高斯函数.
Module FFTW3
use, intrinsic :: iso_c_binding
include 'fftw3.f03'
end module
program sine_FFT_transform
use FFTW3
implicit none
integer, parameter :: dp=selected_real_kind(8)
real(kind=dp), parameter :: pi=acos(-1.0_dp)
integer, parameter :: n=1024
real(kind=dp) :: delta, k
real(kind=dp) :: numerical_F_transform
integer :: i
type(C_PTR) :: my_plan
real(C_DOUBLE), dimension(1024) :: y
real(C_DOUBLE), dimension(1024) :: yy, yk
integer(C_FFTW_R2R_KIND) :: C_FFTW_RODFT00
my_plan= fftw_plan_r2r_1d(1024,y,yy,FFTW_FORWARD, …Run Code Online (Sandbox Code Playgroud)