座標変換や図形の座標が3次元なのにスクリーンでは2次元なので変換の仕方がわかりません。できればサンプルプログラムのあるとことのURLやサンプルプログラムがあるところを教えてほしいです。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

とりあえず、こんなのを見つけました。


visualC++で作ってるみたいですけど、座標計算のアルゴリズムは数学の世界で
言語にほとんど関係ないから、参考になるんじゃないでしょうか。

参考URL:http://www.geocities.co.jp/SiliconValley-Bay/454 …
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBでグローバル変数を宣言するには

VB初心者ですが。クイズゲームのようなものを作成したいと考えてます。
Private Sub ~ End Sub の中で宣言した変数って他のところに呼び出したり(戻り値として渡す)出来るのでしょうか?
どこでも、いつでも呼び足せるグローバル変数の宣言とはどのようにやるのか、具体的に教えていただけないでしょうか?

Aベストアンサー

>Public a as Integerのように宣言して、初期化するにはどのように記述を行えばよいですか?

>Public a As Boolean = 0
のように記したら”コンパイルエラー”と出ました。

Booleanって整数値取れたかなと思いつつ。
Sub~End Sub内でa = 0を代入したりしてください

扱おうと言うことがあるかどうか疑問だけど

Public Const a As Integer = 10 'グローバルな定数の宣言

QNをkgに換算するには?

ある試験片に40kgの重りをつけた時の荷重は何Nをかけてあげると、重り40kgをつけたときの荷重と同等になるのでしょうか?一応断面積は40mm^2です。
1N=9.8kgfなので、「40kg=N×0.98」でいいのでしょうか?
ただ、式の意味がイマイチ理解できないので解説付きでご回答頂けると幸いです。
どなたか、わかる方よろしくお願いします。

Aベストアンサー

こんにちは。

kgfはSI単位ではないですが、質量の数値をそのまま重さとして考えることができるのがメリットですね。


>>>
ある試験片に40kgの重りをつけた時の荷重は何Nをかけてあげると、重り40kgをつけたときの荷重と同等になるのでしょうか?

なんか、日本語が変ですね。
「ある試験片に40kgの重りをつけた時の引っ張りの力は何Nの力で引っ張るのと同じですか?」
ということですか?

・・・であるとして、回答します。

40kgのおもりなので、「おもりにかかる重力」は40kgfです。

重力は万有引力の一種ですから、おもりにも試験片にも、地球からの重力はかかります。
しかし、試験片の片方が固定されているため、見かけ、無重力で、試験片だけに40kgfの力だけがかかっているのと同じ状況になります。

試験片にかかる引っ張り力は、

40kgf = 40kg×重力加速度
 = 40kg×9.8m/s^2
 = だいたい400N

あるいは、
102グラム(0.102kg)の物体にかかる重力が1Nなので、
40kg ÷ 0.102kg/N = だいたい400N


>>>1N=9.8kgfなので、「40kg=N×0.98」でいいのでしょうか?

いえ。
1kgf = 9.8N
ですね。


>>>一応断面積は40mm^2です。

力だけでなく、引っ張り応力を求めたいのでしょうか。
そうであれば、400Nを断面積で割るだけです。
400N/40mm^2 = 10N/mm^2 = 10^7 N/m^2
1N/m^2 の応力、圧力を1Pa(パスカル)と言いますから、
10^7 Pa (1千万パスカル) ですね。

こんにちは。

kgfはSI単位ではないですが、質量の数値をそのまま重さとして考えることができるのがメリットですね。


>>>
ある試験片に40kgの重りをつけた時の荷重は何Nをかけてあげると、重り40kgをつけたときの荷重と同等になるのでしょうか?

なんか、日本語が変ですね。
「ある試験片に40kgの重りをつけた時の引っ張りの力は何Nの力で引っ張るのと同じですか?」
ということですか?

・・・であるとして、回答します。

40kgのおもりなので、「おもりにかかる重力」は40kg...続きを読む

QVB.NETでマウスクリックイベントを発生させたい。

VB.NETでformの外で任意の座標でマウスクリックイベントを発生させたい。
formにはボタンがあり、そのボタンを押すを固定位置(formの外)でマウスの左クリックイベントを発生させたいのですがどのような手段を使えばいいでしょうか。

環境 Windows XP,VB2008 Exoress

Aベストアンサー

こちらの記事がわかりやすくていいんじゃないかなー。
http://blog.livedoor.jp/akf0/archives/51560984.html

QVB.NETのグラフィック描画について

