• 締切済み

Cによる ベクトル計算

kmb01の回答

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.3

4角形2つの交差ということなら、 四角形Vの辺のいずれかが、 平面Bと交差し、なおかつ交差点が四角形B内 ならば4角形同士が交差しています。

akagenoanfan
質問者

補足

交差点が四角形B内であるというのは どうやって しれべればいいのでしょうか・・・ すみません 数学の話ですが お願いします。

関連するQ&A

  • 3d 法線ベクトル計算 

    3dのポリゴンの法線ベクトルを算出するプログラムなんですが 以下のプログラムに間違っている部分はあるでしょうか 何度か試してみたのですが何度か0で除算したりしてしまいます 渡す数字が悪いのか、プログラム自体が間違っているのかわかりません 少し助けてください //法線ベクトル計算開始 x1=1つめの頂点のx座標 y1=1つめの頂点のy座標 z1=1つめの頂点のz座標 x2=2つめの頂点のx座標 y2=2つめの頂点のy座標 z2=2つめの頂点のz座標 x3=3つめの頂点のx座標 y3=3つめの頂点のy座標 z3=3つめの頂点のz座標 x4=x2-x1 y4=y2-y1 z4=z2-z1 x5=x3-x1 y5=y3-y1 z5=z3-z1 x6=y4*z5-y5*z4 y6=x4*z5-x5*z4 z6=x4*y5-x5*y4 //正規化 er=sqrt(x6*x6+y6*y6+z6*z6) x6=er*x6 y6=er*y6 z6=er*z6 //終わり /法線ベクトル計算

  • 単位法線ベクトルの求め方

    曲面z=x^2+y^2の点(1,0,1)における単位法線ベクトルを求めよ という問題で、答えが分からず困っています。 1. φ=x^2+y^2-z=0 gradφ=(2x,2y,-1) (1,0,1)での勾配は、(1,0,1)を代入してgradφ=(2,0,-1) この単位ベクトルを求めて、(2,0,-1)*5^(-1/2) 2. 求める値は {(∂φ/∂x)×(∂φ/∂y)}/{l(∂φ/∂x)×(∂φ/∂y)l}に(1,0,1)を代入すればよいので (-2x,-2y,1)/(4x^2+4y^2+1)^(-1/2)に(1,0,1)を代入すればよい よって、(-2,0,1)*5^(-1/2) どちらの答えがあっているのでしょうか? 出てきた値の符号が違うので........

  • ベクトル

    ベクトルa↑=(4,0),b↑=(√3,√5)について、 v↑=(cosθ)a↑+(sinθ)b↑ (ただし、0≦θ<2π) とおくとき、v↑の大きさの最大値、最小値、 またそのときのθの値を求めよ。 という問題が全くわかりません… a↑とb↑の値を代入して成分で計算したり するのかなあと思ったんですが; どなたか教えてください><

  • vector間における効率的な値の比較

    2つのベクターに入ったdoubleの網羅的な比較を行う関数をC++で書こうとしています。 (VC++ 2008) doubleのベクター vctr_1 , vctr_2 があるとします。 vctr_1 には (100.0, 200.5 , 300.1 , 400.0 ) vctr_2 には(50.0 , 70.2, 100.1, 220.0 , 300.0 ) というdouble の値が入っていて vctr_1の値のうち、vctr_2に近い値(誤差0.2以内)が見つかるものを.新しいベクターとして返すという処理を考えています。 この場合 100 : 100.1 と300.1: 300.0 が 誤差 0.2 未満で近い値といえ、100 と300.1が格納されたベクターを返す、という処理です。 私の考えた方法はベクターaの各要素に対してベクターbの各要素をループで比較する、というものでした。 以下コード ---------------------------- //比較を行う関数。ベクター1、2 要素の比較をし誤差内の数値をベクター1からとりだし、別のベクターとして返す。 vector<double> compare_doubles_with_tol(vector<double> v1,vector<double> v2 , double tol ){ //似た値を格納するベクター vector<double> v_match; //ベクター1に関してループ vector<double>::iterator it1 = v1.begin(); while( it1 != v1.end() ){ //ベクター2に関してループ vector<double>::iterator it2 = v2.begin(); while( it2 != v2.end() ){ //誤差内の値を見つける if( fabs(*it1 - *it2) < tol ){ v_match.push_back(*it1); } ++it2; } ++it1; } return v_match; } int main() { //ベクター1 std::vector<double> vctr_1; vctr_1.push_back(100.0); vctr_1.push_back(200.5); vctr_1.push_back(300.1); vctr_1.push_back(400.0); //ベクター2 std::vector<double> vctr_2; vctr_2.push_back(50.0); vctr_2.push_back(70.2); vctr_2.push_back(100.1); vctr_2.push_back(220.0); vctr_2.push_back(300.0); //誤差0.2内で似た値があるものを新たなベクターとして得る。 vector<double> matched = compare_doubles_with_tol(vctr_1,vctr_2,0.2); for (int i = 0 ; i < matched.size() ; ++i){ cout << matched[i]<<endl; } return 0; } ------------------------- このコードで望んだ結果は得られますがループの繰り返しを行っていて処理が遅くなってしまいます。実際の仕事ではベクターの要素数が100前後のものを非常に数多く処理しなければならず、このままでは処理時間が膨大なものになってしまいそうです。 このような場合どのような処理、コードを作成すれば処理速度の向上が望めるでしょうか。

  • ベクトルの証明がわかりません

    この図においてODベクトルをxベクトル、OEベクトルをyベクトル、OFベクトルをzベクトルとおきます。(1)OA'ベクトルOB'ベクトルOC'ベクトルをxベクトル、yベクトル、zベクトルで表しなさい (2)A'B'ベクトルの二乗=(OB'ベクトル-OA'ベクトル,OB'ベクトル-OA'ベクトル)に(1)の結果を代入し、A'B'ベクトル=B'C'ベクトル=C'A'ベクトルを証明しA'B'C'が正三角形であることを証明しなさい (3)(OAベクトル,OBベクトル)、(OBベクト,OCベクトル)、(OCベクトル,OAベクトル)を計算してcos∠AOB 、cos∠BOC、cos∠COAの値から∠AOB、∠BOC、∠COAを求めなさい 一生懸命考えたのですが、どうしてもわからないので、解いてほしいです。よろしくお願いします。

  • 数学 ベクトル

    数学 ベクトル 任意の3次元ベクトル場Aにおいて(∇×A)・Aの値を求めよ ベクトル場X=(xi+yj+zk)/(x^2+y^2+z^2)^(3/2) このベクトル場の発散と回転を計算せよ これらの問題の解き方を教えてください。

  • 方向ベクトル

    x+1=(y-1)/a=z (1) -x+1=y+b=(z-1)/2 (2) を方向ベクトルに直すと u=(1,a,1) v=(-1,1,2) ですが、それがわかりません。 >(x-a)/p=(y-b)/q=(z-c)/r をみくらべたのですがよくわかりません。 おしえてください

  • 数学(ベクトルの交点について求める問題)

    三次元空間中にある重ならない二点A(x1,y1,z1)とB(x2.y2,z2)があって、Aを通り、方向ベクトルV1=(a1,b1,c1)である直線Y1とBを通り、方向ベクトルV2=(a2,b2,c2)である直線Y2が,とある一点C(x,y,z)で交わる。A,B,V1,V2が分かっているとき、点Cを求めなさい。という問題についてですが、 以下のような考え方(説明は下手ですが)で合っているのでしょうか? ベクトル方程式より xについて x1+ta1=x2+ua2 yについて y1+tb1=y2+ub2 zについて z1+tc1=z2+uc2 という考え方です。 間違っていれば指摘して頂ければ幸いです。 また、ここから交点Cについてどのように求めればよいのでしょうか?

  • 数値の多い順に別々の処理をする場合

    例えば $a = int rand(100); $b = int rand(100); $c = int rand(100); $d = int rand(100); $e = int rand(100); $f = int rand(100); $z = 5; $y = 10; という風にして、$aの数値が一番多い時は「$z + $y」を、$bの数値が一番多い時は「$z - $y」を、と数値を多い順に変数の数だけ別々の処理をしたいときはどうすれば良いのでしょうか? 数日前から気になっていて、初心者なもんでif文やwhile文で地道に長いプログラムしか答えが思いつきません>_< 短くする方法などありましたらどなたか教えてくださいm(_ _)m

    • ベストアンサー
    • Perl
  • 体心立方格子の逆ベクトルの最短

    G=v1b1+v2b2+v3b3=(2π/a)[(v2+v3)x+(v1+v3)y+(v1+v2)z] v1が1でそれ以外が0 v1が-1でそれ以外が0 v2が1でそれ以外が0 と計算していくと (2π/a)(y+z) (2π/a)(-y-z)… のように表すことができますがキッテルの個体物理学によると (2π/a)(y-z)や(2π/a)(-y+z)のような場合も正しいと書いてあります この理由を教えて下さい 注vはスカラー bは逆格子の基本並進ベクトル Gは逆格子ベクトル x,y,zは単位ベクトル aは陵の長さです