OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

凸包!

  • すぐに回答を!
  • 質問No.103861
  • 閲覧数704
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 0% (0/3)

どちらさまか、凸包問題と言うのを知りませんか?
多数ある点を取り囲む多角形を求めるというものです。
現実的な話で言うと、
壁に多数の釘が刺さっていて、その一番外側を囲むように
輪ゴムを引っ掛けたときにできる多角形の角の座標を求め、
その座標すべてを出力するといったものです。

具体的なアルゴリズムはこちらを見ると詳しく載っています。
よろしくお願いいたします。
http://www.race.u-tokyo.ac.jp/~masuda/jugyo/program99/package.html
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全3件)

  • 回答No.1
レベル8

ベストアンサー率 33% (10/30)

えーと、一体何が聞きたいのでしょうか。 必要な情報はすべて出そろっているようですが。 凸包問題を知っている人と友達になりたいとか? ...続きを読む
えーと、一体何が聞きたいのでしょうか。
必要な情報はすべて出そろっているようですが。

凸包問題を知っている人と友達になりたいとか?
補足コメント
lusy7

お礼率 0% (0/3)

凸包問題のアルゴリズムはわかったのですが、
プログラムが書けません。cで。
非常に困ってます。
お願いいたします。
投稿日時 - 2001-07-16 12:01:25


  • 回答No.2
レベル6

ベストアンサー率 50% (4/8)

 凸多面体の基底を求めるアルゴリズムを拝見しましたが 書いてあることをそのままするだけですね。 書けませんでは何が書けないのかわからないのでアドバイスのしようがありません。 1.点データをセットするやり方がわからない。とか 2.どうやってΘを求めるかがわからない。とか 3.ループ文の条件がわからない。とか こうゆうのでしたら答えようもあるんですが。。。 いかかがなもんでしょう? ...続きを読む
 凸多面体の基底を求めるアルゴリズムを拝見しましたが
書いてあることをそのままするだけですね。

書けませんでは何が書けないのかわからないのでアドバイスのしようがありません。

1.点データをセットするやり方がわからない。とか
2.どうやってΘを求めるかがわからない。とか
3.ループ文の条件がわからない。とか

こうゆうのでしたら答えようもあるんですが。。。
いかかがなもんでしょう?
補足コメント
lusy7

お礼率 0% (0/3)

最初からすべてわかりません。
cは一通りやったのですが、
どうやら向いていないようで・・・・。
投稿日時 - 2001-07-18 14:19:10
  • 回答No.3
レベル6

ベストアンサー率 50% (4/8)

 解答とはいきませんがちょいと手助け。 一応このソースでは変数を宣言して、ファイルからデータを受け取るところまで書いてあります。 データファイルの形式は [x1],[y1] [x2],[y2] . . . と、カンマ区切りで縦に書いてください。(ちなみに[]はいりません) 一番下の/* ここから先が大切 */以下にグリグリかいていくわけです。 コンパイル時には -l ...続きを読む
 解答とはいきませんがちょいと手助け。
一応このソースでは変数を宣言して、ファイルからデータを受け取るところまで書いてあります。

データファイルの形式は
[x1],[y1]
[x2],[y2]
.
.
.
と、カンマ区切りで縦に書いてください。(ちなみに[]はいりません)

一番下の/* ここから先が大切 */以下にグリグリかいていくわけです。
コンパイル時には -lm をつけましょう。

cc -lm Convex_Closure.c とかだったかな?

それでは。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

/* 座標データ最大数 */
#define MAX_NUM 64

/* バッファサイズ */
#define BUF_SIZ 256

/* 円周率 */
#define PIE 3.14159265358979

/* 構造体宣言 */
typedef struct{
double x;
double y;
} point;

FILE *fp;

int main(int argc, char *argv[])
{
int i, j;
int last = 0;
int wp, len, min, nxt;
char rBuff[BUF_SIZ];
char Temp[64];
point p[MAX_NUM], tp;
double rad[2];

/* ソース内でのデータ指定は面倒くさいのでファイルで渡すことにします。*/
if(argc == 1){
printf("データファイルがありません。\n");
return 0;
}

/* ファイルを開きましょう。*/
if( (fp = fopen(argv[1], "r")) == NULL ){
printf("ファイルのオープンに失敗しました。\n");
return 0;
}

/* p[]の初期化 */
for(i = 0 ; i < MAX_NUM ; i++)
p[i].x = p[i].y = 0;

/* ファイルの中身を1行ずつ読みます。 */
last = 0;
while( fgets(rBuff, BUF_SIZ, fp) != NULL){

/* 読み込んだバイト数 */
len = strlen(rBuff);

/* 座標データのセット */
for( i = 0, wp = 0 ; i < len ; i++ ){

/* X */
if(rBuff[i] == ','){
Temp[wp] = 0;
wp = 0;
p[last].x = atof(Temp);
continue;
}

/* Y */
if(rBuff[i] == '\n' || rBuff[i] == 0){
Temp[wp] = 0;
p[last].y = atof(Temp);
break;
}
Temp[wp++] = rBuff[i];
}

last++;
}
fclose(fp);

/******************************************************************/
/* ここから先が大切 */

return 0;
}
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