- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一个相当新的程序员,但我正在尝试创建自己的物理引擎而不使用任何库。这是一个星际迷你高尔夫游戏。
根据行星的密度和位置,我的重力工作正常,并且我的碰撞检测工作正常,但当它们碰撞时该怎么办是我无法解决的。
行星不会移动,但使用 Javascript 进行三 Angular 函数计算结果速度被证明是非常困难的。
这是我的物理代码,使用 requestAnimationFrame 执行:
var a = [0, 0];
// p is in the format [x, y, radius, density]
planets.forEach(function (p) {
var d = Math.sqrt((p[0] - ball.coor[0]) ** 2 + (p[1] - ball.coor[1]) ** 2);
var m = p[3] * 4 / 3 * Math.PI * p[2] ** 3;
var f = G * m / d ** 2;
var angle = Math.atan2(p[1] - ball.coor[1], p[0] - ball.coor[0]);
a[0] += f * Math.cos(angle);
a[1] += f * Math.sin(angle);
if (d < p[2] + ball.radius) {
var impulse = [0, 0];
// What to do here?
// This is the closest I got:
var velocitya = Math.atan(b.v[1] / b.v[0]);
var trianglea = Math.abs(velocitya - angle);
var currV = Math.sqrt(b.v[0] ** 2 + b.v[1] ** 2);
var newV = currV * bounciness;
var newa = (Math.PI / 2 - trianglea) * 2 + velocitya;
b.v[0] = newV * Math.cos(newa);
b.v[1] = newV * Math.sin(newa);
// Somehow I just can't get it right.
// It's the JavaScript, not the math concepts.
}
});
ball.v[0] += a[0];
ball.v[1] += a[1];
ball.coor[0] += ball.v[0];
ball.coor[1] += ball.v[1];
ball
只是高尔夫球的对象。
我尝试了各种方法,但我就是无法让碰撞正常工作。似乎处理方向和 Angular 让我感到悲伤。我做了很多研究,但我发现似乎没有任何东西可以正确解决我的问题。
这是我的问题:如何使用普通 JavaScript 计算脉冲?
注意:行星不会移动,弹跳力应该是一个变量。
最佳答案
这样的东西可以工作吗? (仔细检查语法错误)
var a = [0, 0];
// p is in the format [x, y, radius, density]
planets.forEach(function (p) {
var d = Math.sqrt((p[0] - ball.coor[0]) ** 2 + (p[1] - ball.coor[1]) ** 2);
var r = [0, 0]; //radial vector of length one from ball's center to planet's center
r[0] = (p[0] - ball.coor[0]) / d; // this is the same as cos(angle)
r[1] = (p[1] - ball.coor[1]) / d; // this is the same as sin(angle)
// I removed your implementation, it was using redundant expensive calculations
var m = p[3] * 4 / 3 * Math.PI * p[2] ** 3;
var f = G * m / d ** 2;
a[0] = a[0] + f * r[0];
a[1] = a[1] + f * r[1];
if (d < p[2] + ball.radius) {
var dot_v_r = ball.v[0] * r[0] + ball.v[1] * r[1];
ball.v[0] = bounciness * (ball.v[0] - 2 * dot_v_r * r[0]);
ball.v[1] = bounciness * (ball.v[1] - 2 * dot_v_r * r[1]);
// this is complete elastic reflection of the ball, leaving the planet stationary
// then velocity's magnitude (but not direction) is corrected with bounciness
}
});
ball.v[0] = ball.v[0] + time_step * a[0];
ball.v[1] = ball.v[1] + time_step * a[1];
ball.coor[0] = ball.coor[0] + time_step * ball.v[0];
ball.coor[1] = ball.coor[1] + time_step * ball.v[1];
//time_step is a time step, i.e. how frequently you want to update ball's position and velocity
//you can choose a value that makes the update of frames appropriate.
关于Javascript:球体碰撞和产生的脉冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56695332/
如果之前已经回答过这个问题,我深表歉意,但我无法找到我想要的东西。 我有一个 Box2D 动态主体,我对其应用线性脉冲以将其变成射弹。因此,当我单击屏幕上的任意位置时,我希望 body 投影到触摸位置
脉冲神经网络和循环神经网络都可以对时变信息进行建模。但我不确定哪种模型相对于计算成本更好。使用更复杂的脉冲神经网络是否值得,或者循环神经网络是否可以在所需计算量少得多的情况下工作?脉冲网络收敛得更快吗
如何在我的应用程序运行且屏幕打开时使 LED 或轨迹球闪烁或闪烁?比如接到电话时? 谢谢 最佳答案 Android 具有仅在屏幕关闭时 LED 才会亮起的硬编码功能。这是在源代码 Notificati
我的目标是从健身手环获取数据(脉搏)Torntisc T1使用我的应用程序并独立处理来自手环的数据。 为了实现,我使用了 Xamarin 并找到了一个 Bluetooth LE plugin for
我很难理解 Wait()、Pulse()、PulseAll()。他们都能避免僵局吗?如果您解释一下如何使用它们,我将不胜感激? 最佳答案 简短版: lock(obj) {...} 是 Monitor.
我在 Cigarette Smoker Problem 工作. 我只应该使用 Monitor 类。没有信号/信号量。 (是的,这是给学校的,但不是家庭作业,只是我的实践测试的免费练习,我真的需要做好准
我想使用 bcm2835.h 和纯 C 语言通过 PWM 控制 LED 二极管。我的代码不起作用。我错过了什么? 我尝试过“gpio”控制台命令,它工作正常,所以我知道 LED 已连接到正确的端口。我
在 ARKit/SceneKit 中,当用户点击按钮时,我想对我的节点施加一个脉冲。我希望冲动来自当前用户的角度。这意味着节点将远离用户的视角。多亏了这段代码,我能够获得当前的方向/方向: func
我正试图在 SK/SWIFT 中“脉冲”一个 Sprite 。我尝试使用 For 循环和 .setScale 进行粗略尝试,但它们不起作用(没有错误 - 只是没有动画)。我觉得使用 SKActions
我想为以下绘图符号设置动画(脉冲、发光)。实现所需行为的最佳方法是什么。谢谢 最佳答案 您不能为绘图符号设置动画。您可以做的是在突出显示的点上放置一个绘图空间注释。创建一个自定义的 CPTLayer
在 Perl 下,在 Linux 上将 Serial::Device 作为文件打开会重置我的 Arduino,但我不希望它被重置。 Arduino 可以通过脉冲 DTR 来重置,因此默认打开串口设备必
我用 alsa 成功渲染了音频,但是我完全无法确定 channel 映射。正如各种消息来源所说,我调用 snd_pcm_get_chmap设置好硬件和软件参数并准备好设备后。 snd_config_g
我是一名优秀的程序员,十分优秀!