グラフィック描画ですが、引数を持たないサブルーチンプロシージャ(固定的な
目盛り等)は、PictureBox_paint(***イベントプロシージャ内に記述すればグラフィック描画ができます(e.Graphicsでグラフィックスオブジェクトを取得できる為)が、
X、Y座標を引数としたサブルーチンプロシージャを作り、その中でLineDraw(*****で描画させたい場合サブルーチンプロシージャ内に dim g As Graphics=pictureBox1.CreateGraphics()
でグラフィックオブジェクトを生成しても
描画できないのですがどのようにすれば解決できるでしょうか(イメージがわかり難いかもしれませんのでサンプルを書きました)
よろしくお願いします
(1)private sub pictureBox1_paint(Byval sender as Object, Byval e as
system******
e.Graphics.DrawLine(****** (これは描画できる)
End Sub

(2)private sub zahyou() ' 座標を生成するサブルーチンプロシージャ
dim i as integer
for i=0 to 10
hyouji( i , i*5 )
End Sub


private sub hyouji( x as integer, y as integer) ’直線を引くサブルーチンプロシージャ
dim g As Graphics=pictureBox1.CreateGraphics()
g.DrawLine(***,x,y**** (これは描画できない)

グラフィック描画ですが、引数を持たないサブルーチンプロシージャ(固定的な
目盛り等)は、PictureBox_paint(***イベントプロシージャ内に記述すればグラフィック描画ができます(e.Graphicsでグラフィックスオブジェクトを取得できる為)が、
X、Y座標を引数としたサブルーチンプロシージャを作り、その中でLineDraw(*****で描画させたい場合サブルーチンプロシージャ内に dim g As Graphics=pictureBox1.CreateGraphics()
でグラフィックオブジェクトを生成しても
描画できないのですがどのようにすれば解...続きを読む

Aベストアンサー

返信遅れまして申し訳御座いません

フォーム=frmGurafu
ピクチャ=Picture1


開発環境の設定にもよりますが、コードのイメージは以下のようになります


田 Windows フォーム デザイナで生成されたコード


│Private g As Graphics

日Private Sub frmGurafu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
│ PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
│ g = Graphics.FromImage(PictureBox1.Image)
│'別のSub
│ sakugatate() '縦を描く
│ sakugayoko() '横を描く
│End Sub

日Sub sakugatate()
│ Dim i As Integer
│ For i = 1 To 5
│  g.DrawLine(Pens.Pink, i * 20, 0, i * 20, 100)
│ Next
│End Sub

日Sub sakugayoko()
│ Dim i As Integer
│ For i = 1 To 5
│  g.DrawLine(Pens.Pink, 0, i * 20, 100, i * 20)
│ Next
│End Sub

これで、どうでしょうか?

返信遅れまして申し訳御座いません

フォーム=frmGurafu
ピクチャ=Picture1


開発環境の設定にもよりますが、コードのイメージは以下のようになります


田 Windows フォーム デザイナで生成されたコード


│Private g As Graphics

日Private Sub frmGurafu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
│ PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
│ g = Graphics.FromImage(PictureBox1.Image)
│'別のSub
│...続きを読む

QVB.NET フォーム上に描いたグラフィックのクリア方法

最近、VB6からVB.NET 2003へプログラムの移行作業を始めたものです。極々基本的なことなのかもしれませんが、.NETでフォームに描いたグラフィック(線や円など)を消去するコードがなかなかうまく書けず困っています。
VB6でしたら Form**.Cls だけで消えるのですが、それに対応するコードはどのように記載すれば宜しいでしょうか?

ヘルプなどで見るとClearメソッドを使用するとありましたが、どうもうまく動きません。

例えば、以下の簡単な例でしたらどのように変えれば宜しいでしょうか?
宜しくお願いいたします。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim grph As System.Drawing.Graphics
  grph = Me.CreateGraphics
  grph.DrawLine(Pens.Red, 50, 25, 200, 150)
  ClearScreen(e)
End Sub

Public Sub ClearScreen(ByVal e As PaintEventArgs)
  Dim BGcolor As Color
  BGcolor = Color.FromArgb(0, 0, 0)
  e.Graphics.Clear(BGcolor) '背景色
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  ClearScreen(e)
End Sub

最近、VB6からVB.NET 2003へプログラムの移行作業を始めたものです。極々基本的なことなのかもしれませんが、.NETでフォームに描いたグラフィック(線や円など)を消去するコードがなかなかうまく書けず困っています。
VB6でしたら Form**.Cls だけで消えるのですが、それに対応するコードはどのように記載すれば宜しいでしょうか?

ヘルプなどで見るとClearメソッドを使用するとありましたが、どうもうまく動きません。

例えば、以下の簡単な例でしたらどのように変えれば宜しいでしょうか?
宜しくお願...続きを読む

Aベストアンサー

お望みのことをするには、Button2のClick時にFormのRefreshメソッドを呼んであげればOKです。そうすれば、フォームが再描画されて描画済みのグラフィックが消去されます。

コードとしてはこんな感じです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim grph As System.Drawing.Graphics
  grph = Me.CreateGraphics
  grph.DrawLine(Pens.Red, 50, 25, 200, 150)
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  Refresh()
End Sub

Qケーブルのシールド線の働きと効果について教えて!

シードケーブル線のシールド効果と働きについて教えて下さい。マイクなどに使うシールド線の被服はアースされていなくてもノイズ軽減の「シールド効果」はありますか?

いま訳あってある2台の音響機器のマイクラインのケーブルを6芯のモジュラーで(他の信号線とともに)一本のケーブルにして接続する必要が生じました。
そこで「6芯シールド」を使い先端を6芯用モジュラーにし、そしてもう一方は6ピンの無線用マイクプラグで接続しました。

ところが、ケーブルのシールド(被服)を無線用プラグのほうは機器筐体のシャーシケースのアースから流れるように接続しましたが、モジュラーの機器のほうは構造上シールドがシャーシに被服が接地できません。自分でモジュラー用圧着ペンチで端子をつけたのですが、シールドの被服は手前で単に切断されたままになっています。

お聞きしたいのは、シールドでノイズ除去効果を得るためには、両方の機器の両方ともシャーシをシールド被服に接地しないといけないのでしょうか?
そもそも「シールド線」とは被服にはアースが流れていなければオーデーオ信号等のノイズ遮断は期待できないのでしょうか?
それともシールドがあるだけ(浮いている状態)でも「遮断効果」がありますか?
一般にたいていの機器はシールドにシャーシがつながっているようにおもいますが・・・ここが判りません。

2つの機器のシャーシ間で片方だけがアース接地されていてかたほうはつながなくてもノイズ除去の効果はあるものですか?
(1)アースは両方つなげる事が必要
(2)アースは片方だけで良い
(3)アースはつながなくても良い
効果のためにはどれが正しいでしょう・・・
どなたかお教え願えませんでしょうか?
どうぞよろしくお願いします!

シードケーブル線のシールド効果と働きについて教えて下さい。マイクなどに使うシールド線の被服はアースされていなくてもノイズ軽減の「シールド効果」はありますか?

いま訳あってある2台の音響機器のマイクラインのケーブルを6芯のモジュラーで(他の信号線とともに)一本のケーブルにして接続する必要が生じました。
そこで「6芯シールド」を使い先端を6芯用モジュラーにし、そしてもう一方は6ピンの無線用マイクプラグで接続しました。

ところが、ケーブルのシールド(被服)を無線用プラグのほう...続きを読む

Aベストアンサー

#1さんの回答を拝見し「確かにその通り!」と感じるオーディオ畑の者です。

参考程度に“一般論”を書かせて頂きます。

>マイクなどに使うシールド線の被服はアースされていなくてもノイズ軽減の「シールド効果」はありますか?

どの周波数帯域に対してか? 希望する減衰量となるか?については状況しだいですが、効果はあります。

しかし、ラインケーブルであればノンシールドも多く見られますが、マイクケーブルに限ってはやはりシールドをアースすべきです。


使用される機器がアンバランスかバランスか分かりませんが、文面からは6芯ケーブル自体でマイク出力のホット、コールドの芯線は確保できており、その外側にシールドが存在するのだろうと想像します。
(その前提で進めます)

>シールドでノイズ除去効果を得るためには、両方の機器の両方ともシャーシをシールド被服に接地しないといけないのでしょうか?

両端ともシールドをアースせよ、と決まっている訳ではありません。

◆3つのパターンがあります。
(アンバランスでは2芯シールド以上、バランスでは3芯シールド以上の場合)

◇両端ともフローティング(浮いている)のもの。

 主に高周波に対するシールド効果はあるが、電源ハムなどには弱いとされています。

◇一方のみアースされているもの。

 オーディオの世界ではポピュラー。
 一方のプラグ内ではコールドの芯線とシールドが一緒に接続されており、反対側のシールドはオープンになっているケーブルが多く見られます。

◇両端ともアースされているもの。

 聴感上問題なければOKですが、アースループが出来るため、電源ハムなどを拾いやすいと考えられます。

◆一般的には片方だけアースされているものが多く、上流(送り出し)側の機器にシールド線がアースされるのが普通です。
ただし、聴感上問題がなければ、ケーブルの向きが逆になっても何ら支障はありません。

◆市販のラインケーブルの中には、シールドの両端からリード線を出し、下流側での片側アースを含め4パターンのアース方法を選択できるものもあります。

>そもそも「シールド線」とは被服にはアースが流れていなければオーデーオ信号等のノイズ遮断は期待できないのでしょうか?
それともシールドがあるだけ(浮いている状態)でも「遮断効果」がありますか?

どのような形のシールドであれ、飛び込みノイズを遮蔽してくれれば、程度の違いはあっても「効果」ありとはなりますが、信号電圧の微弱なマイク回路では、電源ハムが主な除去対象と思われますから、フローティングではダメでしょう。

プロの現場であれば測定もするでしょうが、個人レベルなら耳で判断されても良いと思います。

自作ケーブルのシールド線(編組線)の両端にリード線をハンダ付けし、4パターンの中から最もノイズの少ないものを採用してはいかがですか?

場合によっては、選択したシールドのアース法に加えて、#1さんが仰るように金属箔を両端フローティングで巻くことで、さらに効果の上がることもオーディオの世界では珍しいことではありません。
(外装の上からになります)

因みに、理想的な大地アースが取れていない場合には、各機器の接地によって、逆にノイズの増加や音質の劣化が起こることがあります。

これもケーブルの接続とは別に、やはり聴感上の判断で決定されれば良いと思います。

この2つの問題は個々の現場(環境/使用機器)で異なるため、結果でしか分からない要素が多分にあります。

#1さんの回答を拝見し「確かにその通り!」と感じるオーディオ畑の者です。

参考程度に“一般論”を書かせて頂きます。

>マイクなどに使うシールド線の被服はアースされていなくてもノイズ軽減の「シールド効果」はありますか?

どの周波数帯域に対してか? 希望する減衰量となるか?については状況しだいですが、効果はあります。

しかし、ラインケーブルであればノンシールドも多く見られますが、マイクケーブルに限ってはやはりシールドをアースすべきです。


使用される機器がアンバランス...続きを読む

Q16進数を10進数に変換する方法...

お初にお目にかかります(^^)
簡潔に質問しますm(_ _)m

バージョン:MS-Visual Basic6.0
質問内容:
16進数を10進数に変換する方法がわかりません。
Hex(Text1.Text) や Oct(Text1.Text) のような方法で
16進数・8進数に変換できるんですが…
10進数に変換する方法がわかりません。

P.S できれば、16進数→10進数、16進数や10進数→2進数
…に、変換する方法も、よろしければ教えてくださいませ
m(_ _)m

Aベストアンサー

16進数→10進数は

Dim StrHex As String
Dim intVal As Integer
StrHex = "1A"
intVal = Val("&H" & StrHex)

で出来ます。


申し訳ありませんが2進数への変換はよく分かりません。

QExcel VBA で自在に図形を変化させたい

Excel VBAを使って図形を自由に変化させたいと思っています。

一つの形の四角形や三角形をVBAを使ってシート上に表記することは出来ます。

私はユーザーインターフェースを作り、テキストボックスに値を入れることで図形を変化させることをしたいと思っています。

例えば、一つの三角形を正三角形にしたり、直角二等辺三角形にしたり、自在に角度を変えてVBAに描かせたいと思っています。

三角形は以下のようにコードを記述しましたらシートに表示できました。

Sub 三角形作成()

Set ArwLine = ActiveSheet.Shapes.AddLine(10, 10, 200, 200)
Set ArwLine = ActiveSheet.Shapes.AddLine(200, 200, 100, 400)
Set ArwLine = ActiveSheet.Shapes.AddLine(100, 400, 10, 10)

End Sub

これを以下のようにして変数(x、y)にユーザーインターファースから値を代入するようにしたいのですがどのようにすればよいのでしょうか教えてください。

Private Sub CommandButton1_Click()
UserForm1.Show

End Sub

Sub 三角形作成()

Set ArwLine = ActiveSheet.Shapes.AddLine(10, 10, 200, 200)
Set ArwLine = ActiveSheet.Shapes.AddLine(200, 200, x, y)
Set ArwLine = ActiveSheet.Shapes.AddLine(x, y, 10, 10)

End Sub

前回、「Excel VBAで図面を書きたい」という質問をしたのですがややこしく書いたため解答される方が居ませんでしたので編集して再質問をさせていただきます。
よろしくお願いします。

Excel VBAを使って図形を自由に変化させたいと思っています。

一つの形の四角形や三角形をVBAを使ってシート上に表記することは出来ます。

私はユーザーインターフェースを作り、テキストボックスに値を入れることで図形を変化させることをしたいと思っています。

例えば、一つの三角形を正三角形にしたり、直角二等辺三角形にしたり、自在に角度を変えてVBAに描かせたいと思っています。

三角形は以下のようにコードを記述しましたらシートに表示できました。

Sub 三角形作成()

Set ArwLine ...続きを読む

Aベストアンサー

VBAで出来ると思いますし、もちろん他の言語でも可能でしょう。
質問で書かれたコード「Sub 三角形作成()」で kakusan_t さん自身が既に三角形を描画してますよね?
あとは辺の長さや角度を指定するたびに、以前の図形を消してから三角形を書き直せば良いだけです。

ただ、角度が1度かわる毎に終点の座標をどれだけずらせば良いかなど、コンピューター上で座標に置き換える計算式を作る知識が必要で、これが簡単ではないと思います。(数学の知識がある方なら簡単かも知れませんけど)
本にずばりの例文があるようなものでは無いと思いますよ。

ちなみに
1.新規にExcelを開く
2.VB Editorを開く
3.VBE画面の挿入-ユーザーフォームでUserFormを作り、TextBoxを2つと、CommandButtonを1つ置く
4.CommandButtonをダブルクリックして下記をコピペ

'-----------------------------------------------------------------------------
Private Sub CommandButton1_Click()
Dim x As Single, y As Single, sh As Shape
 On Error Resume Next
 x = CSng(TextBox1.Value)
 y = CSng(TextBox2.Value)
 With ActiveSheet
  For Each sh In .Shapes
    sh.Delete
  Next sh
  .Shapes.AddLine 10, 10, 200, 200
  .Shapes.AddLine 200, 200, x, y
  .Shapes.AddLine x, y, 10, 10
 End With
End Sub
'-----------------------------------------------------------------------------

5.VBE画面の挿入-標準モジュールでModule1が追加されるので、下記をコピペ

'-----------------------------------------------------------------------------
Sub Test()
  UserForm1.Show
End Sub
'-----------------------------------------------------------------------------

6.Excelに戻りツール→マクロ実行→Testを実行

VBAで出来ると思いますし、もちろん他の言語でも可能でしょう。
質問で書かれたコード「Sub 三角形作成()」で kakusan_t さん自身が既に三角形を描画してますよね?
あとは辺の長さや角度を指定するたびに、以前の図形を消してから三角形を書き直せば良いだけです。

ただ、角度が1度かわる毎に終点の座標をどれだけずらせば良いかなど、コンピューター上で座標に置き換える計算式を作る知識が必要で、これが簡単ではないと思います。(数学の知識がある方なら簡単かも知れませんけど)
本にずばりの例文が...続きを読む

QVB.NETのコンボボックスについて

VB6からVB.NETでプログラミングを始めました。
コンボボックスのクリアの仕方や設定の仕方、また
取り出し方等を教えて下さい。

色々とヘルプも見てみたのですが、よく解りません。
宜しくお願い致します。

Aベストアンサー

クリアだけだと思ってました。
追記します。

Itemを操作します


'登録
For i = 1 To 10
  Me.ComboBox1.Items.Add(i.ToString)
Next

'取得
For i = 0 To Me.ComboBox1.Items.Count - 1
  MsgBox(Me.ComboBox1.Items(i).ToString)
Next

'完全クリア
Me.ComboBox1.Items.Clear()

部分クリア
Me.ComboBox1.Items.RemoveAt(Index値)

Qフルパスから最後のディレクトリ名を取得したい。

vb.netなのですが、例えば
c:\aaa\bbb\ccc\ddd\eee\fff.exe
というフルパスがあったとして、
eeeというディレクトリ名を取得したいのですが、
何か良い方法はないでしょうか。
それぞれのディレクトリ名の文字数や階層数は
決まっていないのですが、オススメの方法が
ありましたら、教えて頂けると助かります。

Aベストアンサー

MessageBox.Show(IO.Path.GetFileName(IO.Path.GetDirectoryName(myPath)))

IO.Path の GetDirectoryName でフォルダのフルパスを取得して、さらに IO.Path の GetFileName で最終フォルダ(またはファイル)の名前を取得。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報