• 締切済み

C言語の課題

C言語の問題で、 ある瞬間,二次元平面上に点P(1.0,1.0)があり,一秒あたりの速度ベクトルv(1.0,-2.0)で等速で移動していたとする.ある瞬間から,その一秒後までの間に,点Pは,直線y=(1/3)xに衝突し,反射したとする.衝突時の時間と座標,一秒後の点Pの位置を算出するプログラムを作りなさい. 物理的な条件はいろいろ無視,完全弾性衝突と みなしてよい.(重力も無視) (つまり、点Pが直線y=(1/3)xの壁に衝突したときに点Pが反射するという意味です) という宿題が出されたのですが、どのような数式で一秒後の点Pの位置を算出すれば良いか分かりません。 どのような数式や処理などを使えば良いか教えてください。(数学のベクトルや物理がかなり苦手なのでこの問題で用いる式が想起できなくて申し訳ないです。) とりあえずソースコード #include <stdio.h> int main(void) { float=p,v; p=(1.0,1.0); //点P v=(1.0,-2.0); //速度ベクトル printf("1秒後の位置は点pは); return 0; }

みんなの回答

  • f272
  • ベストアンサー率46% (8046/17196)
回答No.1

とりあえずこんなの http://www5f.biglobe.ne.jp/~kenmo/program/buturi5/buturi5.html は理解できる? それと、C言語自体ももう少しちゃんと理解しようね。

makorin0727
質問者

補足

