タイトル通りですが「二つの直線が平行かどうかを知るための関数isParallel();関数で まず外積をしてその結果のベクトルをどうやってif(ベクトル == 0.0){ }」すればいいか知りたいです。Length();と LengthSq();どちらを使えばいいのでしょうか?長さではないのでLengthSq();を使うと考えましたがその場合なぜこっちなのでしょうか?
※まだ関数自体が未完成なのでfloat型による誤差のif文はまだ実装してません。
参考サイトからお借りしました。
参考サイト: http://marupeke296.com/COL_3D_No0_Primitive.html
/*長さ*/ float Vector::Length() { return sqrtf( LengthSq() ); } float Vector::LengthSq() { return ((x * x) + (y * y) + (z * z)); } /*外積 ベクトル x ベクトル*/ Vector Vector::cross(Vector a, Vector b) { return Vector((a.y * b.z) - (a.z * b.y), (a.z * b.x) - (a.x * b.z), (a.x * b.y) - (a.y * b.x)); } /*平行かどうか判定*/ bool Vector::isParallel(Vector a, Vector b) { Vector r = cross(a,b); printf("a X bの外積: %.2f\n",r.LengthSq()); if(r.LengthSq() == 0) { return true; }else{ return false; } }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。