0

经过一段时间的搜索,我修改了我的问题。

我发现了很多球对球碰撞的例子,但似乎唯一有效的例子是使用 Vector2d 或 Vector2D。

这是一个问题,因为我只被允许使用常规的 java 库,所以我的主要问题是:如何转换示例(我将在下面发布)以使用我可以使用的?

我有几个变量,两个球的质量相同,速度分为不同的变量 x 和 y。我也可以访问他们的 x 和 y 位置。

这是我的应用程序中剩下的唯一问题。

我完全不知道如何转换下面的例子。

// get the mtd
Vector2d delta = (position.subtract(ball.position));
float d = delta.getLength();
// minimum translation distance to push balls apart after intersecting
Vector2d mtd = delta.multiply(((getRadius() + ball.getRadius())-d)/d); 


// resolve intersection --
// inverse mass quantities
float im1 = 1 / getMass(); 
float im2 = 1 / ball.getMass();

// push-pull them apart based off their mass
position = position.add(mtd.multiply(im1 / (im1 + im2)));
ball.position = ball.position.subtract(mtd.multiply(im2 / (im1 + im2)));

// impact speed
Vector2d v = (this.velocity.subtract(ball.velocity));
float vn = v.dot(mtd.normalize());

// sphere intersecting but moving away from each other already
if (vn > 0.0f) return;

// collision impulse
float i = (-(1.0f + Constants.restitution) * vn) / (im1 + im2);
Vector2d impulse = mtd.multiply(i);

// change in momentum
this.velocity = this.velocity.add(impulse.multiply(im1));
ball.velocity = ball.velocity.subtract(impulse.multiply(im2));

这是问题的网址:

http://stackoverflow.com/questions/345838/ball-to-ball-collision-detection-and-handling

我看过他的源代码。

感谢您花时间阅读此问题。

成功!

我已经找到了如何使用 Vector2d,而且效果很好!稍后将编辑答案!

4

1 回答 1

0

我正在 c# 中实现我自己的 3d 引擎,该引擎基于 JavaScript 中一个非常基本的 3d 开源引擎,称为 a3。我不知道我是否 100% 理解你,但听起来你只能找到 Vector2d 的例子,但你不能使用那个类?

我就是这种情况,您可以想象 javascript 没有本机 Vector2d 类型,因此必须有人实现。不要害怕尝试,只是几个高中数学函数,你应该可以在几分钟内实现自己的 Vector2d 类

以下链接包含在 javascript 中的 vector2d、vector3d、vector4d、matrix3 和 matrix4 的实现: https ://github.com/paullewis/a3/tree/master/src/js/core/math希望对您有所帮助:)

于 2013-05-15T00:50:27.540 回答