ベクトルの大きさとなす角度
はじめまして。
情報工学科に所属する大学一年生です。
ロボカップに参加しているのですが、
その活動先の先輩から頂いた課題にチャレンジしてみました。
二点を端点とするベクトルについてです。
プログラム的には問題ないと思いますが、大変お馬鹿なプログラムです。
無駄が多く、このプログラムにしては文量が多すぎます。
プログラムに長けていらっしゃる方なら、馬鹿らしいなと思われるかもしれませんが、これは私の成長として記録していきたいと思っています。
まだ一年生ですので、プログラムをバリバリ書いているという感じではありません。
しかし、少しC言語を触れるようになってきて、自分にも相手にもプログラムを読みやすいものにしたいということを心がけています。
いろいろ教えてもらったのですが、
1.インデント(空白)
2.コメント
3.(変数、関数名)
今気を使っていることといえばこれになります。
それでは今回書いたプログラムを…
void rad_and_vector( double x, double y, double x1, double y1, double *kakudo, double *strength ); int main( void ) { double x1, y1; /*点Aの座標*/ double x2, y2; /*点Bの座標*/ double rad, str; /*角度と大きさ*/ /*点A入力*/ printf("点Aの座標を入力\n"); printf("x = "); scanf("%lf",&x1); printf("y = "); scanf("%lf",&y1); /*点B入力*/ printf("点Bの座標を入力\n"); printf("x = "); scanf("%lf",&x2); printf("y = "); scanf("%lf",&y2); rad_and_vector( x1, y1, x2, y2, &rad, &str); printf("θ = %lf\n大きさ = %lf\n",rad, str); return 0; } /*角度とベクトルの大きさ*/ void rad_and_vector( double x, double y, double x1, double y1, double *kakudo, double *strength ) { double X, Y; if( ( x > 0 && y > 0 ) && ( x1 > 0 && y1 > 0 ) /*第一象限*/ && ( x < 0 && y > 0 ) && ( x1 < 0 && y1 > 0 ) /*第二象限*/ && ( x < 0 && y < 0 ) && ( x1 < 0 && y1 < 0 ) /*第三象限*/ && ( x > 0 && y < 0 ) && ( x1 > 0 && y1 < 0 ) ){ /*第四象限*/ X = fabs( x - x1 ); Y = fabs( y - y1 ); if( X != 0 ){ /*角度*/ *kakudo = atan( Y / X ); /*二点のベクトルの大きさ*/ X = X * X; Y = Y * Y; *strength = sqrt( X + Y ); } else{ *kakudo = -1; *strength= -1; } } /*点が第二象限と第三象限存在する場合。同様に点が第一象限と第四象限に存在する場合。*/ else if( ( x < 0 && y < 0 ) && ( x1 < 0 && y1 > 0 ) /*第二と第三象限*/ && ( x < 0 && y > 0 ) && ( x1 < 0 && y1 < 0 ) /*第二と第三象限*/ && ( x > 0 && y < 0 ) && ( x1 > 0 && y1 > 0 ) /*第一と第四象限*/ && ( x > 0 && y > 0 ) && ( x1 > 0 && y1 < 0 ) ){ /*第一と第四象限*/ X = fabs( x - x1 ); Y = fabs( y ) + fabs( y1 ); if( X != 0 ){ /*角度*/ *kakudo = atan( Y / X ); /*二点のベクトルの大きさ*/ X = X * X; Y = Y * Y; *strength = sqrt( X + Y ); } else{ *kakudo = -1; *strength = -1; } } /*点が第一象限と第二象限に存在する場合。同様に点が第三象限と第四象限に存在する場合。*/ else if( ( x > 0 && y > 0 ) && ( x1 < 0 && y1 > 0 ) /*第一と第二象限*/ && ( x < 0 && y > 0 ) && ( x1 > 0 && y1 > 0 ) /*第一と第二象限*/ && ( x < 0 && y < 0 ) && ( x1 > 0 && y1 < 0 ) /*第三と第四象限*/ && ( x > 0 && y < 0 ) && ( x1 < 0 && y1 < 0 ) ){ /*第三と第四象限*/ X = fabs( x ) + fabs( x1 ); Y = fabs( y - y1 ); if( X != 0 ){ /*角度*/ *kakudo = atan( Y / X ); /*二点のベクトルの大きさ*/ X = X * X; Y = Y * Y; *strength = sqrt( X + Y ); } else{ *kakudo = -1; *strength = -1; } } /*点が第一象限と第三象限に存在する場合。同様に点が第二象限と第四象限に存在する場合。*/ else{ X = fabs( x ) + fabs( x1 ); Y = fabs( y ) + fabs( y1 ); if( X != 0 ){ /*角度*/ *kakudo = atan( Y / X ); /*二点のベクトルの大きさ*/ X = X * X; Y = Y * Y; *strength = sqrt( X + Y ); } else{ *kakudo = -1; *strength = -1; } } }
長ったらしくてすみません…
これは見やすくなっているのでしょうか?
ブログに公開することで多くの方に見ていただくとは思いますが、またよろしければご意見をよろしくお願いします。
課題に取り組むことによって、複数の戻り値を返すこと(ポインタを使って)も学びましたし、自分で調べて勉強していくことで多くの知識をつけたいと思っています。
長文でお粗末なものでありましたが、ご覧いただきありがとうございました。
(ここにソースを貼ると少しズレているところあります…