我已經定義了具有其位置拋射使得:
a.x = initialX + initialDX * time;
a.y = initialY + initialDY * time + 0.5 * gravtiy * time^2;
我希望能夠預測哪些障礙在我的環境中,這個彈丸會與之相撞。我計劃檢查距離曲線上最近的點A到點P的距離。
我圖在點甲的切線曲線將垂直於矢量AP,並且所述切向曲線在甲將簡單地是速度的拋射物的V在那時候。
AP點V = 0
ap.x = initialX + initialDX * time - p.x;
ap.y = initialY + initialDY * time + gravity * time^2 - p.y;
v.x = initialDX;
v.y = initialDY + gravity * time;
=>
AP點V =
(0.5 * gravity^2) * t^3 +
(1.5 * gravity * initialDY ) * t^2 +
(initialDX^2 + initialDY^2 + gravity * (initialY - p.y)) * t +
(initialDX * (initialX - p.x) + initialDY * (initialY - p.y))
在這裏,我可以看到,這是一個三次函數。我花了一些時間在網上進行研究,發現有一個通用的方程式,似乎可以用於查找根源的某些值。
這是我試圖實現的過程。 http://www.sosmath.com/algebra/factor/fac11/fac11.html
a = 0.5 * gravity^2;
b = 1.5 * gravity * initialDY;
c = initialDX^2 + initialDY^2 + gravity * (initialY - p.y);
d = initialDX * (initialX - p.x) + initialDY * (initialY - p.y);
A = (c - (b * b)/(3 * a))/a;
B = -(d + (2 * b * b * b)/(27 * a * a) - (b * c)/(3 * a))/a;
workingC = -Math.pow(A, 3)/27;
u = (-B + Math.sqrt(B * B - 4 * workingC))/2; // Quadratic formula
s = Math.pow(u + B, 1/3);
t = Math.pow(u, 1/3);
y = s - t;
x = y - b/(3 * a);
當我插上X回到我原來的方程曲線的時候,這應該給我一個。這似乎對某些值很好,但是當p.y高於某個值時,我沒有積極的在二次方程中取平方根。
我對數學知之甚少,無法理解爲何會發生這種情況,或者我能做些什麼來解決這個問題。
對此的任何幫助將不勝感激。
UPDATE:
我已經調整好自己的算法來處理複雜的根源,但我仍然有麻煩。 這是我現在做的,如果判別爲負:
a = 0.5 * gravity^2;
b = 1.5 * gravity * initialDY;
c = initialDX^2 + initialDY^2 + gravity * (initialY - p.y);
d = initialDX * (initialX - p.x) + initialDY * (initialY - p.y);
A = (c - (b * b)/(3 * a))/a;
B = -(d + (2 * b * b * b)/(27 * a * a) - (b * c)/(3 * a))/a;
workingC = -Math.pow(A, 3)/27;
discriminant = B * B - 4 * workingC;
then if discriminant < 0;
uc = new ComplexNumber(-B/2, Math.sqrt(-discriminant)/2);
tc = uc.cubeRoot();
uc.a += B;
sc = uc.cubeRoot();
yc = sc - tc;
yc.a -= b/(3 * a);
x = -d/(yc.a * yc.a + yc.b * yc.b);
出於某種原因,這仍是不給我我所期望的結果。在這裏有什麼突出的錯誤嗎?
請修復/澄清:您的公式有 「A」 和 「B」 在其中,而不是 「T」; – 2010-07-13 23:52:25
@Jason。固定。 – 2010-07-13 23:58:00
只是爲了澄清: 這意味着我應該檢查判別式,如果它是否定的,我從我的二次方中取出複數根。然後,我需要執行相同的計算來計算已命名爲s,t,y,x但使用複數的變量。 從那裏如果x仍然複雜,我用你提供的公式之一來找到真正的根? – 2010-07-14 01:37:13