• ベストアンサー

作成したリージョンの面積の算出法

お世話になります。 Visual BasicでCombineRgnのAPIを使って複雑な形のリージョンを作成したのですが、作成したリージョンの面積を出す方法(APIとか)は無いのでしょうか?自分でも可能な限り調べてみたのですが、良い方法が見つかりません。 CombineRgnでandをとっているので、合体させた図形の間に重複があるために単純にもとの図形の面積を足し合わせるだけではだめみたいで・・・。 もし何か良い方法があれば教えていただけたら幸いです。

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

  • ベストアンサー
回答No.1

簡単計算APIはないと思います。 私も以前に同じようなことを思って、大昔に他のC言語系掲示板に投稿したことがあります。(約10年ぐらい前?) その頃は「無い」という解答をもらいました。 CombineRgnを利用しているってことは、 「Create~Rgn」系のAPIを利用していると思います。 PolygonでもRectでもRoundでも、座標を持って作成されていると思います。 それぞれの面積・接点・交点などを計算して求めるしかないと思います。 やったことはないですが、想像できる「結果ありき」でもよいのであれば、、、 合成Rgnを塗りつぶし描画して「GetPixex」などで、ピクセルループで色を求めたら何とかなるかも。。。 (これは問題外か・・・) 多分質問者さんも想像していると思うのですが、やはり一発で面積を求めることはできないと思います。 プログラミングを抜きに、「数学カテ」に質問したら、いいアドバイスをもらえるかもしれませんよ。 それでもプログラミングでの結果を望むのであれば、APIであればCカテの方が、経験者がいるかも?(10年経てば、何か方法がでてるかなぁ)

pochi_sun
質問者

お礼

丁重なお返事,有難うございます!!! やはり決して簡単ではないんですね. MSDNとかもあらかたさらってみたのですがそれらしきものがなくて・・・. >合成Rgnを塗りつぶし描画して「GetPixex」などで、ピクセルループで色を求めたら何とかなるかも。。。 これは面白い方法ですが,処理時間が結構かかりそうですね. 次々とリージョンを更新していき随時面積を求めたいので,少し厳しいかも. 数学的に求められるかなぁ・・・. やろうとしていること,かなり難解だと思います.(笑) とりあえず藁にもすがるつもりでCカテの方にも聞いてみます!

