• 締切済み

凸包!

どちらさまか、凸包問題と言うのを知りませんか? 多数ある点を取り囲む多角形を求めるというものです。 現実的な話で言うと、 壁に多数の釘が刺さっていて、その一番外側を囲むように 輪ゴムを引っ掛けたときにできる多角形の角の座標を求め、 その座標すべてを出力するといったものです。 具体的なアルゴリズムはこちらを見ると詳しく載っています。 よろしくお願いいたします。 http://www.race.u-tokyo.ac.jp/~masuda/jugyo/program99/package.html

みんなの回答

  • nanura2
  • ベストアンサー率50% (4/8)
回答No.3

 解答とはいきませんがちょいと手助け。 一応このソースでは変数を宣言して、ファイルからデータを受け取るところまで書いてあります。 データファイルの形式は [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; }

  • nanura2
  • ベストアンサー率50% (4/8)
回答No.2

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

lusy7
質問者

補足

最初からすべてわかりません。 cは一通りやったのですが、 どうやら向いていないようで・・・・。

  • nagata
  • ベストアンサー率33% (10/30)
回答No.1

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

lusy7
質問者

補足

凸包問題のアルゴリズムはわかったのですが、 プログラムが書けません。cで。 非常に困ってます。 お願いいたします。

関連するQ&A

  • 追跡のアルゴリズム

    どこで質問したらいいかわからないのですが,C++で実装してるのでここに書いてみます.適切なカテゴリーがありましたら教えてくださると助かります. ゲーム開発者のためのAI入門(http://www.amazon.co.jp/exec/obidos/ASIN/4873112168/)という本でちょっとずつ勉強してます.追跡のアルゴリズムのところでうまくいかないところがあります. 直線的に移動するターゲットを捕食者(プレデター)に追跡させようとしています.時間刻みを適当にとって座標や速度,プレデターの向き(+y軸からの角度)を更新するように計算しています. 問題はプレデターの回転のところです. ターゲットの座標をプレデターのローカル座標に変換して,プレデターの進行方向(ローカル座標の+y軸方向)からみてどちら側にターゲットがいるか(ローカル座標の+x,または-x)という情報からプレデターにトルクを与えます.慣性モーメントなどは適当に決めています. 確かにターゲットがいる方向へ回転するのですが,ターゲットを正面に捕らえたころには角速度が大きすぎて回りすぎてしまい,うまく向きを制御できません. 一定の角度で回るようにすればもちろんターゲットを正面に捕らえて直進してくれるのですが,それでは旋回のしかたが現実的でない感じがします.回転はあくまでトルクで実現したいです. ターゲットを正面に捕らえるころには角速度をゼロに近づけるようにするにはどういった手段があるでしょうか.イメージとしては逆噴射みたいな感じで逆方向の角加速度を与えてあげればいいのかとも思いますが... 説明がうまくできなかったのでわかりづらいかと思いますが,よろしくお願いします. 意味がわからないことがあったらきいてくださればすぐに書きます.

  • ベニヤ壁の奥はコンクリート。結露する?

     来週、中古の賃貸マンションに入居します。  廊下の収納スペースを掃除しているとき、内側に張ってあるベニヤ板に、釘が打たれていない角があったので、少しめくって奥をのぞいてみたら、むきだしのコンクリート壁と配線?が見え、湿気があって少しかび臭いにおいがしました。  ここをクローゼットとして利用しようと思っていたのですが、結露したりかびの臭いが移ってしまうでしょうか?何か対策を打てないでしょうか? 前の家で、押し入れに入れた衣類がかび臭くなり困ったことがあり、とても気になっています。  南向きのマンションの東端の部屋です。収納スペースは日の当たらない北側の廊下で、建物の東の壁に面している形です。 収納スペース自体では、今のところ、特に臭いや湿気を感じるということはありませんでした。  今考えているのは、断熱になるようなシートや発泡スチロールを、奥の壁一面に貼ることですが、シートの外側(壁側)に結露してしまい意味がないでしょうか? すのこを敷く、除湿機を廊下でかける、などは行うつもりです。  どうぞよろしくお願いいたします。

  • 賃貸マンションのカビ被害に困っています。

     昨年11月から冬季の間玄関ドア内側全体に結露が毎朝発生していたのですが、賃貸マンション(家賃7~8万円)ということで、気にとめず暮らしていました。  今年11月からまた玄関ドア内側全体にまた結露が毎朝発生し外側に面している壁もうっすら湿りがあり、先週より壁の角にあたる壁紙と玄関ドア内側にもカビが多数発生し、そのクロス地帯に置いていた靴20足が、まりもみたいにカビだらけになっていました。部屋の方の衣類と外に面している壁についていたベットの側面もカビが多数発生しています。 急いで大家さんにみてもらいました。後日、建築業者と賃貸仲介会社の担当者と大家さんが訪ねてくる予定です。  三階建て鉄筋マンション(9部屋)で玄関は外階段に面し二階角部屋(現住居)、真上三階の部屋としか同様の間取りはなく、ドアの向きも他7室とは異なっています。1Kでキッチンに窓なしです。昨年10月末に完成したばかりの新築マンションです。  主張として靴、ベット、衣類二点の賠償、カビがこれ以上増えないうちに引っ越したいです。敷金か礼金の二ヶ月の返金、引っ越し費用実費が欲しいですが難しいでしょうか?譲歩して家賃の値下げ、もしくは工事される間の部屋の移住希望です。どこまで主張できるのか知りたいです。  このような件に詳しい方がいらっしゃいましたら、教えていただけないでしょうか。お願いします。

  • Java アルゴリズム web上のソースコードで

    こんにちは。 趣味でプログラミングをしているものです。 定番のアルゴリズムについてみているうちに、下記のような サイトを見つけたのですが、 http://www-ui.is.s.u-tokyo.ac.jp/~takeo/book/algorithm/index.html まず、上記のサイトから ( パッケージ全体のダウンロードはこちら ) のリンクから、 お手数ですが、ソースコードをダウンロードしていただきたいのですが、 「 complete 」のフォルダーの 「 dijkstra 」のMain.javaを見ていて、 いくつかわからないことがありましたので、質問させていただきます。 (1) 194行めからのメソッド set_random_costs() 内において、 最後のほうで、repaint() をコールしていますが、 これは、どのクラスの repaint() なのでしょうか。 (2) コマンドプロンプトから起動すると 「 Appletを継承したMainのインスタンス 」を「JFrameクラスのインスタンス」にaddして 表示されるようでしたので、 コマンドプロンプトから 「java Main」としてみたのですが、 Exception in thread "main" java.lang.NullPointerException at Main.get_graph_image( Main.java:139 ) at Main.set_random_costs( Main.java:211 ) at Main.init( Main.java:76 ) at Main.main( Main.java:25 ) というエラー表示がされてしまいました。 ソースコードをどのようにか、修正しなければならないのでしょうか? 以上、初歩的な質問かもしれませんが、 どなたか教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • 4色問題とは、平面上に線でどの様な絵を描いて面を多数に分けても、4つの

    4色問題とは、平面上に線でどの様な絵を描いて面を多数に分けても、4つの色で塗り分けられると言う事を証明する問題です。繋がっている面は同じ色で塗れます。面と面が線で接する場合は、異なる色を塗らなければなりません。面と面が点で接する場合や離れている場合は、同じ色で塗れます。まず、絵の線が輪ゴムで出来ているとします。この輪ゴムは伸縮自在です。輪ゴムは、線と線が交差する所で結ばれています。結び目のない直線部分、3本の線の集まる結び目、順次4本・5本・6本と無限に多数の線の集まる結び目を考えます。3本線の結び目は、そこに集まる面は3色で塗り分けられます。4本線の結び目は、2色で塗り分けられます。5本線の場合は3色です。つまり、偶数の線の集まる結び目は2色、奇数の線の集まる結び目は、3色で塗り分けられます。これは、面に青赤と交互に色を塗っていった場合、線の数が偶数の時、面の数も偶数となり、最初と最後の面が異なる色になるが、奇数の線の集まる場合は、面の数も奇数となり、最初と最後の面が同じ青色になる為、もう一色黄色を必要とする為です。次に、それらのさまざまな結び目が3つ集まって三角形を成す場合と、4つ集まって四角形を成す場合、更に五角形・六角形をなす場合と、無限に多くの多角形があります。三角形の場合、それ自身に一色赤色が必要です。角である3つの結び目に集まる線の数が奇数なら、三角の周囲の面(点で接する面も入れて)は全部で偶数になり、青赤2色で塗れます。合わせて3色で塗れます。線の数が偶数なら面の数は奇数になり、塗り分けるのに赤青黄色3色必要です。これは、周囲の面の数が偶数なら、最初と最後の面が異なる色になるが、面の数が奇数の場合は同じ色になり、もう一色黄色が必要となるからです。全部で4色必要です。次に4つの結び目から成る四角形を考えます。四角形自身に赤色が必要です。4つの結び目に集まる線が偶数なら、四角形の周囲の面は偶数となり、2色で塗り分けることが出来ます。四角形と合わせて3色必要です。線の数が奇数なら、面の数も奇数となり、周囲の面を塗り分けるのに3色必要となり、合わせて4色必要となります。これから分かるように、多角形の周囲の面数=結び目に集まる線の数-多角形の辺数×2となります。面数が偶数の時、多角形と周囲の面は3色で塗れ、奇数の時4色必要となります。(丸に二つの結び目がついている場合、辺数は2と数えます。丸に一つの結び目がついている場合、辺数は1と数えます。)以上の様に、平面上のあらゆる図形は、伸縮すれば結局、結び目の形とその結び目が作る多角形に還元されます。絵のどの部分の多角形を見ても、それ自身と周囲の面は4色で塗り分けられています。多角形の周囲以外の離れた面は考慮する必要はありません。多角形と同じ色で塗れるからです。どの結び目を見ても、そこに集まる面は3色で塗り分けられています。従って、平面上のあらゆる図形は、4色で塗り分けられます。球面上の図形も一つ一つ見ると結び目と、多角形に還元されますので同じです。

  • 物理学の矛盾のかずかず

    物理学は定義と論理が骨組みのはずです. ところが複数の矛盾が物理学にあります. 下記の矛盾を解決する現象を提案してみてください. 矛盾どうしには関係があり、矛盾どうしにはつながりがあるようです. まだ認識されていない現象がその矛盾の陰に隠れているはずです. 矛盾を一気に解決する現象を考え、私に提案してみてください. ご提案を待っています. 物理学にはかなり矛盾した状況が多数存在します. たとえば法則、原理は天下りに規定するはずでした. 数理では証明できないのが法則です. しかしどうでしょう. (1)角運動量の保存則の矛盾 たとえばケプラーの面積速度一定の法則は天下りの法則ですが、公転運動における角運動量の保存の法則は、天下りではなく、https://physnotes.jp/mechanics/angular-momentum-conservation/の記事の中心力の件のように演算によって導かれてしまいます. 演算によって導かれるので、演算で証明できるなら角運動量の保存の法則は法則ではないはずです. 実際、万有引力という求心力が突然消滅すると思考実験すれば、回転運動は続かず、一瞬にして直進の慣性運動の性質から惑星は直進するはずです. 要するにただの運動現象を公転運動の惑星に対して角運動量の保存というあたかも法則のような呼び方をして、その呼び方のために人類の目から隠されてしまった重要な現象が存在します.(興味を引くはずです、この現象のあらましは最後に述べます.)  惑星の公転と同じように円周軌道を錘に描かせて、錘に回転運動の慣性が連続しているか試せます.  振り子を作って錘を支点の高度まで持ち上げた後、円軌道を描いた運動をさせ、錘の鉛直点で振り子の糸を切断します.すると錘は水平方向に直進飛行しやがて放物線を描いて床面に接地します. 錘に回転の慣性が続いていれば、放物線とは異なる軌道を描くはずですが、水平に打ち出した砲弾の落下と何ら変わらぬ放物線を錘の軌道が描くのです.  したがって錘の角運動量は保存されていません.  そして多くのWEBの記事に角運動量の保存則は中心力が存在する限り成立する法則のように語られていますが、独楽に働く回転の慣性での角運動量の保存に中心力などありません.  中心力など角運動量の保存には無用なのです.  したがっていろいろと法則の要件を欠いているので公転運動の角運動量の保存の法則は存在しません.  遠日点側で、距離に反比例した力よりももっとはるかに弱い、二乗の反比例の力ですから、一段強い力の状況でも周回を戻れぬ運動なので、公転の周回は維持できません.  演算通りに角運動量が定値を取るためには、遠日点側で地球を太陽に引き戻すには、もっとほかに運動を補う力とエネルギーが必要です. (2)確率波動の性質とファインマンの経路積分の特質 確率波動の信号を集めてフーリエ変換した後、そのデータを周波数特性グラフに描くと、確率波なら必ずホワイトノイズの特性が見つかります. ホワイトノイズでは、どの周波数でも同じ振幅が得られます. それは振幅の期待値がどの周波数でも等しいという特性です. 振幅がゼロとなる振動はホワイトノイズにはありません.  ところで波動には同じ振動数(周波数)成分ならば位相の交角を持ったベクトル複数とみたてた、加算合成や分解ができます. 異なる振動数(周波数)でも同じ成分でも波動は干渉し、干渉は加算演算によって表現できます. ところでファインマンの経路積分は上記の確率波動のフーリエ積分の演算と同じです.  たとえば光の鏡面反射にファインマンの経路積分をしたとします.光路断面にした平面で鏡面反射を描けます.その光路は2つの線分となり、線分同士が鏡面の同一点に交わり、鏡面の法線(鉛直線)に同じ大きさの交角を描きます. ファインマンはこの線分上を辿る経路の経路積分だけで、確率波の積分値を構成すると主張しています.ファインマンの経路積分では、その他の経路の演算成分が相殺すると主張しています. 相殺の発生こそがファインマンの経路積分の特質です.  ところが振幅がゼロとなる振動はホワイトノイズにはありません.  だからファインマンの経路積分には確率波動の性質に反する性質があります.    いいかえてみると中心極限定理という確率の数理に反する特質がファインマンの経路積分か、もしくは物理現象の全てにあるのです. (3) 最小作用の原理が、天下りの原理とはいえず、特定の現象の疑いがある. 最小作用の性質が現象であれば、原理ではありません. ファインマンの経路積分の特質は最小作用の単なる性質にすぎない疑いがあります.  「最少作用の原理」は作用という確率波の振幅を縦軸に横軸に時間(距離)のグラフ上でプロットすると変曲点、微分の極値ゼロとなる座標を選んで運動の軌道が描かれる性質です.  このグラフには起き上がりこぼしと、船舶の姿勢に表れる復元力と似た性質があります.  要するの最小作用の原理とは空間に復元力の働くポテンシャルの偏在があることを意味する現象です.  それはどんな現象でしょうか.  「空間に復元力の働くポテンシャルの偏在」のおきた一つの事例をご案内します. https://annex.jsap.or.jp/hokkaido/yokousyuu39th/B-29.pdf 粒子が整列したポテンシャルの偏在の空間に捕捉された写真がご覧になれます. もしトンネル現象がこの空間のはじに発生していると、物質波の位相の同期が起きている事になります. 実際、この実験条件では電極面で電子波がトンネル現象を起こしています.  位相の同期があると物質波の波数のばらつきは減るはずです. ばらつきが減ると、力の変曲点、力がゼロとなる極値を示す復元力が予想できます. 復元力はF=hdk/dtとなることが下記の論文の中に紹介されています. 電子情報通信学会総合大会BS-6-3「最小作用の原理と電子波の同期に則った宇宙スケールのフライホイールを用いたエネルギーの貯蔵」    (4)エーテルの否定と重力波の有限伝搬速度の矛盾 マイケルソンモーレーの干渉実験でエーテルは存在しないと証明されました. ところがいま同じ原理の測定器で重力波を測定しようとしています.  測定できたとしたら、エーテルを重力波という名前にして観測したことになります. (5) 地球の公転軌道の輪と重力の伝達速度 波動の伝搬には空間に偏在分布した密度と、距離に比例した遅れとその干渉現象が要件です. 重力波にもその要件が満たされねばなりません. 地球と太陽の間の万有引力は重心間を結ぶ線上の向きに働きます. ところが光速度とおなじ伝搬速度で引力が届いたとしたら、引力の向きは正しい向きになく、遅れてしまいます.  地球と太陽を結ぶ線と万有引力の線の間に交角が発生します. 万有引力を直角三角形の斜辺として、力のベクトル成分に分解すると、地球の運動を減速する成分と、円周運動に不足した求心力の成分に分かれます. すると等角螺旋という軌道運動を地球の軌道が描くことになります. しかし地球の運動は減速していません. 地球の軌道は等角螺旋ではありません. 地球の公転径は等角螺旋軌道のように伸びていきません.   したがって公転における角運動量の保存則を補い、等角螺旋を起こさせぬエネルギーが地球の公転運動に必要です.  重要な運動とはまさにこのことです.  太陽の放射流がトンネル現象を起こして空間に偏在分布するポテンシャルを発生し、球座標系にポテンシャルの等高線を描いていると予想できるのです. (6) 単孔の光干渉実験に整数個しかない光路の矛盾 光の通り道は一点に定まらないという量子力学の前提に反した論理で単孔の干渉実験では整数個の光路が説明に用いられます. 2重スリットの光の干渉実験や2重スリットの電子線の干渉実験は有名ですが、単孔でも光は干渉します. 2重スリットは手品師の手技とにた、目くらましなのです. たとえば単孔の光の干渉はWEB記事のように孔の縁と縁の間に整数個の計算点を用いて演算します. http://www.wakariyasui.sakura.ne.jp/p/wave/kannsyou/tannsuritto.html 孔の中のどこを横断するか、光路を光子は一様な確率で通り抜けたはずです. 整数個の点だけをちょうどとおる光はむしろ少数派のはずです. おまけに整数個をさだめて決める有意な論理は存在しません.

  • 物理の数々の矛盾2

    物理の数々の矛盾2 公転と自転の周期に尽数関係の起きるわけ 尽数関係の原因を下記のヒントABCそれぞれの項を生かしたあなたのアイデアで論じてわたしに教えてください. 太陽系の星にはそれぞれ公転と自転が起きています. それを集めて周期同士の組み合わせを作ってみると、周期の比を分数に表せます. それには尽数という特徴があります. 周期の比の尽数関係を天文物理学では万有引力の干渉から説明する論と、もう一つは重心が球体の中心になくて、重心の位置のずれた起き上がりこぼしのような偏心の星に万有引力が働いた論の二つがあります. でも2つとも欠点を持っているのです. そこで尽数関係の原因を新たなあなたのアイデアで論じてわたしに教えてください. 分母と分子がともに整数の分数は現代の数学には有理数と呼ばれます. 有理数の名称には歴史があり、尽数と呼ばれた時代があります. そんなわけで天文学では周期の比の有理数のことをいまだに尽数と呼ぶ習わしが続いているらしいのです. 尽数関係の周期比にある天体は太陽系の中に無数にあります. それを現代の天文物理学では万有引力の干渉から説明する論と、もう一つは重心が球体の中心になくて、重心の位置のずれた起き上がりこぼしのような偏心の星に万有引力が働いた論の二つがあるのです. あなたの説は新しい3つ目になるかもしれません. 起き上がりこぼしの偏心した重心説は月の自転と月の公転には成り立ちますが、1対1の比以外には成立しません. m:nの周期比の天体が多数あるのでそれらの現象を偏心説では説明ができません. すると万有引力の干渉説に軍配は傾くかもしれません. しかし万有引力の干渉説にも問題があります. 問題とは3体の運動を微分方程式から解くと、安定した周回運動の解が得られない難点があるからです. 宇宙の回転運動は長期間にかけて安定していますから、引力の干渉を原因とする説は矛盾します. 問題の有無の定かな根拠論文を知らないのですが、3体運動には解が無いらしいのです. 根拠をよくご存じならわたしにお知らせくださるとありがたいです. ようするに尽数の原因の2つの説は正しくありません. そこで3つ目の説は以下のヒントを生かして、論じていただきます. A 有理数の関係で表される比の事例を取り入れてあなたの論をからめて下さい. たとえば、分子式の元素数の有理数、正多角体、結晶構造等をからめて下さい. B 高調波の周期を比較すると必ず有理数になります. 2倍や2分の1の関係はオクターブという単位で表し、べき乗のときべき次数をオクターブで表す事ができます.  たとえば振動周期の異なる3体の運動はそのうちの2者の周期の公倍数の振動周期をもつ物体の運動を介して、協調し合う干渉をする事ができます. たとえば空気振動や弦の振動運動ならば、その干渉関係を和音と呼びます. 近い周期差の和音ほど協調しあう干渉は激しく起きます. C OKWAVEに「物質波の同期物理学の矛盾のかずかず」の題で掲げた(1)(2)(3)(4)(5)(6)の内容がヒントになります. (1)角運動量の保存則の矛盾・・  演算通りに角運動量が定値を保つには、(超長楕円軌道の)遠日点側で地球を太陽に引き戻す運動を補う力とエネルギーが必要です. (2)確率波動の性質とファインマンの経路積分の特質・・ 中心極限定理という確率の数理に反する特質がファインマンの経路積分か、もしくは物理現象の全てにあるのです. (3) 最小作用の原理が、天下りの原理とはいえず、特定の現象の疑いがある・・・・ 最小作用の原理とは空間に復元力の働くポテンシャルの偏在があることを意味する現象です.・・物質波の位相の同期が起きている事になります・・ 復元力はF=hdk/dtとなる    (4)エーテルの否定と重力波の有限伝搬速度の矛盾・・  重力波を測定できたとしたら、エーテルを重力波という名前にして観測したことになります. (5) 地球の公転軌道の輪と重力の伝達速度・・ 公転における角運動量の保存則を補い、・・  太陽の放射流がトンネル現象を起こして空間に偏在分布するポテンシャルを発生し、球座標系にポテンシャルの等高線を描いていると予想できるのです. (6) 単孔の光干渉実験に整数個しかない光路の矛盾・・ 光の通り道は一点に定まらないという量子力学の前提に反した論理で単孔の干渉実験では整数個の光路が説明に用いられます. 2重スリットの光の干渉実験や2重スリットの電子線の干渉実験は有名ですが、単孔でも光は干渉します.