假設你在製作一款fps手遊,請基於如下**,回答下列問題。回答程式**問題時,實現語言不限。
struct vec
vec vecadd(const vec& a, const vec& b);
vec vecsub(const vec& a, const vec& b);
float vecdot(const vec& a, const vec& b);
vec veccross(const vec& a, const vec& b);
vec vecnormalize(const vec& a);
float veclength(const vec& a);
當玩家射擊時,如果子彈從ai角色身旁近身飛過,ai需要作出反應。請實現下列判斷函式,檢查子彈是否是在一定距離內(near_miss_distance),從ai身旁飛過。
const float near_miss_distance = 2;
bool isbulletnearmiss(const vec& aiposition, const vec& bulletoriginposition, const vec& bulletdirection);
設向量a = bulletdirection,向量b = aiposition - bulletoriginposition,此時向量a,b與過點aiposition作過直線a的垂線都在同一平面上。
通過三角函式公式可得distance = |a|sinθ,叉積公式a×b = |a||b|sinθ。
在這一平面上三角函式中的的|a|與空間上叉積公式中的|a|是相等的,因此distance = veccross(a, b) / veclength(a),然後檢查distance <= near_miss_distance
點到空間中面的距離
有些時候我們在看計算機一些書籍的時候經常會涉及到空間中點與面之間的關係,書中會突然出現一些公式,可能很多時候我們會忘了證明的方法。今天來談談點到空間中面的公式。下面先給出空間中面的表示公式 w是超平面的法向量,其維數不定。先假設我們有這樣乙個超平面,其法向量是n,現有一點m1,求m1到空間中面的距離...
計算空間點到直線的距離
利用向量的叉積計算空間點到直線的距離,eigen庫已經給我封裝好了只需按著要求呼叫就好了。舉個簡單的例子如下 已知空間直線的方向向量表示為 m,n,p 已知直線上一點座標為b x0,y0,z0 求解空間點a x,y,z b到直線的距離d 需要構建兩個向量 eigen vector4d vec1 m,...
點到直線距離求解
點到線距離求解演算法 解法一 向量法求解 1.當不知道直線公式,僅知道幾個點時 問題 比如a 1,2 b 2,3 c 0,2 求點a到bc距 向量bc 2,1 我們給它找乙個垂直向量,稱為法向量n 1,2 注意,這裡只要垂直就可以了,比如 3,6 也行,對結果無妨,但不能 0,0 取向量ab 1,1...