• 締切済み

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

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

みんなの回答

回答No.1

 こんにちは。  リージョンから面積を取るAPIは無いかと記憶しています。  代わりの策として、ExtCreateRegion()APIを使用してビットマップを基に不定形リージョンを作成する様にすれば、処理の一環で面積を計測する事が出来る筈です。  此方の方が、より複雑なリージョンを作成する事に向いています。  「ExtCreateRegion()API」  http://msdn.microsoft.com/ja-jp/library/cc428592.aspx  「使用方法」  http://orangeknowledge.jpn.org/tips/sdk001.html

関連するQ&A

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

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

  • VB2010において面積の算出

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

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

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

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

    ベン図を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 となっています。 この作成した図形の緑色で着色した部分の面積を出したいと考えております。 もしお時間等ありましたら、お力添えをいただけると嬉しく思います。 どうかよろしくお願いします。

  • 漏れ箇所の隙間の面積算出について

    初めての質問のため、説明不足等あるとは思いますが、ご教示いただければ幸いです。 二次側の圧力を抜くと、逆止弁が作動し一次側の圧力は落ちない構造の製品があります。 しかし、一次側の圧力が落ちてしまう現象が発生しました。 原因として、逆止弁が正常に作動せず隙間が発生していると推察しています。 ここからが質問ですが、下記条件から隙間の面積を算出することは可能でしょうか? 算出方法分かる方いましたら、ご教示お願いします。 <分かっている条件> 一次側圧力の変動:78.6MPa→49.9MPa 二次側圧力の変動:78.8MPa→19.4MPa 圧力測定の時間  :0.1秒 一次側の配管容積:31mL 使用流体      :Heガス 温度         :90℃ 補足 仕事の都合上、回答頂いてもお礼などが遅くなると思われます。 ご了承ください。

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

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

  • 非アクティブウィンドウの作成

    非アクティブウィンドウの作成 Visual C++でプログラミングをしている際に行き詰ったので質問させてください。 現在「最前面に表示されるがクリックされてもアクティブ化しないプログラム」を作成したいのですが、最前面に表示されるところまでは出来てもクリックするとアクティブ化してしまいます。 http://okwave.jp/qa/q1532983.html http://www.arcpit.co.jp/winapi/api_02/ap020214.htm http://d.hatena.ne.jp/kent013/20080304/1204640570 などを参考にして試してみたのですが、ウィンドウメッセージからの操作はうまく適用することができなかったのか通常通りアクティブ化してしまいました。 乱文になってしまいましたが、ご回答いただけるとありがたいです。

  • エクセルで面積表の作成

    初歩的な質問ですみません。 エクセルで面積表を作成しているのですが、 現在は計算式の列に 5*5 のように計算式を打ち込み その右の列の計に 先ほどの 5*5 をコピーして F2で頭に=をつけて 25 と計算させています。 これを計算式を打ったところで 右の列の計に答えが自動で入るようにしたいのですが、なにか良い方法をご存知の方がいらっしゃいましたら教えていただけないでしょうか? またエクセルでは*が×の表記になっていますが、 *をすべて×に変換し、かつ計算も出来るようには出来ないでしょうか?

  • 図形描画を作成ボタンを作成するには?

    エクセルで表を作成しています。 ある状態を監視し、その状態を図形描画の「→」(矢印)を利用して平行、傾き右斜め下向き、右斜め上向きの3つの矢印で状態を表すようにしています。 この時、一度作成した図形があるセルをコピーして貼り付けていますが、 マクロ(?)などで、ボタンを3つ作成して簡単に矢印を該当セルに作成すること方法はありませんか? 質問が支離滅裂ですみません。

専門家に質問してみよう