在基於時間步的模擬中,從圓內(xa)^ 2 +中開始的點粒子p(x,y)與速度v(x,y) (yb)^ 2 = r ^,這個圓圈出現在兩個時間步長之間,這樣當檢測到碰撞時點粒子已經離開了圓。Collision Resolving - Point outside Circle
因此我想將粒子移回數量outsideDepth(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嘗試在Ian的溶液,代替圖2和3在1和rearange爲T,則確定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
上面的方程將給出位移矢量v1(x,y),例如對於某些t1(表示以(a,b)爲中心的圓上的點)。通過使用矢量加法(減法)來查找粒子點與圓上點之間的位移矢量。即diffv = p-v1。然後計算該向量的大小((x^2 + y^2)^ 1/2)。對另一個解決方案t2做同樣的事情。找到它們之間的位移矢量的最小量值,並且假設粒子更接近它離開圓的點(對於常速而言爲真)。這將定義出口點。 –
Thx,問題解決了。 – Ben