VB2010で図形の面積を算出する方法

このQ&Aのポイント
  • VisualBasic2010のPanelを使用して図形を作成し、その面積を算出する方法について調査しました。
  • Panelの面積を設定する方法や頂点座標の取得法について調べた結果、情報が見つかりませんでした。
  • 図形の面積を算出するためには別の方法を検討する必要があります。
回答を見る
  • ベストアンサー

VB2010において面積の算出

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

  • TMYMS
  • お礼率11% (4/36)

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

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

こんばんは とりあえずカウンターの方法で、対策してみました。 但し、こんな方法ではダメですよね。? >使用したPanelの面積を足し合わせて、作成した図形の面積を算出させる。 >図形(重複はない) の条件です。 Buttonを追加してClickイベントで取得しています。 Public Class Form1 Dim p1 As Integer 'Panel1のカウンター Dim p2 As Integer 'Panel2のカウンター Dim p3 As Integer 'Panel3のカウンター Dim p1size As Integer 'Panel1の面積 Dim p2size As Integer 'Panel2の面積 Dim p3size As Integer 'Panel3の面積 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown 'GroupBoxにあるPanelの面積を求める 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 Panel1.DoDragDrop(Panel1, DragDropEffects.Move) End Sub Private Sub Panel2_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel2.MouseDown Panel2.DoDragDrop(Panel2, DragDropEffects.Move) End Sub Private Sub Panel3_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel3.MouseDown Panel3.DoDragDrop(Panel3, 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 'eで取得した値から面積を求める Dim dropp1 As Integer = srsPnl.Size.Width * srsPnl.Size.Height 'GroupBoxにあるPanelの面積とeで取得した値から求めた面積を比較 If dropp1 = p1size Then p1 += 1 'Panelと比較した結果 ElseIf dropp1 = p2size Then p2 += 1 'Pane2と比較した結果 ElseIf dropp1 = p3size Then p3 += 1 'Pane3と比較した結果 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(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim ans As Integer ans = p1 * p1size + p2 * p2size + p3 * p3size MsgBox("Panel1は " & p1 & " 枚です。" & vbNewLine & "Panel2は " & p2 & " 枚です。" & vbNewLine & "Panel3は " & p3 & " 枚です。" & vbNewLine & "総面積は " & ans & " です。") End Sub End Class やっぱりこれじゃダメかな~ ダメな場合はお手数ですが再度返信をお願いします。

TMYMS
質問者

補足

こんばんは 親切かつ丁寧な回答ありがとうございます。 まさに私がやりたいと思っていたことですが、 p1size = p1clnt.Width * p1clnt.Height p2size = p2clnt.Width * p2clnt.Height p3size = p3clnt.Width * p3clnt.Height を p1size =2.5 p2size =5 p3size =10 というように変えたいです。 Dim X As IntegerをDim X As Single と置き換えれば可能なのですが、 'eで取得した値から面積を求める Dim dropp1 As Integer = srsPnl.Size.Width * srsPnl.Size.Height 'GroupBoxにあるPanelの面積とeで取得した値から求めた面積を比較 If dropp1 = p1size Then p1 += 1 'Panelと比較した結果 ElseIf dropp1 = p2size Then p2 += 1 'Pane2と比較した結果 ElseIf dropp1 = p3size Then p3 += 1 'Pane3と比較した結果 End If この部分はどのように置き換えたらよいでしょうか? 丸投げで大変申し訳ないのですが、お力添えをいただけると嬉しく思います。 どうかよろしくお願いいたします。

その他の回答 (5)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.6

横入り失礼します。 #3さんのコードでは、面積でどのパネルをドロップしたかを判断していますので、画面上の面積を正しく計算する必要があります。 これを、面積ではなくて直接パネルそのもので判断すれば、面積の計算は不要になります。 つまり、 'eで取得した値から面積を求める Dim dropp1 As Integer = srsPnl.Size.Width * srsPnl.Size.Height 'GroupBoxにあるPanelの面積とeで取得した値から求めた面積を比較 If dropp1 = p1size Then p1 += 1 'Panelと比較した結果 ElseIf dropp1 = p2size Then p2 += 1 'Pane2と比較した結果 ElseIf dropp1 = p3size Then p3 += 1 'Pane3と比較した結果 End If この部分を、つぎのように変更します。 If srsPnl Is Panel1 Then p1 += 1 ElseIf srsPnl Is Panel2 Then p2 += 1 ElseIf srsPnl Is Panel3 Then p3 += 1 End If こうしておけば、 Dim p1size As Single 'Panel1の面積 Dim p2size As Single 'Panel2の面積 Dim p3size As Single 'Panel3の面積 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load p1size = 2.5 p2size = 5 p3size = 10 Panel4.AllowDrop = True End Sub というように、p1size,p2size,p3sizeを自由に設定しても問題ありません。 (グローバル変数にせずに、結果を表示するときに設定してもいいでしょう) Dim ans As Single の変更も忘れずに。

TMYMS
質問者

お礼

回答ありがとうございます。 おかげで問題を解決することができました。 BAではなくすみません。

回答No.5

こんばんは、お返事ありがとうございます。 全文を拝見させて頂きました。 >Panel1,Panel2,Panel3のサイズを任意に決めることが出来るのではないかと考えたのですが、不可能なのでしょうか? さすがですね、私には考えつきませんでした。 よ~く考えると(本当はあまり考えてません)Panelはデザイナー画面で貼り付けると思いますので、可能かもしれません。 但し、大きさが小さいのでその問題をどのように解決するかだと思います。 面積が大きければ、ある程度、例えばp3size =50位あればいいのですが。 問題は、今日から金曜日の夜までPCに触る機会がありませんので、本格的に考えるのは来週になってしまいます。 おそらくここまで、情報が揃いましたので、他の方が良い回答をしてくださると思います。 その前に、TMYMSさんがご自分で解決できそうですね。 万が一解決されていませんでしたら、またお会いできますね。 そのようなわけで大変申し訳ありませんが、しばらくTMYMSさんとお話ができません(残念

TMYMS
質問者

お礼

また質問をさせていただくことがあるかもしれません。その時はよろしくお願いいたします。

回答No.4

お返事ありがとうございます。 少々問題がありまして(私の読解力不足)再度情報を頂けないでしょうか。 問題点1 >p1size =2.5 これですと、多分少数点になりますね。 p1sizeは四角の面積ですので、p1size=縦×横 の計算式になると思います。 例えば、p1size =2.5にするには、縦が1とすると、横は2.5になりますね。 Panelをデザイナー画面でSize変更する場合は、おそらくピクセル数で変更すると思いますので(詳しいことはわかりません) 縦の1は問題ありませんが、横の2.5はエラーになると思います。 また、プログラムで Panel1.Size = New Size(2.5, 1) としても、少数点はRoundが動作して2.5は2に変換されてしまうと思います。 問題点2 >p1size =2.5 >p2size =5 >p3size =10 上記のサイズですと、図形が小さくて見えなくなってしまいます。 もしかして、センチメートルのことでしょうか? 画面上私のPCの設定では、ピクセル数を4倍するとほぼ指定した大きさになりますが、PCの画像設定は各々違いますので画面上で正確に実寸にするには、少々時間がひつようです。 どこかのサイトに詳しく解説されていると思いますが、現状ではURLがわかりません。 問題点3 問題点1でも触れましたが、四角の面積は縦と横の数値が必要ですので、縦もしくは横のどちらか一方を決定しなければ p1size =2.5、p2size =5、p3size =10を算出できませんので、縦もしくは横のどちらか一方を決めて頂けないでしょうか? Panelの表示もできないと思います。(ここが1番重要ですね、Panelを貼り付けると必ず、縦と横の数値が決定されますね) 例 Panel1.Size = New Size(x, 1) Yは1で決定されてますので、Xは面積から求めることができます。 Panel1.Size = New Size(x, Y) XとYが両方わからない場合は、Panel1のSizeは決定できませんね。 私の文章の書き方が悪いですから、わかりづらいと思いますが出来る範囲で結構ですので情報を頂けるとうれしいです。

TMYMS
質問者

補足

回答ありがとうございます。 初めに回答して頂いたコードを Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '各Panelの幅と高さを取得 Dim psize1 As Drawing.Size = Panel1.ClientSize Dim psize2 As Drawing.Size = Panel2.ClientSize Dim psize3 As Drawing.Size = Panel3.ClientSize Dim ans1 As Single 'Panel1の面積 Dim ans2 As Single 'Panel2の面積 Dim ans3 As Single 'Panel3の面積 Dim total As Single '各Panelの面積の合計 ans1 = 2.5 ans2 = 5 ans3 = 10 total = ans1 + ans2 + ans3 MsgBox.Show("面積は " & total & " です。") End Sub End Class と書き換えるとtotalが17.5と表示され 'eで取得した値から面積を求める Dim dropp1 As Integer = srsPnl.Size.Width * srsPnl.Size.Height 'GroupBoxにあるPanelの面積とeで取得した値から求めた面積を比較 If dropp1 = p1size Then p1 += 1 'Panelと比較した結果 ElseIf dropp1 = p2size Then p2 += 1 'Pane2と比較した結果 ElseIf dropp1 = p3size Then p3 += 1 'Pane3と比較した結果 End If のDim dropp1 As Integer = srsPnl.Size.Width * srsPnl.Size.Heightを Dim dropp1 As single = 2.5と置き換え、 p1size = 2.5 p2size = 5 p3size = 10とした場合 Panel4にDragDropされたすべてのPanelのサイズが2となり、Panel1,Panel2,Panel3をそれぞれ一つずつPanel4へ移動した場合、 Panel1は 3 枚です。 Panel2は 0 枚です。 Panel3は 0 枚です。 総面積は  7.5 です。 と表示されるため、Panel1,Panel2,Panel3のサイズを任意に決めることが出来るのではないかと考えたのですが、不可能なのでしょうか?

回答No.2

こんばんは 補足情報ありがとうございます。 今まで外出中で、PCをやっと起動しました。 返信の時間を見ましたら、「あらびっくり!」、あまりの返信の速さで慌てて回答してます。 思いつきで回答してますので、あまり当てになりませんが、ザ~っとコードを見ましたところ、この場合はカウンター処理ではダメでしょうか? こんな安易なことではダメですよね。 それと、表示はMsgBoxにするのでしょうか? それともlabel? それとも? すいません、少しずつ詰めて行けば、何とかなりそうですね、他の方も良い回答をしてくださると思います。

回答No.1

こんにちは ご質問の内容からすると、単純な問題ではないですね。 とりあえず、単純な例のサンプルを掲載しますので、どこがどのようにTMYMSさんの目的と違うのか教えていただけると、嬉しいです。 また、他の方が回答するヒントになると思います。 >使用したPanelの面積を足し合わせて、作成した図形の面積を算出させる。 こちらの方法で作成しました。 Public Class Form1 Private Sub f1() Handles MyBase.Shown '各Panelの幅と高さを取得 Dim psize1 As Drawing.Size = Panel1.ClientSize Dim psize2 As Drawing.Size = Panel2.ClientSize Dim psize3 As Drawing.Size = Panel3.ClientSize Dim ans1 As Integer 'Panel1の面積 Dim ans2 As Integer 'Panel2の面積 Dim ans3 As Integer 'Panel3の面積 Dim total As Integer '各Panelの面積の合計 ans1 = psize1.Width * psize1.Height ans2 = psize2.Width * psize2.Height ans3 = psize3.Width * psize3.Height total = ans1 + ans2 + ans3 MsgBox("面積は " & total & " です。") End Sub End Class 情報、よろしくお願いします。

TMYMS
質問者

補足

回答ありがとうございます。 画像では、Panel1,Panel2,Panel3を一つずつ用いて図形を作成しておりますが 実際は Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Panel4.AllowDrop = True End Sub Private Sub Panel1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown Panel1.DoDragDrop(Panel1, DragDropEffects.Move) End Sub Private Sub Panel2_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel2.MouseDown Panel2.DoDragDrop(Panel2, DragDropEffects.Move) End Sub Private Sub Panel3_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel3.MouseDown Panel3.DoDragDrop(Panel3, 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 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 とコードを書いており、任意に図形を作成することができるようになっています。よって組み合わせは無限にあるのです。 Panel4上にあるPanel1,Panel2,Panel3すべての面積を出したいです。

関連するQ&A

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

  • OpenCVによる面積算出

    OpenCVによる面積算出 現在OpenCVを使用して、2値化した画像を取得し保存。そして取得した画像を読み込み白い部分の面積を求めるプログラムを作成中なのですが、正直分かりません;; どのように作ればいいのか、OpenCvのプログラミングブックやGoogleで検索しても、自分で作成するに至れない状況です。もしよろしければ、アドバイス等をいただけると幸いです;;

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

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

  • XY座標面積の解き方

    XY座標の問題で、「次の図形の面積を求めよ。ただし、座標軸の1メモリを1cmとする。 A(1,3) B(8,0) C(0,-3)を頂点とする三角形」 このような問題を図に表したりせず簡単に暗算でだせる方法を教えてください。 参考書には長方形を作りそこからABCいがいの 面積を計算して長方形の面積からひきなさい。 とあるんですが、 ABCいがいの面積を求めるには図に表さないとできません。 式がでてこないのです。 どうか教えてください。

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

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

  • 添付図の水色の部分の面積は、以下の手順で出せると思うのですが、正しいで

    添付図の水色の部分の面積は、以下の手順で出せると思うのですが、正しいでしょうか? (実際の面積は出す必要はないです。) 添付図は、以下の図形の一部で成り立っているものとします。   正方形   正方形に内接する円   正方形の頂点のひとつを中心とし、円の半径と正方形の一辺の長さが等しい円 考えている手順は以下のとおりです。 1.Oを原点、頂点Cを座標(1,1)とするxy座標を考える。   円の方程式は(x^2)+(y^2)=0と   ((x+1)^2)+((y+1)^2)=0なので、   連立方程式として上記二式を解くと、点P,Qの座標が求まる。 2.点の座標が解っているのだから、角POQ、角PAQの大きさが出せる。 3.円の半径と中心角が解っているのだから、扇型POQ、扇型PAQの面積が出せる。 4.また、点の座標が解っているのだから、三角形OAQ、三角形OAPの面積が出せる。 5.扇型POQの面積+三角形OAQの面積+三角形OAPの面積-扇型PAQの面積で、添付図の水色の部分の面積が出せる。

  • 積分で面積を求める問題がわかりません

    f(x)=-x^2…放物線A 第4象限においてA上に頂点をもつ g(x)=ax^2-2atx+(-1+a)t^2(a≠0)…放物線B ただしt(>0)はBの頂点のx座標。 a≠-1とする。このとき常に異なる2点 x1=t,x2=(-1+a/1+a)tで交わる。 a<-1のときx1<x2となる。 このとき2つの放物線で囲まれる図形の面積はいくつになるか? この問題で、求める面積をSとすると S=-1/6{(-1+a/1+a)t-t}^3 で計算しました。 答えがt^3/3(1+a)^3 となりました。しかし答えは1だそうです。 どこが違うのでしょうか?? わかる方解説をお願いします!

  • 球を平面で切断したときの表面積

    半径rの球があります。この球の表面積は4πr^2です。 では、この球を球の中心Oからaの距離(0<a<r)で垂直に平面で切断したとき、大小2つの図形に分かれますが、小さいほうの図形の曲面部分の表面積はどうなるんでしょうか? 半球の場合、曲面部分の表面積は2πr^2となりますが、上記のように任意の位置できった場合のうまい算出法が見つかりません。 数学の苦手な人にも説明できるよう、中学生レベルの知識で解けないかとも考えたのですが、やはり積分を駆使しないとダメなんでしょうか? 解法のヒントでも良いので教えてください。

  • VBAのEvaluate()をVBで記述するには

    ExcelVBAで書かれているプログラムをVB(VisualBasic)に書き直していますが、 VBAのコードの中で、別ファイルから任意の数式(例えば「=3600/60+5000」など)を読み込んで、Evaluate()という関数でこの演算結果を取得している部分があるのですが、VBAのEvaluate()の部分をVBで記述することは可能でしょうか。 よろしくお願いします。

  • VB2010 bitmapとして取り込む

    現在、panelを移動させて図形を作成するプログラムを書いています。 このpanelを移動させて作成した図形を画像?(bitmap等)として取り込み、他のフォームで読み込ませたいと考えております。 panelを移動させるコード Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown 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 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 上記のコードでpanel4へpanel1,panel2,panel3を自由に移動させて任意の図形を作成することができます。 このコードを用いて画像のような図形を作った際に、その図形を他のフォームで読み込ませたいです。 わかる方がいらっしゃいましたら、お力添えしていただけると幸いです。 よろしくお願いします。

専門家に質問してみよう