C言語での開発環境での線の扱い方

このQ&Aのポイント
  • C言語での開発環境での線の扱い方について説明します。
  • TSP問題におけるC言語での座標の扱い方と最短経路検索方法について解説します。
  • C言語で線を引く方法について詳しく教えてください。
回答を見る
  • ベストアンサー

C言語での開発環境での線の扱い方

C言語での開発環境での線の扱い方 TSP問題を考えています。 1:2次元配列で座標(今回は5点程度)を用意。 (例)sorce[4][4]={{0,1},{3,8},{2,4},{2,7},{8,2}} 2:任意の点をスタート位置に設定。 3:座標同士の距離を計測(ユークリッド距離)。 4:(2)のうち最短距離を選ぶ。 ここまでできています。 これからアルゴリズムとしては、 5:任意のスタート位置から最短距離にある座標を線で繋ぐ。 6:繋いだ先の座標から最短距離にある座標を線で繋ぐ(これを繰り返す。)。 7:もし線の交差があれば、交差している座標間で線を入れ替える。 この処理を行いたいのですが、まず線を引くような、処理をどうやったらC言語で行えるのか(実際に線を引いて出力するわけではありません。)がわかりません。 ですので、5番の方法だけでも結構ですので、教えてください。よろしくお願いします。

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

  • ベストアンサー
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

線の描画の仕方。 色々な方法が有ると思いますが、windowsならdirectx、LinuxならXlib使うのが一般的かと思います。 http://www.h2.dion.ne.jp/~takusoft/directx8/d3d/chapter1/sec08/d3d_08.html http://ja.wikipedia.org/wiki/Xlib まあ、ちょっとCとかC++だけでは無いような説明になりますが、使い方はX,Y軸の頂点間2点を結ぶ物になります。

その他の回答 (1)

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

> sorce[4][4]={{0,1},{3,8},{2,4},{2,7},{8,2}} これ、おかしくないですか? 5要素の[2要素の配列]の配列で初期化してるのに、 4要素の[4要素の配列]の配列 になってますよ。 「線」を引くのに必要な情報は「両端の点」です。 なので、その両端を表せるようなデータ構造を考ればよいです。 例1)struct Line{ double x1,y1,x2,y2; } line[N]と宣言 → i番目の線は 座標(line[i].x1,line[i].y1)から座標(line[i].x2,line[i].y2)まで 今回のケースだと、高々数個の決まった座標しか使わないので、その「座標番号」を使えばよいでしょう。 例2) struct Edge { int snode, enode; } edge[N] ; → i番目の線は ノードsnodeから ノードenodeまで プログラムの作り方次第では、距離も格納できる型にした方がいいかもしれませんし、配列でなくリストで表現した方がいいかもしれません。

