[英]Porting C++ code to Java
我在C ++中具有以下方法:
void sphereCollisionResponse(Sphere *a, Sphere *b)
{
Vector3 U1x,U1y,U2x,U2y,V1x,V1y,V2x,V2y;
float m1, m2, x1, x2;
Vector3 v1temp, v1, v2, v1x, v2x, v1y, v2y, x(a->pos - b->pos);
x.normalize();
v1 = a->vel;
x1 = x.dot(v1);
v1x = x * x1;
v1y = v1 - v1x;
m1 = a->mass;
x = x*-1;
v2 = b->vel;
x2 = x.dot(v2);
v2x = x * x2;
v2y = v2 - v2x;
m2 = b->mass;
a->vel = Vector3( v1x*(m1-m2)/(m1+m2) + v2x*(2*m2)/(m1+m2) + v1y );
}
關於球體物體的碰撞響應。 我想將其移植到Java,所以我從這里使用Vector2D類: http : //goo.gl/I4R4Y並將此代碼放入Java中:
private void sphereCollisionResponse(Sphere a, Sphere b) {
double m1, m2, x1, x2;
Vector2D v1, v2, v1x, v2x, v1y, v2y;
Vector2D x = new Vector2D(a.getPos().subtract(b.getPos()));
x.normalize();
v1 = a.getVelocity();
x1 = x.dot(v1);
v1x = x.multiply(x1);
v1y = v1.subtract(v1x);
m1 = a.getMass();
x = x.multiply(-1);
v2 = b.getVelocity();
x2 = x.dot(v2);
v2x = x.multiply(x2);
v2y = v2.subtract(v2x);
m2 = b.getMass();
Vector2D av = ((v1x.multiply(m1-m2)).divide(m1+m2).add((v2x.multiply(2*m2)).divide(m1+m2))).add(v1y);
a.setVelocity(av);
}
但是事實證明,當球體碰撞時,我將速度更改為的球體從屏幕上消失了。 因此,我可能無法移植代碼。 會使用兩種語言的人都可以檢查移植的代碼並告訴我是否有問題嗎?
謝謝
我對Java不太滿意,但從我的Java基本知識來看,您引用的代碼似乎還可以。
問題可能出在最后的任務上:
Vector2D av = ((v1x.multiply(m1-m2)).divide(m1+m2).add((v2x.multiply(2*m2)).divide(m1+m2))).add(v1y);
也許最終的速度矢量av過大? 那可以解釋為什么球體從屏幕上消失了。 您可以調試它並檢查av的值,還是將其打印在某處?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.