让我们考虑在表面上具有质量m和半径R的圆盘,其中也涉及摩擦.当我们给这个磁盘一个方向的起始速度v时,磁盘将朝向该方向并减速并停止.
如果磁盘在速度旁边旋转(或旋转线与表面垂直旋转),则磁盘不会在一条线上移动,而是弯曲.线性和角速度都在最后为0.
如何计算这个条带/弯曲/拖动?是否有可能为X(v,w,t)函数提供解析解,其中X将根据它在给定t的初始vw给出磁盘的位置?
任何模拟提示都可以.我想,根据w和m和u,会有一个与线速度垂直的附加速度,因此磁盘的路径会从线性路径弯曲.
我想在SimSpark下运行的3D RoboCup软件足球模拟联盟中编写一个机器人.有人能指出一些已经处理过与服务器通信的代码吗?
理想情况下,这将是.NET代码,但以任何语言生成的示例仍然有用.
编辑对于不熟悉RoboCup 3D足球联赛的人,请查看此YouTube视频.它有一些非常有趣的时刻,如果你有这样的事情......
编辑2仍然没有答案?我在维基百科上整理了一个专门用于 RoboCup 3D模拟足球联赛的页面,以获取更多信息.
这是另一部关于SEU-RedSun团队在2008年RoboCup锦标赛中踢球的YouTube视频.他们的代理人比我链接的第一个视频中的代理人要复杂得多(并且协调一致).
首先要注意:从数学上讲,我根本不熟练.
我在iPhone上玩了一个游戏,你按下了一个点,箭头从你的城堡开始,它总是与你按下的点相交.我想做一个类似的游戏,认为这将是一个简单的快速制作; 然后我意识到这个数学实际上超出了我的技能水平.
我假设他们正在使用一个抛物线公式或某些东西来确定箭头启动时所需的速度和角度,以使箭头始终与点击的点相交.
我只是模糊地记得抛物线是如何从学校工作的,没有机会制定任何公式.
任何可能更容易实现的数学帮助或想法都会很棒.
我想最终在我的城堡中使用一个函数:
package
{
import avian.framework.objects.AvElement;
public class Castle extends AvElement
{
/**
* Fires an arrow from this
* @param ix The x intersection point
* @param iy The y intersection point
*/
public function fire(ix:Number, iy:Number):void
{
var ar:Arrow = new Arrow();
ar.x = x;
ar.y = y;
// define angle and velocity based on ix, iy
// ar.fireAngle = ??
// ar.fireVelocity = ??
parent.addChild(ar);
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据评论中的问题更新:
箭头没有施加任何力,例如风,摩擦等.此外,箭头的起点在整个游戏中固定(在城堡处). …
嗨我目前在COMSOL用于计算2D中的热传递,我正在寻找一个用C++编写的库.libMesh和Gmsh的组合是最佳选择吗?
如果您还可以在建议的库中提供此类操作的示例,那将非常有用吗?我使用傅立叶方程.
先感谢您
我需要用C ++编写一个函数,该函数可以对在3D空间中移动的对象的轨迹曲线进行建模和采样。
该函数将需要接受3个参数作为输入。函数原型可能看起来像这样:
void CalculateAndSampleTrajectory(Vec3 direction, float impulse, float mass)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
该VEC3方向是一个结构。本质上是3个浮点,它们表现为描述脉冲初始角度的单位矢量。
该浮冲动是冲动是多么强大的幅度。
该浮动质量描述投影的物体的质量。
该函数将采用这3个参数,然后在给定瞬时脉冲的情况下,沿着此向量射击,预先计算该质量的对象的轨迹。
为此,它将在飞行的前4秒钟内对轨迹进行采样(例如200个)。这些样本将是弹丸位置的Vec3,并存储在阵列中。
所有单位均为SI,重力加速度为9.81。我们不会考虑任何空气阻力。
这个问题涉及很多物理学,特别是经典力学。这不是我的强项,但我对发生的事情有基本的了解。
我知道我将需要物体的速度,我认为可以将其计算为:
Vec3 velocity = (direction * impulse)/mass;
Run Code Online (Sandbox Code Playgroud)
我觉得这个作品,因为我的冲动将被立即应用,所以这将是F = MA重新安排找到一个但作为3D矢量的。老实说,我什至不确定这是否正确,但我认为是正确的。
一旦有了速度,我就知道可以使用在线上提供的大量方程式了,例如有关弹道的Wikipedia文章
我不太擅长将这些方程式解释为C ++。
在设置了适当的方程式之后,我将需要在4秒钟内进行200个采样。这可以循环执行:
for(int i = 0; i < 200; i++)
{
int t = 0;
//sample equation with t
//store resulting vec3 pos in array
t = t + 0.02;
}
Run Code Online (Sandbox Code Playgroud)
我在t的 …
我有一个非常简单的场景:一个带有动态物理物体的立方体和一个带有静态物理物体的平面。当立方体掉落并撞到地面时,两个物体之间有一个可见的缝隙,您可以在此处看到以下视频:
我尝试了所有不同的组合,SCNPhysicsShapeTypeKey还尝试将SCNPhysicsBody的形状设置为nil(文档说:“保留此nil将使系统决定并使用最有效的边界表示”),但是没有任何方法能够消除差距。
// ...
// plane physics
var body = SCNPhysicsBody(type: SCNPhysicsBodyType.Static, shape: SCNPhysicsShape(geometry: result.node!.geometry!, options: [SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConvexHull]));
result.node!.physicsBody = body;
} else {
// cube physics
var body = SCNPhysicsBody(type: SCNPhysicsBodyType.Dynamic, shape: SCNPhysicsShape(node: result.node!, options: [SCNPhysicsShapeTypeKey:SCNPhysicsShapeTypeConvexHull]));
result.node!.physicsBody = body;
}
Run Code Online (Sandbox Code Playgroud)
我已经检查了我的dae文件(在此处附件),并根据此问题应用了所有比例/变换,但是结果相同。
我想我这里缺少明显的东西,有什么想法吗?
我正在用html画布构建一个游戏.这是一个空气曲棍球比赛,我已经相当远了.游戏中有三个圆圈,被击中的圆盘和两个控制器(用于击中圆盘/圆圈).
我已经让光盘从墙壁上反弹,并具有检测光盘何时与控制器发生碰撞的功能.我正在努力的一点是当两个圆圈碰撞时,控制器应保持静止,光盘应朝正确的方向移开.我读了很多文章,但仍然无法做到.
这是Codepen链接到目前为止我的进展.你可以看到冰球从控制器上反弹但没有朝着正确的方向反弹.你还会看到冰球是否来自控制器后面的冰球. http://codepen.io/allanpope/pen/a01ddb29cbdecef58197c2e829993284?editors=001
我认为我所追求的是弹性碰撞但不确定如何解决它.我发现这篇文章却无法让它发挥作用.
Heres是我的碰撞检测功能.自我引用光盘,控制器[i]是光盘命中的控制器.
this.discCollision = function() {
for (var i = 0; i < controllers.length; i++) {
// Minus the x pos of one disc from the x pos of the other disc
var distanceX = self.x - controllers[i].x,
// Minus the y pos of one disc from the y pos of the other disc
distanceY = self.y - controllers[i].y,
// Multiply each of the distances by itself
// Squareroot that number, which gives you the …Run Code Online (Sandbox Code Playgroud) 这是对社区的一个呼吁,看看是否有人有想法提高这个MSD计算实施的速度.它主要基于此博客文章的实现:http://damcb.com/mean-square-disp.html
目前,对于500个点的2D轨迹,当前实施需要大约9秒.如果你需要计算很多轨迹,这真的太过分了......
我没有尝试并行化(使用multiprocess或者joblib),但我觉得创建新进程对于这种算法来说太重了.
这是代码:
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# Parameters
N = 5000
max_time = 100
dt = max_time / N
# Generate 2D brownian motion
t = np.linspace(0, max_time, N)
xy = np.cumsum(np.random.choice([-1, 0, 1], size=(N, 2)), axis=0)
traj = pd.DataFrame({'t': t, 'x': xy[:,0], 'y': xy[:,1]})
print(traj.head())
# Draw motion
ax = traj.plot(x='x', y='y', alpha=0.6, legend=False)
# Set limits
ax.set_xlim(traj['x'].min(), …Run Code Online (Sandbox Code Playgroud) 我正在使用Google Cardboard SDK整理应用程序.用户可以在有或没有纸板的情况下使用该应用程序.因此,应用程序内部有一个切换按钮,用于激活和停用立体渲染.
该应用程序还使用Vuforia SDK来跟踪图像目标.如果识别出特定目标,则目标上方的一些3D对象和粒子系统开始发射粒子.
在非立体声模式下一切正常.粒子按预期正确发射和下落.他们应该模拟雪.此外,如果用户将图像目标转到一个角度,则上面的3D对象会掉下来.
当切换到立体声模式时,物理学完全搞砸了.雪粒不再下降,它们似乎在屏幕周围"传送".此外,3D物体确实向上倾斜,具有非常重的负重力.时间尺度似乎成倍增加,但不是 - 我仔细检查过.在非立体和立体渲染之间切换时,重力也不会改变.
在蛾模式下,Unity Editor中的一切工作正常.它只出现在iPhone 5的设备上.
我仔细检查了重力和时间刻度,它们在模式之间切换时没有变化.我很难搞清楚可能导致物理问题陷入困境的原因.
我做了一些进一步的调查.我让我在相机前坐着一个小小的小发明,但是获得了Unity世界空间轴的旋转,所以我知道3D世界是相对于相机的.事实证明,当使用谷歌纸板相机系统处于VR模式时,世界确实在相机上大量旋转.我设法以某种方式拿着测试设备,所以它正在减速并且几乎冻结,但我还没有解释效果.
physics unity-game-engine particle-system vuforia google-cardboard
大家好:)这是情况:
我有一个baddy预制件,它有两个碰撞器组件:一个用于物理的简单CapsuleCollider2D,以及一个仅用于鼠标点碰撞的触发器PolygonCollider2D.
PolygonCollider2D仅在需要时通过附加脚本(Baddy.cs)更新:
if(this.gameObject.GetComponent<PolygonCollider2D>()!=null){
Destroy(this.gameObject.GetComponent<PolygonCollider2D>());
}
this.gameObject.AddComponent<PolygonCollider2D>();
this.gameObject.GetComponent<PolygonCollider2D>().isTrigger=true;
Run Code Online (Sandbox Code Playgroud)
是的,这是不好的做法,但它完成了工作.它完美地工作:在游戏的场景视图中我可以暂停并看到我们的baddy预制件上确实存在多边形对撞机.
在另一个附加脚本(CollisionHandler.cs)中,我们检查我们的baddy上的鼠标按下:
if(MousePress()){
hit=Physics2D.Raycast(level.mousePoint, Vector2.zero, 0f);
if(hit&&hit.collider==this.gameObject.GetComponent<PolygonCollider2D>()){
print("baddy mousePress");
}
}
Run Code Online (Sandbox Code Playgroud)
然而hit.collider==this.gameObject.GetComponent<PolygonCollider2D>()结果是错误的,即使我可以打印两个hit.collider并且this.gameObject.GetComponent<PolygonCollider2D>()在我们之前立即打印if(MousePress())并将它们定义为:
D_Prefab(Clone) (UnityEngine.PolygonCollider2D)
Run Code Online (Sandbox Code Playgroud)
它们不能是不同的PolygonColliders,因为一次只能有一个,因为我们的Baddy脚本同时删除并创建了PolygonCollider.
什么想法可能会出错?
physics ×10
c++ ×2
math ×2
simulation ×2
3d ×1
c# ×1
canvas ×1
collision ×1
flash ×1
game-physics ×1
ios ×1
iphone ×1
javascript ×1
numpy ×1
pandas ×1
projectile ×1
python-3.x ×1
robocup ×1
scenekit ×1
swift ×1
transfer ×1
unity5 ×1
vuforia ×1