関連するQ&A

  • 点と線について

    ユークリッド幾何学によると 点とは位置だけをもち、部分をもたないものである。 線とは幅のない長さである。 とありますが、どんな長さの線上にも無数に点が存在しているということはわかりますが、ではなぜ長さのない点が集まると線になるんですか? 似たような疑問で、円とはある点からの一定距離の点の集合であるというのも、疑問です。 誰かお願いします!

  • C言語のプログラムに対する質問です。

    C言語のプログラムに対する質問です。 円に内接する正方形をその円に引き延ばす処理のソースコードをどうつくったらいいのかわかりません。  ・正方形と円の輪郭点の座標を配列に設定させる。  ・正方形からの対応点、どの点が円のどこに移動するのか。  ・円からみても、正方形からみても最短な点をマッチングする。  ・線形歪み というヒントがあります。 どなたか、教えて頂きたいです。よろしくお願いします。

  • vrmlとc言語について

    vrmlでの3次元データを読み込んでc言語で処理をするには どうしたらいいのでしょうか? あと、vrmlでの3次元物体の座標(x,y,z)をc言語で読み込んで 処理をすることは可能なのでしょうか?

  • C言語で地図を描きたい

    C言語で、地図を描くプログラムを作ろうと考えていますが、 どなたか参考になりそうなソースや文献などご存知でしょうか。 東京湾などの形状を描くつもりですが、将来的に 詳細/広域切り替え機能も必要になります。 海岸線を正確に描くためには、 画面外にある地形座標とも線を繋ぐ必要がありますが これをどう処理しようか考えあぐねています。 標準出力にXY座標を与えて線を描く関数や、 緯度経度をXY座標に変換する関数は用意しています。

  • C言語の質問です。

    C言語の質問です。 以前質問した、C言語初心者のものです。 以前回答してくださった方、ありがとうございました! 前回の質問とかぶるんですが、質問は、 正方形の画像を円形にひきのばす(歪ませる)というプログラムがなかなか書けません。 どなたか教えてください! 円形にひきのばしたときに、正方形のどの座標がどにに移動してるのかってのを考えてつくりたいのですが。 画像を添付しました。 この画像の意味は、たとえば、正方形の中にある緑の四角(座標)が円のほうの緑の四角(座標)に移動したと考えたときに、添付画像に書いてある公式をつかって処理していくってことなんですが・・・。 それを同じようにすべての座標で処理していって円形に歪ませた画像をつくりあげたいんです。

  • C言語の書き方

    倍精度の浮動小数点で与えられる4点の座標(x1,y1),(x2,y2),(x3,y3),(x4,y4)を入力して、その4点が頂点になる四角形の面積を算出して表示するプログラムのC言語での書き方を教えて下さいm(__)m

  • C言語について

    倍精度の浮動小数点で与えられる4点の座標(x1,y1),(x2,y2),(x3,y3),(x4,y4)を入力して、その4点が頂点になる四角形の面積を算出して表示するプログラムをC言語を用いて書くとどういうプログラムをつくればいいのでしょうかm(__)m

  • C言語のキューに関する質問です。

    キューの演習が出たのですが全く手が出ず 困っています。 どなたか詳しい方にご助力いただけたらと思います。 以下問題です。 左上の座標を(0,0) とするマス目でできたNxNマスの迷路があり、 ’*’ は壁で、’ ’ は空きマスの通路とする。下記のサンプルを修正して、 このような迷路において、指定したスタートS からゴールG まで、 下記の手順で最短距離を求めるプログラムをつくれ。 手順1: スタート位置の座標=(sx,sy) と距離=0 をキューに記録する 手順2: キューが空になるまで以下を繰り返す。 手順2-1: キューから位置と距離を取り出し、現在の位置と距離とする。 手順2-2: もしその位置がゴールG ならば繰返しを抜ける。 手順2-3: 現在の位置の上下左右を調べ、空きマスならば(現在の距離+1) を そのマスの距離として座標とともにキューに保存する。 手順3: ゴールに到達していれば距離を出力して終了する。 • N は7 とする。 • 一度通った道を記録するように工夫することで、効率よく計算することもできる。 • G に到達できないことが分かった時は-1 を出力すること。 例えば、迷路が最大でもN x N マスしかないことを利用すると、 距離がN x N を越えてもG に辿り着けないと、 G に到達できない迷路であることが分かる。 /* (x,y) 地点とそこまでの距離c を記録する構造体*/ struct cost { int x; int y; int c; }; int main(void) { #define BUFSIZE (N*2) char buf[BUFSIZE]; char maze[N][N]; int i, j, sx, sy, gx, gy; struct cost pos; /* 迷路を読み込み、maze にセットする。*/ for (i = 0; i < N; i++) { fgets(buf, BUFSIZE, stdin); for (j = 0; j < N && (buf[j] != ’\n’ && buf[j] != ’\0’); j++) { if (buf[j] == ’S’) { sx = j; sy = i; buf[j] = ’ ’; } else if (buf[j] == ’G’) { gx = j; gy = i; buf[j] = ’ ’; } maze[i][j] = buf[j]; } while (j < N) maze[i][j++] = ’ ’; } /* ※ここを主に修正する */ /* 最短距離を表示する。*/ printf("%d\n", pos.c); return 0; おそらくキューの実装からやらなければならないのですが、 取り出すときの戻り値やら構造体、二次元配列の扱い等々で ちんぷんかんぷんです。 どうかよろしくおねがいします。

  • 任意の点と任意の線分との最短距離となる点

    現在C++でシューテイングゲームを作成しています。 当たり判定の計算として二次元座標の三点で判定を取れないかと考えて詰まっています。 具体的には任意の点Pと任意の点ABからなる線分の最短距離を算出したいのですが、これは可能なのでしょうか

  • 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; }

専門家に質問してみよう