タイムステップベースのシミュレーションでは、円(xa)^ 2 +内側から開始した速度v(x、y)を持つ点パーティクルp(x、y) (yb)^ 2 = r ^は、その円が2つのタイムステップの間に発生し、衝突が検出されたときにポイントパーティクルがすでに円を離れるようになっています。衝突の解決 - 円の外側の点
したがって、正確に円の上にあるように、外の深さ(x、y)だけ粒子を戻したいと思います。
ここで、問題は次のとおりです。ポイントpと速度ベクトルと円との交点の距離lはどのようにして求めることができますか?コードで
:イアンのソリューションで
Vector2 circleCollision(double a, double b, double r, double x, double y){
double s = sqrt(pow((x-a),2) + pow((y-b),2));
if (s>r) {
Vector2 outsideDepth = {0,0};
// determine depth by which point lies outside circle as vector (x,y)
return outsideDepth;
}
}
EDIT試行、tについて1とrearangeで2と3に置き換え、次のようにpとqを決定します
p = 1/(pow(v.x,2) + pow(v.y,2)) * (-2*x*v.x + 2*v.x*a - 2*y*v.y + 2*v.y*b);
q = 1/(pow(v.x,2) + pow(v.y,2)) * (-2*x*a -2*y*b + x*x + y*y + a*a + b*b - r*r);
root = sqrt(pow((p/2),2) - q);
t1 = -p/2 + root;
t2 = -p/2 - root;
// ???
あなたの解決策を試して質問を更新しました。最小限の詳細な説明方法を教えてください。 – Ben
上記の式は、いくつかのt1((a、b)を中心とする円上の点を表す)変位ベクトル、v1(x、y)を与えます。ベクトルの加算(減算)を使用して、粒子の点と円上の点との間の変位ベクトルを求めます。すなわちdiffv = p-v1である。そのベクトル((x^2 + y^2)^ 1/2)の大きさを計算します。他の解決策t2についても同じことを行う。それらの間の変位ベクトルの最小の大きさを見つけて、粒子が円から出た点に近いと仮定します(コンスタント速度の場合は真)。それは出口点を定義します。 –
Thx、問題は解決しました。 – Ben