我正在使用一个只支持凸多边形形状的游戏物理库(Box2D).但是,我希望关卡生成器能够指定凹多边形而不必担心.
那么,我怎样才能自动将凹多边形分解为凸多边形(甚至是所有三角形).速度会很酷,但实施的简便性更为重要.分手只会在游戏初始化时完成.
(我的语言是Flash/ActionScript 3,但这不重要)
给定一个二维不规则(非凸)形状的图像,我怎样才能计算出它在平面上稳定的所有方式?例如,如果形状是一个完美的方形矩形,那么它肯定有4种稳定方式.另一方面,圆圈没有稳定的方向,或者每个点都是稳定的方向.
编辑:有一个很好的小游戏叫做Splitter(小心,上瘾的游戏)似乎接近我想要的.注意到你砍掉了一块木头,它会掉到地上并以稳定的方式放置.
编辑:最后,我采用的方法是计算质心(形状)并计算凸包(使用OpenCV),然后遍历每对顶点.如果质心落在由2个顶点形成的线的顶部,则认为是稳定的,否则,不是.
我想在三维空间中模拟一些具有吸收和反射的传播波.我想用python做.我应该使用numpy吗?我应该使用一些特殊的库吗?
我该如何模拟波浪?我可以使用波动方程吗?但是,如果我有反思怎么办?有更好的方法吗?我应该用矢量吗?但是当光线发散时,强度会降低.难.
提前致谢.

我正在为游戏制作一个简单的堆栈,玩家可以移动编号的棋子,以跟踪他们与完成收集胜利手段的距离.
目前我使用jQuery UI的可拖动和可拖放.它很适合轻松启动,但一次只能移动一件:http://cssdeck.com/labs/cowmmudd/4.
canvas但是我想要像谷歌那样实现相同的目标:http://mrdoob.com/projects/chromeexperiments/google-gravity/)有人可以使用他们所知道的最好的JavaScript物理库提供控制普通,非画布HTML元素的放置和碰撞的简约示例吗?
我正在进行这个基于浏览器的实验,我给出了N个特定的圆圈(假设它们中有一个独特的图片),需要将它们放在一起,尽可能留下它们之间的空间.它不必排成一个圆圈,但它们应该"聚集"在一起.
圆圈尺寸可自定义,用户可以通过拖动javascript滑块更改尺寸,更改某些圆圈的尺寸(例如,在滑块的10%中,圆圈4的半径为20px,圆圈为2 10px,圆圈5保持不变等...).正如您可能已经猜到的那样,我将尝试在移动滑块时平滑地"转换"调整大小 - 重新定位.
到目前为止我尝试过的方法:不是手动尝试定位它们,而是尝试使用物理引擎 -

想法:
对于这个任务,我使用了"box2Dweb".我把一个引力拉到了屏幕的中心,然而,它花了很长时间才将球放在中心并且它们漂浮在周围.然后我在中间放了一小块静态球,这样他们就可以击中它然后停下来.它看起来像这样:

