2011-06-23 219 views
1

這可能是一個非常愚蠢的數學問題,但我似乎無法弄清楚。我所擁有的是在A點的一個圓圈,我可以點擊並從中拖拽鼠標。釋放鼠標時 - 釋放點B被認爲是目標點,球必須沿該方向移動。我現在正在做的是這樣的:速度計算算法

velocityX = (b.x - a.x)/somenumber 
velocityY = (b.y - a.y)/somenumber 

這允許我使用不同的「鏡頭」加快越遠鼠標從圓釋放。但現在我意識到,我不喜歡這個想法,而是我想這樣做以下方式:

  • 有一個最小和最大速度(每個動畫幀像素)
  • 從選擇速度此間隔拍攝前
  • 只使用點B來簡化定位。該出手速度被預選並should't取決於鼠標多遠發佈

我知道它應該是死的簡單,但我怎麼(知道點A和B的座標,最小值,最大值和選定的速度)考慮到鏡頭的方向,將x和y速度設置爲圓圈?

回答

1

只需將從圓心到點的矢量標準化,然後乘以所需的速度即可。在任何好的矢量庫中都有這樣的功能,但只是爲了闡明:

length=square_root((b.x - a.x)^2+(b.y - a.y)^2) 
velocityX = (b.x - a.x)/length * speed 
velocityY = (b.y - a.y)/length * speed 
+0

非常感謝你 - 作品像魅力! – Marius

2

我可以想到兩種方法來做到這一點。

允許從A到B說的角度爲T.然後:

T等於ATAN((由-AY)/(BX-AX))

知道T優可以計算在x和y速度:

Vx的= COS(T)V VY = SIN(T)V

這應該工作。

爲了讓事情更快,您可以直接計算cos(T)和sin(T)。 sin(T)給出比例y/h,其中h是a與b之間的直線長度。

我們可以利用勾股定理計算H:

H = SQRT((由-AY)^ 2 +(BX-AX)^ 2)

從這我們可以推導出公式Vx和VY

Vx的= V *(BX-AX)/ SQRT((由-AY)^ 2 +(BX-AX)^ 2)

VY = V *(BX-AX)/ SQRT(( by-ay)^ 2 +(bx-ax)^ 2)

這可能會更快,partic如果你有一個內置的畢達哥拉斯定理函數。

+0

謝謝你的解釋 – Marius