関連するQ&A

  • 作成したリージョンの面積の算出法

    Visual Baiscのカテゴリで質問したら,こちらで質問することをオススメされました. 再掲の質問であることをご了承ください. http://oshiete1.goo.ne.jp/qa5829677.html お世話になります。 Visual BasicでCombineRgnのAPIを使って複雑な形のリージョンを作成したのですが、作成したリージョンの面積を出す方法(APIとか)は無いのでしょうか?自分でも可能な限り調べてみたのですが、良い方法が見つかりません。 CombineRgnでandをとっているので、合体させた図形の間に重複があるために単純にもとの図形の面積を足し合わせるだけではだめみたいで・・・。 もし何か良い方法があれば教えていただけたら幸いです。 Visual Basicであることに拘る必要はありません. なにか設定したリージョンの面積を求める方法があればご教示頂けたら幸いです.

  • VB2010において面積の算出

    VisualBasic2010において、複数のPanelを用いて任意に図形を作成さたのですが、その作成させた図形(重複はない)の面積を算出したいと考えております。 使用したPanelの面積を足し合わせて、作成した図形の面積を算出させる。 座標を取得して面積を算出させる。 このどちらかの方法で作成させた図形の面積を算出できるのではないかと思うのですが、 Panelの面積を設定するにはどのようなコードを用いたらよいのかわからず、面積を足し合わせることができない。 頂点座標の取得法がわからない。 ため面積を算出することができません。 いろいろと調べてみたのですが、わかりませんでした。 もしお時間等ありましたら、お力添えをいただけると嬉しく思います。 どうかよろしくお願いします。

  • Illustratorで作成した画像の面積の測定

    いつもお世話になっております。 初めて質問いたします。 Win XP で Illustrator CSを使用しております。 画像の特定の色の面積を測定したいと思っています。 例えば、http://www12.plala.or.jp/python357/test.gif のような画像の色それぞれの面積です。 現在は、作成した画像をbmp形式で保存し、「画像から面積」という選択した色のピクセル数を数えるフリーソフトによって測定しています。 しかし、実際にはもっと複雑な形をしており、測定したい領域の数はもっと多いのです。(全て直線のパスで作成しており、ベジェ曲線はなし) 「画像から面積」でも時間をかければ測定することはできるのですが、境界部は色が混ざっており、正確な数値を得ることができません。 そこで、作成した任意のパスのアンカーポイイントから面積を測定し、その結果をテキストファイルに出力することは可能でしょうか?もし良い方法があれば教えていただけると幸いです。よろしくお願い致します。 スクリプトに関しては知識がないので、簡単なコメントをいただけると幸いです。

  • イラストレーターで画像の切り抜き

    イラストレーターCS4を使用しています。 画像を自分で作成した図形の形に切り抜きたいのですが、 どうすればよいでしょうか。 自分で作成した図形とは、長方形や円を重ねて、パスファインダで『合体』させたものです。 その合体した図形で写真を切り抜きたいということです。 どなたか教えてください!

  • ベン図の見た目面積の違和感について

    ベン図をGoogle Chart APIを使って初めて作成しました。 3つの円の中央の重なりのみ、他の2つの円のそれぞれの重なりと比べて、面積が少し小さいように感じます。実数に対して、面積が小さく感じます。 この図が正しいのか、検証方法があれば教えて下さい。 よろしくお願いします。

  • VB2010 面積算出

    panelを用いた図形の作成を行っております。 コード Public Class Form1 Dim p1 As Integer 'Panel1のカウンター Dim p2 As Integer 'Panel2のカウンター Dim p3 As Integer 'Panel3のカウンター Dim p1size As Single 'Panel1の面積 Dim p2size As Single 'Panel2の面積 Dim p3size As Single 'Panel3の面積 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown Dim p1clnt As Drawing.Size = Panel1.ClientSize Dim p2clnt As Drawing.Size = Panel2.ClientSize Dim p3clnt As Drawing.Size = Panel3.ClientSize p1size = p1clnt.Width * p1clnt.Height p2size = p2clnt.Width * p2clnt.Height p3size = p3clnt.Width * p3clnt.Height Panel4.AllowDrop = True End Sub Private Sub Panel1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown, Panel2.MouseDown, Panel3.MouseDown sender.DoDragDrop(sender, DragDropEffects.Move) End Sub Private Sub Panel4_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel4.DragDrop Dim srsPnl As Panel = e.Data.GetData(GetType(Panel)) Dim dstPnl As New Panel dstPnl.Size = srsPnl.Size Dim dropp1 As Integer = srsPnl.Size.Width * srsPnl.Size.Height If dropp1 = p1size Then p1 += 1 ElseIf dropp1 = p2size Then p2 += 1 ElseIf dropp1 = p3size Then p3 += 1 End If dstPnl.Location = Panel4.PointToClient(CursorPosition) 'New Point(e.X, e.Y) dstPnl.BackColor = srsPnl.BackColor AddHandler dstPnl.MouseDown, AddressOf dstPnl_MouseDown AddHandler dstPnl.MouseMove, AddressOf dstPnl_MouseMove Panel4.Controls.Add(dstPnl) End Sub Private Sub Panel4_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel4.DragEnter If e.Data.GetDataPresent(GetType(Panel)) Then e.Effect = DragDropEffects.Move End If End Sub Private previousPos As Point Private Sub dstPnl_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown previousPos = CursorPosition() End Sub Private Sub dstPnl_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) If e.Button = Windows.Forms.MouseButtons.Left Then Dim nowPos As Point = CursorPosition() DirectCast(sender, Panel).Left += nowPos.X - previousPos.X DirectCast(sender, Panel).Top += nowPos.Y - previousPos.Y Console.WriteLine(nowPos.X & "-" & previousPos.X) previousPos = nowPos End If End Sub Function CursorPosition() As Point Return New Point(CInt(Cursor.Position.X / 10) * 10, CInt(Cursor.Position.Y / 10) * 10) End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ans As Single ans = (p1 * p1size + p2 * p2size + p3 * p3size) * 0.0001 TextBox1.Text = ans End Sub End Class 上記のコードは、GroupBox内のpanelをpanel4へ移動させて図形を作成するものです。 移動させたpanelの数を数えて、全体の面積を算出させているのですが、 作成させた図形の右側1/4の面積だけ(左側1/4,下側1/4といった風に)の面積を算出させることは可能でしょうか? 画像 ※図形は任意  重複なし(panel同士) 1m2   (青) 3枚 0.25m2 (赤) 5枚 0.09m2 (黄) 5枚 計 4.7m2 となっています。 この作成した図形の緑色で着色した部分の面積を出したいと考えております。 もしお時間等ありましたら、お力添えをいただけると嬉しく思います。 どうかよろしくお願いします。

  • 【数学の図形の名称と面積の計算方法】正三角形と扇形

    【数学の図形の名称と面積の計算方法】正三角形と扇形があります。正三角形の2辺を伸ばすと二等辺三角形になりますは短辺は真っ直ぐですよね?その短辺を扇形にした二等辺三角形+短辺だけが扇形の形の図形の名称は何ですか? あとそれの面積の計算式を教えてください。

  • イラストレータで面積算定

    お世話になります。 業務でイラストレータを使い始めて数ヶ月です。 WORDで報告書を書く合間に触る程度ですので、なかなか機能を覚えることも、上達することもままなりません。 さて、イラストレータで描画した図形の面積を知る方法を教えてください。プラグインソフトのようなものはないのでしょうか。環境は、Win95~2000、イラストレータ9.0.2です。よろしくお願いします。

  • 航空写真から田畑の面積を計算したい

    うちの田の申請した作付面積が信頼できないので調べたいのです。 GoogleMapの航空写真をもとに、線で描いた画像データを作成しました。また同画像をもとにJWCADデータも作成しました(ただし縮尺は適当)。 これらの画像から、面積を簡単に求める方法はないでしょうか。絶対面積ではなく、一つの圃場を選んでその面積を1とした場合の他の圃場の比率でも結構です。 ・田は7つあり、それぞれ形がいびつです。 ・三角形に細かく分割し、ヘロンの公式で求めるなど面倒は避けたいです。 ・パソコンのソフトを活用できれば一番いいです。例えば、線で囲まれた圃場内をペイントすると、ペイントに必要だったドット数が表示されるツールなどがあれば、一番楽なのですが・・・(無ければ作れって?)

  • 3DCGの作成方法

    こんばんは。 現在、metasequoiaという3DCGソフトを使用して、ガンダムなどのロボットの作成に励んでいます。 そこで頭部を作成するときにいつもうまくいかずに悩んでいます。 基本的には、形状の断面図を描いて、ナイフや移動で整えて、押し出してつくったり、基本図形の形を整えて作成しています。 しかし、頭部などの曲面形状となると、難しいです。断面を描いて作成すると曲面をうまく作れませんし、 かといって、基本形状の球で行おうとすると、断面形状が複雑で形状をその形に整えられません。 3DCGでガンダムを描いている人の作品を見ると、どうしてこんなにもうまく作れるのだろう?と思うばかりです。 作成方法が詳しく載っているサイト、もしくは書籍などあるのでしょうか? また、レンダリング用や新しいソフトにも目を向けるという意味で他のソフトも使ってみようかと思うのですが、 どんなものがよいでしょうか? 考えているのは、shade、light wave 3Dあたりを考えています。 なにかアドバイスをいただければ幸いです。 よろしくお願いいたします。

専門家に質問してみよう