结果有点好,但是圈子在静止之前仍然移动了一段时间.即使在玩了诸如球摩擦和不同的引力之类的变量之后,整个事物只是漂浮在周围并且感觉非常"摇摆不定",而我希望球只在我拖动时间滑块(当它们改变尺寸时)移动.另外,box2d不允许更改对象的大小,我将不得不破解我的方法来解决方法.
因此,box2d方法让我意识到,留下一个物理引擎来处理这个问题并不是最好的解决方案.或许我必须包括一些我没有想到的其他力量.我在StackOverflow上发现了类似的问题.然而,非常重要的区别在于它只是"同时"生成一些非特定的圆圈,并且不允许额外的特定球尺寸和位置操纵.
我现在真的被困住了,有没有人有任何想法如何处理这个问题?
更新:已经差不多一年了,我完全忘了这个帖子.我最终做的是坚持物理模型并在几乎空闲的条件下重置力/停止.结果可以在http://stateofwealth.net/看到 你看到的三角形在这些圆圈内.其余的行通过"delaunay三角剖分算法"连接
在场景中"缩小"的正确方法是什么?
我有一个对象,我施加冲动在屏幕上触发它.例如,它将在大约100 px的范围内射击.这可以按预期工作 - 增加飞行的力量,增加飞行的密度等.
我的问题是缩放,我知道缩小场景的唯一方法是setScale,并按预期缩小我的所有节点.
但是,然后飞行相同数量的物体(刚刚缩小)而不是飞行距离的两倍以上.
当我在比例之前和之后记录对象的质量/密度等时,它们是相同的,如预期的那样.
那么为什么它的飞行量不一样呢?尝试改变冲动以匹配比例,但它不起作用,是的它飞行距离较少 - 但它不是一个与缩放的一个.
棘手的问题......
谢谢你的想法.
我正在尝试使用Yampa进行一些基本的系统仿真,就像我在Simulink中所做的那样.在这种情况下,我想模拟这个simulink教程介绍的弹簧和阻尼系统.我写了以下信号函数来代表系统:
system = time >>> force >>> displacement
force = constant (m * g)
displacement = feedback (-) (velocity >>> integral) (gain $ k / m) 0
velocity = feedback (-) integral (gain $ c / m) 0
Run Code Online (Sandbox Code Playgroud)
当feedback函数创建一个基本的反馈回路,并像这样实现的:
feedback op a b b0 = loopPre b0 inner
where inner = arr (uncurry op) >>> a >>> (identity &&& b)
Run Code Online (Sandbox Code Playgroud)
哦,并且:
gain x = arr (*x)
Run Code Online (Sandbox Code Playgroud)
有了明显的正常数,我得到了一个非常不稳定的系统:

在我构建反馈循环或应用集成的方式中是否存在明显错误?
1)有没有证据表明混合刚体phisix和流体(比如SPH)的模拟可以为现实世界提供建模?
2)这种混合的框架如何工作?
假设我们在一个箱子里面有一个woden秋千,里面有两种不同的液体(油和水)和一个柔软的身体球.开始条件如下:

我们怎么能模拟这种情况呢?用什么工具?
我现在如何看待它(如果我错了请高高在上)
*)*在RB\SB phisix引擎中加载()并制作框架.*在流体发动机的tate()中表示我们的rb/sb,作为来自力场的脉冲的粒子*)使用RB和SB作为粒子,其密度对应于它们制作的材料,并且脉冲对应于先前计算的矢量场**)这至少在理论上可以近乎实时地用gpu上的当前流体3 +子弹3来计算......对于简单的情况......但是我想知道这使得系统不真实多少?
我想CGFloat在屏幕点击时每次增加一次.浮点数具有设定的最大值和最小值.我试图通过这个建议:StackOverflow
但是,这只会在触摸后增加CGFloat,或达到最大值.我想在触摸期间增加CGFloat ,这意味着你触摸的时间越长,Jump/CGFloat越高.
问题可能在于冲动,在应用之后你无法改变它.这意味着,在'玩家'获得20的冲动,并且屏幕被更长时间触摸后,浮动可能会增加,但冲动不会.
如果查看我当前的代码,触摸屏幕时脉冲设置为最大值,但如果释放,则应删除该操作.但是,它不起作用,冲动不会停止.
我知道你可以在按下之后将身体的速度设置为一个值,如果按下已经结束速度回到0,那么它会停止它'跳',但是看起来并不是很平滑有冲动.
有人有解决方案吗?
struct Constants {
static let minimumJumpForce:CGFloat = 20.0
static let maximumJumpForce:CGFloat = 60.0
}
class GameScene: SKScene, SKPhysicsContactDelegate {
var force: CGFloat = 20.0
func longPressed(longPress: UIGestureRecognizer) {
if (longPress.state == UIGestureRecognizerState.Began) {
println("Began")
self.pressed = true
let HigherJump = SKAction.runBlock({Player.physicsBody?.applyImpulse(CGVectorMake(0, Constants.maximumJumpForce))})
self.runAction(HigherJump , withKey:"HighJump")
}else if (longPress.state == UIGestureRecognizerState.Ended) {
println("Ended")
self.pressed = false
self.removeActionForKey("HighJump")
}
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { …Run Code Online (Sandbox Code Playgroud) physics ×10
algorithm ×2
box2d ×2
game-physics ×2
javascript ×2
sprite-kit ×2
collision ×1
frp ×1
haskell ×1
html5 ×1
ios ×1
java ×1
modeling ×1
numpy ×1
polygon ×1
positioning ×1
python ×1
simulation ×1
swift ×1
wave ×1
yampa ×1