初めましての投稿です。用意してある膨大なcsvの3次元の点データから輪郭だけをC言語で実行して取りたいのですが、立体に行く前の練習として平面で平行四辺形などの点データなどを作成してそこから外だけをとろうと思っています。プログラム例はこちらです。}/*読み込んだd回分jを繰り返す。/*次の行にデータを出力したいため改行。fprintf(stderr,"ファイル[%s]を開くことができませんでした。}[thumbnail]http://gyazo.com/db3f8888650c580b411c3dadf131bc52.png[/thumbnail]画像のような入力データのcsvから外側だけをとりたいのですが実行すると次のようになってしまいます。[thumbnail]http://gyazo.com/3dfffc9ef7d6d7a3fb323746e41d25b4.png[/thumbnail]xyの最大値と最小値だけがわかるだけで、y=2、3、4などの時のxの最大値と最小値がわからないので、右側の点がとれてないのだと思います。そのyが最小、最大以外でのとりかたがわからないので悩んでいます。アドバイスお願いします。C言語については授業でちょっとやったぐらいでファイル入出力などは授業で習わずに終わったので、ネットで勉強しました。6年前おそらく、やりたいことは入力された点の凸包を求めることですね?(違ったらごめんなさい)[search=google]凸包[/search][search=google]三次元凸包[/search]自分が凸包を実装したコードはこちらです。みけCATのAOJコード集ただし、今回の場合(3個以上の点が一直線上にある場合)は条件の微調整が必要かもしれません。6年前>みけCATさん、usaoさんフォーラムルールを見て頑張ったつもりですが、うまく質問できてないです、すみません。今用意している3次元データとはこのようなものです。csvのデータをそのままblenderで表示した画像です。[thumbnail]http://gyazo.com/db88532bd3eadcac2c80a1492528f0ca.png[/thumbnail][thumbnail]http://gyazo.com/5f3bc7f8b143ebdcfa892af8e679bb08.png[/thumbnail][thumbnail]http://gyazo.com/a75cf9d9639dd270802a42a224ac7edf.png[/thumbnail]凸包となると中の点が残ってしまう?ので外だけの点をとりたいです。やりたいことはこの点の集まりから、立体の輪郭だけのデータを取って新しいcsvに輪郭だけの点データを出力したいのです。輪郭上に存在する点群とそうではない点群とにより分けること?・どの程度の正確さが必要なのか?みたいな事柄3次元ソフトなどで点群を表示してどんな形をしているのかをみて、そしてその形から輪郭だけをとりたいのでこの立体の中の点群や表面の点群などとは分けたいです。内側などに凹んでいるところはないです。できれば精確にとりたいですがちょっと点が外れているところでも許容範囲です。それとも入力データは完全に未知のデータとして考えなければならないのか?今ある入力データは未知のデータではなく3項目で1万4000行ぐらいってわかっています。平行四辺形のような整数ではなく、小数点や負など点の値はばらばらです。・データ点群の用意の仕方について.人工的にではなく計測された点データをcsvで表示しています。輪郭上の点とそうでない点については3次元ソフトで表示したぐらいで存在比率とかはわかってないです。xは最初はプラスだがだんだんとマイナスにいっていて、yはプラスとマイナスがばらばらの値でzはプラスの値がなく、マイナスの方にいっているとかぐらいなら。現在の平行四辺形ならx=3の時のyのデータを何個かってのはわかりますが、この3次元のデータは同じ数値はないので難しいと思います。凸包となると中の点が残ってしまう?ので外だけの点をとりたいです。どのように考えてこのような結論を出しましたか?凸包を使用すると、(輪郭の定義にもよりますが)むしろ必要な点を消す可能性があるはずです。どのように考えてこのような結論を出しましたか?凸包を使用すると、(輪郭の定義にもよりますが)むしろ必要な点を消す可能性があるはずです。外側の点をとる考え方は一緒ですが、外側の点を結ぶのは違うんじゃないのかなと思いました。説明下手な分やはりcsvなどを添付した方がはやいのでしょうか。表面形状測定みたなことで得たデータとは違って,物体内部な箇所にも密に点が存在しているのでしょうか.物体の内部にも点がいっぱいあります。「輪郭」とは何を指しますか?(「エッジ」的な意味?)エッジですね。立方体をイメージした時に、面ではなく辺と頂点のことを私は輪郭と言っていました。その辺と頂点がだいたいとれるのであれば適当でもいいんですけどね。動けば(=通用すれば)それでOK,ということでしょうか.とりあえずは今持っているデータに対してだけ通用すればOKです。6年前すみません、返信内容を考えてたら遅くなりました。方法案ありがとうございます。エッジですか.なんか難しい話になってきましたね.なんかデータのエッジは曲線っぽいし.はい、曲線が入ってますね。ブレンダ-での画像が見づらかったので、実体モデルで表示してみます。[thumbnail]http://gyazo.com/b62a8134a65cb4ca60ad6772253b7d4e.png[/thumbnail][thumbnail]http://gyazo.com/ee8863d24d6c12bb98983a560443cbe8.png[/thumbnail][thumbnail]http://gyazo.com/6612c4778c412ef4143a4eb216aeef6f.png[/thumbnail]雑ですが、赤色で塗っているところが私が言っているとこです。2枚目が平行四辺形っぽかったので平行四辺形でとる練習をしていました。すごくいい方法案だと思うのですが、私の知識不足で頭が追いついてないです。1月5日までには簡単な物でも完成させたいのですが難しいですね。作った方が楽かな.とりあえず現状これはできそうなのでしょうか?これができたと仮定(すなわち表面上の点だけになっていると)して...すみません3次元データ上では処理は行わず、C言語でのプログラム作成です。これだと切断平面と平行に近いエッジ(に属する点は)検出できないかもしれないので,1回前記処理を行った後で,1回目の平面とは直交する平面でもう一回行って結果を統合みたいなのをやる必要があるかなぁ(計3回やることに?)X軸を基準に、Y軸を基準に、Z軸を基準にカットというかスライスをする手順での計3回ですね。スライスについてはそのスライスする間隔をどうするのかが問題点か。大きくスライスするのか、小さすぎるとデータが多いので時間がかかりそう。幅としては2.0~0.5ぐらいがいいのかなぁ。スライスした後にスライスしたデータ内で内側の点なのか外側の点なのかってのを比較、(一番大きい、一番小さいとか?)して最終的に1つに結合すればできそうですね。データが1つだけだと比較ができないから1つの時はスルーするのかな。なんとなく理解はできてきたものの正月も考えてましたがプログラムはうまく思いつかずです。考えたことを垂れ流しているだけです......絵に描いた餅です.許して...スルーされることなく、返信をしてくれているのでありがたいですよー。言ってたcsvデータを添付しておきます。オフトピックあきらめずに頑張ってはいるけどお手上げ状態ですね。平行四辺形の方はなんとか作ることはできましたが。すみません3次元データ上では処理は行わず、C言語でのプログラム作成です。usaoさんもC言語で前処理をする前提だと思いますよ。そのプログラムをあさかぜさんは作れそうですか?という質問です。作り方については、みけCATさんがキーワードを書いてくれています。参考になるHPも見つかるでしょう。ここまでは「比較的簡単」な前処理の話です。書かれている条件から私が思いつくのもusaoさんの書いているような方法。プロである私がやっても試行錯誤に相当の時間がかかると思いますし、あさかぜさんの課題の全体像が判っていないので、この方法では必要事項を満たせない可能性もあります。(みけCATさんもusaoさんも仕様の確認をしていますが、あさかぜさんの回答は十分とは言えません。)C言語をちょっとやった位との事なので、前処理を理解して完成させるだけでも1~2ヶ月かかるかもしれません。必要な期間には個人差があるし、どんなに時間をかけても理解できない人もいるでしょう。結論としてアドバイスは2通り。初心者には難易度が高すぎるということで諦める。担当教官などがいるならば、相談してみましょう。前処理の3次元凸包を完成させる。この前処理は不要かもしれないけど、中間目標として妥当なところでしょう。次の手を検討できるようになるでしょう。いうものの3次元凸包も簡単ではないので、まずは2次元凸包でしょう。どちらにしても自分で理解しないといけませんよ。すみません3次元データ上では処理は行わず、C言語でのプログラム作成です。>>usaoさんもC言語で前処理をする前提だと思いますよ。>そのプログラムをあさかぜさんは作れそうですか?という質問です。(違う?)今回のケース(データ)では凹部があるようなので何かしらの工夫が要りそうに思うのですが,そのあたりのことはどんな感じなのでしょうか?>完成させた時には、色々レベルアップしているはずなので、>次の手を検討できるようになるでしょう。(違う?)きっと私への質問でしょうか。そこらへんはどうでもいいのですが.こっちの目的がメインで提案しています。似た事をやってイメージをつかむ方が有意義ではないかと。6年前>こっちの目的がメインで提案しています。いう話の筋道みたいなのがあるならばより望ましいだろうと思ったので,>そのあたりのことはどんな感じなのでしょうか?とか訊いてみた次第です.オフトピック>きっと私への質問でしょうか。凸包を挙げられていて,さらに>凸包を使用すると、(輪郭の定義にもよりますが)むしろ必要な点を消す可能性があるはずです。>凸包を使用すると、(輪郭の定義にもよりますが)むしろ必要な点を消す可能性があるはずです。私としてはデータ分布形状が不明だからこそ凸包を提案しました。この時点で凸包で駄目な場合、駄目と言ってもらえると期待しました。近い提案をされることで、自分の問題との違いをあげることができるかも、です。「輪郭」あるいは「エッジ」について、正確な仕様を聞きだすことができていません。次に形状の凹凸を問わずに表面点を取得する方法を調べてみました。難易度的には、以下のように感じています。私に実装の経験があるのは2次元までですが、3次元凸包までは今でも多分できるかと。非凸にも対応できるかもしれないと思いました。3次元凸包を作ってから、長い辺の近傍を調べ、少しずつ凹ませていく感じ。単なる思いつきだし、途中で詰まる可能性も高いです。よい方法がきっとあるでしょう。私は持っていませんが、目次には3次元凸包までは書かれています。穂影のアイズオンリーこの方は「穴あき非凸多角形の三角形分割」に取り組んでいます。「コンピュータ・ジオメトリ」を高く評価していました。ミクプラは自由にリンクできます。