図では理解できるのですが、具体的にどのような式を使ってプログラムを作成するのかが分かりません。 C言語の理解度不足で申し訳ありません・・・(というよりも苦手であるので・・・) 分かりやすく解説お願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語の課題

    何度も申し訳ありません http://okwave.jp/qa/q7877142.html より、回答を受けてプログラムを作成したのですが、 衝突時の時間と座標をどのように作成すれば良いか分からなく、 一秒後の点Pの位置を算出したのですが、合っているかどうかが分かりません。 非常に難しくで困っています。お助け下さい。 ソースコード #include <stdio.h> #include<math.h> int main(void) { float p,v,vx,vy,x,y,x1,y1,katamuki,gyaku,seiki_x,seiki_y,n,touei_x,touei_y,idoux,idouy,px,py; /* p=(x,y); v=(vx,vy); */ x=1.0; y=1.0; vx=1.0; //x方向の速さ vy=-2.0; //y方向の速さ y1=-x; //逆数 x1=-y; //逆数 printf("逆数は(x1,y1)=(%f,%f)\n",x1,y1); seiki_x=x1/(sqrt(x1*x1+y1*y1)); seiki_y=y1/(sqrt(x1*x1+y1*y1)); printf("正規化、(x方向,y方向)=(%f,%f)\n",seiki_x,seiki_y); n=-(vx*seiki_x)+(vy*seiki_y); //nは内積 touei_x=n*seiki_x; //touei_xは投影x軸 touei_y=n*seiki_y; //touei_yは投影y軸 printf("投影ベクトル(x,y)=(%f,%f)\n",touei_x,touei_y); idoux=vx+2*touei_x; //衝突後、点Pのxの移動方向 idouy=vy+2*touei_y; //衝突後、点Pのyの移動方向 px=-idoux; //点Pのx座標 py=-idouy; //点Pのy座標 printf("1秒後の位置は点P(x,y)=(%f,%f)",px,py); return 0; } /* 逆数は(x1,y1)=(-1.000000,-1.000000) 正規化、(x方向,y方向)=(-0.707107,-0.707107) 投影ベクトル(x,y)=(-1.500000,-1.500000) 1秒後の位置は点P(x,y)=(2.000000,5.000000) */

  • C言語の課題について

    何度も申し訳ありません。 http://okwave.jp/qa/q7877142.html や http://okwave.jp/qa/q7878947.html より、回答を受けてプログラムを作成しているのですが、 衝突時の時間と座標をどのように作成すれば良いか分からなく、 一秒後の点Pの位置を算出したのですが、合っているかどうかが分かりません。 非常に難しくて困っています。お助け下さい。 ソースコード #include <stdio.h> #include<math.h> int main(void) { float p,v,vx,vy,x,y,x1,y1,katamuki,gyaku,seiki_x,seiki_y,n,touei_x,touei_y,idoux,idouy,px,py; x=1.0; y=1.0; vx=1.0; //x方向の速さ vy=-2.0; //y方向の速さ y1=(1/y); //逆数 x1=(1/x); //逆数 seiki_x=x1/(sqrt(x1*x1+y1*y1)); seiki_y=y1/(sqrt(x1*x1+y1*y1)); n=-(vx*seiki_x)+(vy*seiki_y); //nは内積 touei_x=n*seiki_x; //touei_xは投影x軸 touei_y=n*seiki_y; //touei_yは投影y軸 idoux=vx+2*touei_x; //衝突後、点Pのxの移動方向 idouy=vy+2*touei_y; //衝突後、点Pのyの移動方向 px=-idoux; //点Pのx座標 py=-idouy; //点Pのy座標 printf("1秒後の位置は点P(x,y)=(%f,%f)",px,py); return 0; } 出力結果 1秒後の位置は点P(x,y)=(2.000000,5.000000) 何かおかしなところがあれば追加や修正等をしてくれれば幸いです。

  • 筑波大数学過去問:y=xに衝突直後の速度ベクトル

    物理をとっていないのか、速度に関するこの問題をどこから手をつけていいのか、どの公式を使うのかサッパリわかりません。本当に虫のいい話ですが、誰か解説してもらえないでしょうか。それを1行1行追っかけて理解していくつもりですから、どうかよろしくお願いします。何でも53年(古過ぎっ!)筑波大入試みたいです。 [問題] xy-平面上で、原点から初速度ベクトル(u_0,v_0)で出発した動点Pが直線y=xと1度衝突した後原点に戻って来たとする。Pが直線y=xに衝突した直後の速度ベクトルを(u_1,v_1)とする。Pが原点を出発して直線y=xと衝突するまでの、t秒後の速度ベクトルは(u_0,v_0-ct)で、衝突してからt秒後の速度ベクトルは(u_1,v_1-ct)である。ただし、0<u_0<v_0とし、またcは正の定数とする。Pが直線y=xに衝突する直前の速度ベクトルと、衝突した直後の速度ベクトルとは直線y=xに関して対称であるとする。 (1) (u_0,v_0) と (u_1,v_1) との関係を求めよ。 (2) u_0/v_0 の値を求めよ。

  • 球の二次元衝突のアルゴリズム?

    ボールとボールが衝突したときの反射のさせ方がわかりません!! 自分では一応、「衝突したとき、互いのボールの速度ベクトルを交換させる」をやってみたのですが これだと明らかに物理的に変な動きをする時があったので、今度は「線形変換(?)を使って速度ベクトルいじって元に戻す」みたいなことをやってみたのですが、今度は若干物理的な動きになってきたと思いきや、 止まったボールに衝突したら互いに動きが止まったり、段々と速くなっていったり、ボールがボールをすり抜けたりする場合があったりして、もうお手上げです… ごく一般的なボールの衝突のアルゴリズムというか反射ベクトルの簡単な計算の仕方、または便利なクラス・メソッドなど教えていただけませんか お願いします。。。

    • ベストアンサー
    • Java
  • 光速で接近する物体の見え方

    ≪前提≫ 実際には存在しませんが、光速で移動できる宇宙船があるとします。 そしてその宇宙船は、地球から100万km離れた位置でも肉眼で確認できるものとします。 また、光速度は秒速30万kmとします。 ≪概要≫ A. 地球にいる観測者(画像の4)から90万km離れた位置(画像の1)に、宇宙船がワープして突然現れます B. そこから観測者に向かって光速で接近します C. 3秒後に観測者と接触します ≪疑問≫ ア. 宇宙船が現れてから3秒後、観測者は「90万km先に突然現れたことを見るのと同時に、その宇宙船が自分の衝突する」ということになるのでしょうか。 イ. その場合、自分に衝突した宇宙船は見えていないのでしょうか。 ウ. それとも、現れた瞬間と1秒後と2秒後と3秒後の映像が、衝突と同時に見えるのでしょうか。 物理も数学も学んでこなかったので、できましたら数式などを使わず、感覚的にご回答頂けますでしょうか。 宜しくお願いします。

  • 2点(1 1 0)(-2 0 1)を通る直線の方程式を求めよ

     これはこの2点をP1、P2とし、求める直線の位置ベクトルをPとした場合、線分P1P2の延長線上、もしくは線分P1P2上にPを置き、ベクトルP1P=tP1P2として計算するとx-1/-y=-1/y-1=zになります。  では、ベクトルの長さは立てるに影響しないので、P1P2=tP1Pでもいいはずです。 ただし、当然肝心の答えが変わってしまいます。 この場合分母が0になってしまうので避けた方がいいでしょうか? ただ、考え方は正しいですか?

  • 線形代数学の問題です。

    原点Oを通り、ベクトルaと平行な直線をlとする。直線lに関して点Pと対称な点をQとするとき、Qの位置ベクトルq=OQをPの位置ベクトルp=OPとaを用いて表せ。 解説を交えて解いていただきたいです。よろしくお願いします。

  • 幾何ベクトルの法線と垂線に関する定義が理解できません。

    幾何ベクトルの法線と垂線に関する定義が理解できません。 どなたか、教えてください。 点P1(x1,y1)と直線、l:ax+by+c=0を想定する時、P1からlへの垂線の足をP0(x0,y0)と置きます。 直線lの定義により、直線lの法線ベクトルnは(a,b)と置けます。 参考書によると、この時n・p0+c=0とのことですが、ここが理解できません。 法線ベクトルとp0の内積とcがどのような関係性があるのでしょうか。 (例えば、直線lと法線ベクトルの内積が0である、ということなら理解できます。しかし、直線l上のベクトルをどのように式に表せばよいかがわかっていません。例えば、直線上に点P2をおき、(x2,y2)とすると、x2は式lを満たし、かつP2-P0とnの内積が0である、という表現しか思いつきません。) どなたか、解説をお願いいたします。

  • C++でのブロック崩しゲームの作成に関して

    初めまして。C++で動くブロック崩しを作成していますがそれに関して2つ質問させて頂きます。 (1)オブジェクト指向によるブロック、パドルでのクラス宣言 オブジェクト指向に基づきプログラミングをしており、パドル、ブロック、ボールといった物体をクラス定義しそれらをゲームクラスで統括する方法をとっています。また、他クラスのインスタンスやメソッドはgetter/setter関数で取得し、その際に参照するクラスの宣言は"const Ball& ball"の様に行っています。 他クラスを参照する必要のある場合は、例えばBlockクラス内でBallとの衝突判定や衝突応答を行いたい時に宣言を行っています。衝突判定ならばBoolean型を返すだけなのでconstで宣言出来るのですが、衝突応答ではボールを反射させる(ボールの速度を変化させる)必要があるためconstで宣言出来ません。 現在は"Ball& ball"と宣言をしていますが、これでは他クラス内でインスタンスの値を変更できてしまうため行儀が良いとは思えません。言っている事が矛盾しているとは思いますが、何とか"const Ball& ball"で宣言しつつBlockクラス内でボールの速度を変化させる方法は無いでしょうか? (2)ブロックとボールの衝突応答 ブロックとボールの衝突応答について、以下の様に記述しています。 void Block::reflect(Ball& ball){ Vector ballnext; ballnext.x=ball.getx()+ball.getVx(),ballnext.y=ball.gety()+ball.getVy(); if(fabsf(ballnext.x-this->x) <= this->width/2 && fabsf(ball.getx()-this->x) >= this->width/2){ ball.setVx(-ball.getVx()); } else if(fabsf(ballnext.y-this->y) <= this->height/2 && fabsf(ball.gety()-this->y) >= this->height/2){ ball.setVy(-ball.getVy()); } } この関数より前にブロック内にボールが含まれるかどうかの衝突判定を行っています。この関数では、数秒先のボールの位置がブロック内に含まれており、現在のボールの位置が含まれていない場合のそれぞれの位置関係で反射方向を決めています。 ですがこれでは上手く反射されません。ボールがブロックに接触し暫く突き進んだ後に反射されます。 しかし、 ballnext.x=ball.getx()+ball.getVx()*2,ballnext.y=ball.gety()+ball.getVy()*4; の様に記述すると上手く反射されます。何故こうなるのかが理解出来ません。 長文になってしまい申し訳ありませんが、どなたかご教授して頂けたら幸いでございます。

  • ベジェ曲線について

    3次ベジェ曲線において 4つの制御点がp1ベクトル(0,0),p1ベクトル(1,1),p1ベクトル(1,2),p1ベクトル(0,3)であるとき、t=2/3の三次ベジェ曲線上の点の位置pベクトル(2/3)を計算により求めるとx座標とy座標の値は何になりますか? 分かる人いたら教えてください。 (1-t)^3+3t(1-t)^2+3t^2*(1-t)+t^3に2/3を代入して(2/3,2)ではダメなんでしょうか? また制御点を結ぶ直線の中点から曲線を2本のベジェ曲線に分割する作成図を利用して、この三次ベジェ曲線のおおよその形状をしるのはどうしたらいいのでしょうか??