• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列を使って複数の線分を描くプログラムについて)

配列を使って複数の線分を描くプログラムについて

このQ&Aのポイント
  • 配列を使って複数の線分を描くプログラムについて、途中までは完成させたが、わからない箇所がある。
  • 配列を使った繰り返し処理で描画する部分がわからない。
  • プログラムを完成させるためのアドバイスを求めている。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

その「いろいろ試した」って何をやって、どんなエラーになったんですか? draw_lineが「(xs,ys)から(xe,ye)に線を引く」という仕様で、正しく期待通りに動いているなら void polygon(int N,int xs[],int ys[],int xe[],ye[]) { int i; for(i=0;i<N;i++){ draw_line(xs[i],ys[i],xe[i],ye[i]); } } でいいはずですよ。 他の部分が「正しい」ことは、確認できていますか? 例えば ・draw_line(0,0,200,100)等と指定して、(0,0)-(200,100)の線が引けますか? ・scanfの戻り値をチェックしていませんが、正しく期待通りに読み込めてますか? printf("%d\n",N); for(i=0;i<N;i++){ printf("%d %d %d %d\n",pxs[i],pys[i],pxe[i],pye[i]); } これをglutMainLoop();の前に入れたら、ちゃんと期待する結果になってますか? あと、関係はないでしょうが、書き方が古いです。 > void polygon(N,xs,ys,xe,ye) > int N; > int xs[],ys[],xe[],ye[]; このような宣言、今はまず使いません。 > void draw_line(); > void polygon(); 使用する関数を知らせるためのプロトタイプ宣言になりますが、引数が()というのはあまり使いません。 それと、この場合、関数定義がプロトタイプ宣言の前にある(polygonの定義中void draw_line();があるが、draw_lineの定義がその前にある)ので、ここでの記述は不要です。

iu9021
質問者

お礼

回答ありがとうございます。試してみたところ /usr/bin/ld: cannot find -lglu collect2: ld はステータス 1 で終了しました というエラーが出ます。 質問前から多発していたエラーなので、最初はlgluというものが インストールされていないのではと思い、いろいろなプログラムを試してみたのですが解決せず、 プログラム側に何か問題があるのではと考えていました。 やはり何かインストールされていないのでしょうか。

iu9021
質問者

補足

無事解決しました! ありがとうございます!

その他の回答 (1)

  • akr
  • ベストアンサー率18% (32/173)
回答No.2

polygonの関数仕様が書かれてませんが、ここは回答者各人が好き勝手に決めて下さいってこと? 名前からして多角形を角関数を描画する関数としますね。引数は第1パラメータから順に、線分の数、始点X軸座標の配列、始点Y軸座標の配列、終点X軸の配列、終点Y軸の配列ってとこにします。 関数の中身は#1様の回答と同じです。 気になることとしまして、先に書いた関数の仕様ですが、引数が線分の数と座標ですよね。この場合だと各々の線分がつながってるわけではないので、多角形を描画しないですよね。 引数を始点と終点ではなく、単に頂点の座標の配列にしたほうが、関数名と一致しそうなのですがどうでしょうか。

iu9021
質問者

お礼

回答ありがとうございます! やってみようと思います!

関連するQ&A