下記が、sin波を表示させるためのプログラムです。
これを改良し(mysin→mycosにし、mysin2→mycos2にする。)cos波を表示させたいです。
今、作ってみましたが、変な形です。
どこをどのように改良すればよいか、教えていただけませんでしょうか。

ちなみに、cos波は、picturebox2に作り、button2をクリックしたときに表示させるようにする。

Imports System.Math
Public Class Form1
Dim b As Bitmap
Dim g As Graphics
Dim p As Pen
Dim w, h, mw, mmw, mh As Integer
Dim b2 As Bitmap
Dim g2 As Graphics
Dim p2 As Pen
Dim w2, h2, mw2, mmw2, mh2 As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Text = "Sin波 Cos波"
w = PictureBox1.Width
h = PictureBox1.Height
w2 = PictureBox2.Width
h2 = PictureBox2.Height
mw = w \ 2
mmw = mw \ 2
mh = h \ 2
mw2 = w2 \ 2
mmw2 = mw2 \ 2
mh2 = h2 \ 2
Button1.Text = "Sin Curve"
Button2.Text = "Cos Curve"
b = New Bitmap(w, h)
g = Graphics.FromImage(b)
p = New Pen(Color.Black, 1)
b2 = New Bitmap(w2, h2)
g2 = Graphics.FromImage(b2)
p2 = New Pen(Color.Black, 1)
g.DrawLine(p, 0, mh, w, mh)
g.DrawLine(p, mw \ 2, 0, mw \ 2, h)
g2.DrawLine(p2, 0, mh2, w2, mh2)
g2.DrawLine(p2, mw2 \ 2, 0, mw2 \ 2, h2)
p.Dispose()
p2.Dispose()
PictureBox1.Image = b
PictureBox2.Image = b2
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, k, x0, y0 As Integer
p = New Pen(Color.Blue, 2)
For i = mw + mmw - w To w - mmw
k = mysin(i * PI / 180) * mh * 0.9
x0 = mmw + i
y0 = mh - k
g.DrawLine(p, x0, y0, x0 + 1, y0 + 1)
Next
PictureBox1.Image = b
End Sub
Function mysin(ByVal arg) As Double
Dim s = Sign(arg)
Dim mp = Int(arg / (2 * PI))
arg = arg - 2 * PI * mp
If s < 0 Then arg = 2 * PI - arg
If arg > 3 * PI / 2 Then
Return -s * mysin2(2 * PI - arg)
ElseIf arg > PI Then
Return -s * mysin2(arg - PI)
ElseIf arg > PI / 2 Then
Return s * mysin2(PI - arg)
Else
Return s * mysin2(arg)
End If
End Function
Function mysin2(ByVal arg) As Double
Return arg - Pow(arg, 3) / 6 + Pow(arg, 5) / 120 - Pow(arg, 7) / 5040
End Function
Function mycos(ByVal arg2) As Double
Dim c = Sign(arg2)
Dim mp = Int(arg2 / (2 * PI))
arg2 = arg2 - 2 * PI * mp
If c < 0 Then arg2 = -2 * PI - arg2
If arg2 > 3 * PI / 2 Then
Return c * mycos2(-2 * PI - arg2)
ElseIf arg2 > PI Then
Return c * mycos2(arg2 - PI)
ElseIf arg2 > PI / 2 Then
Return -c * mycos2(PI - arg2)
Else
Return -c * mycos2(arg2)
End If
End Function
Function mycos2(ByVal arg2) As Double
Return 1 - Pow(arg2, 2) / 4 + Pow(arg2, 4) / 24 - Pow(arg2, 6) / 720
End Function
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim j, l, x1, y1 As Integer
p2 = New Pen(Color.Red, 2)
For j = mw2 - mmw2 - w2 To w2 - mmw2
l = mycos(j * PI / 180) * mh2
x1 = mmw2 + j
y1 = mh2 - l
g2.DrawLine(p2, x1, y1, x1 + 1, y1 + 1)
Next
PictureBox2.Image = b2
End Sub
End Class

「cos波表示について マクローリン展開 」の質問画像

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

A 回答 (1件)

Function mycos(ByVal arg2 As Double) As Double


  Return Cos(arg2)
End Function
これで何がおかしいか分かるんじゃない?

mycos2 はマクローリン展開の公式のままだし。
    • good
    • 0

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

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

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

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

Qエクセル(マクロ記録)

よろしくお願いします。
エクセルで、印刷マクロを作ろうと考えています。
             (基本、入門者です)
マクロ記録で、作っていますが、
記録終了するたびに「 印刷 」がかかっては、
用紙が何枚あっても足りません。

いい考えがありましたら、お教えください。
お願いします。

Aベストアンサー

#3の回答者です。

>出来たら、この i=1 の意味を教えていただけませんでしょうか?
単に、それはページ数です。

ヘルプを引用します。(PrintOut で調べました)

式.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)

From オプション 印刷を開始するページの番号を指定します。この引数を省略すると、最初のページから印刷します。
To オプション 印刷を終了するページの番号を指定します。この引数を省略すると、最後のページまで印刷します。

と出てきます。

Qc言語またはVBのSin Cos Tan

お世話になります

ふと思ったのですが

c言語やVBのSin Cos Tanって、パラメータはラジアンですよね。

でも、中学などで習うSin Cos Tanは直接角度を指定してましたよね?

【質問1】
なぜ、プログラミング言語ではラジアンなのでしょうか?

【質問2】
角度指定で求められる同等の関数が有りますでしょうか?

Aベストアンサー

VBとはちょっと違いますが、Excel-VBAでは、WorksheetFunction.Radiansで度をラジアンに、WorksheetFunction.Degreesでラジアンを度に変換できます。これは、Excelのワークシート関数にRadiansやDegreesが存在し、それをVBAで利用できる設計のためです。


ところで、プログラミングの古典的な位置付けにあるBASIC言語でも、三角関数の引数にはラジアンが使われており、かなり昔から、その分野では弧度法が用いられていた事が伺えます。


中学校の学習内容には微積分やプログラミングは入っていないので、直感的に解りやすい(アナログの丸い時計などに当てはめて考えやすい)度数法が優先して教えられるのでしょう。


内容が高度になるにつれ、弧度法のほうがスタンダードという扱いになるんじゃないかと思います。

Qエクセル マクロコードの記述の勉強

独学でエクセルでのマクロのコード記述ができるようになりたいのですが、コードがかける人はどのようにしてかけるようになったのでしょうか?

プログラミング関係にはまったくの初心者なので、入門本を立ち読み程度読んでみたのですが、「面白そうだが、かなり手強そう」というような印象でした。

現実的な問題として、実際にコードをかける人は、プログラミング関係の学校等で学んだ人ぐらいしかいないのでしょうか?

めざすレベルはエクセルでこうしたいと考えたものを調べながらコードをかける程度のレベルです。

Aベストアンサー

> 実際にコードをかける人は、プログラミング関係の
> 学校等で学んだ人ぐらいしかいないのでしょうか?

そんな事ないです。私も独学で覚えましたから。

エクセルはマクロ記録がありますので、実際の操作を記録して書かれたコードを追っていったり、書き直したり出来ます。
VisualBasicEditor画面でコードにカーソルを置き、F1キーを押すとVBAヘルプ(たしか標準ではインストールされないので追加インストールの必要がある)が開くので、意味を調べたり、サンプルコードを見たりして覚えて行きました。
ネットにも沢山サンプルがありますし。

変数の使い方とforやif等を覚えてマクロ記録を直すだけでも結構便利になります。

QVBで表示したホームページのログイン要求にプログラムで応答したい。

VBでWeb browserコントロールで表示したホームページのログイン、パスワード入力要求に対し、プログラムで自動的に応答したい。又、ログイン後のホームページ画面の内容を読みとるにはどうしたらよいでしょうか。
本で調べたりしたのですがわからなくて。

Aベストアンサー

WebBrowserから入れたぞ。

Private Sub Command1_Click()

Dim URL As String
Dim s As String
Dim PostData() As Byte

URL = "http://login.mail.goo.ne.jp/certify-cgi/oshiete/ask_login.cgi"
s = "success=http://oshiete1.goo.ne.jp/goo_jumpin.php3?next_to=mypage.php3" _
& "&site=oshiete.goo.ne.jp" _
& "&auto=0" _
& "&uname=" & Text1.Text _
& "&pass=" & Text2.Text
PostData = StrConv(s, vbFromUnicode)
WebBrowser1.Navigate URL, 0, "", PostData
End Sub

WebBrowserから入れたぞ。

Private Sub Command1_Click()

Dim URL As String
Dim s As String
Dim PostData() As Byte

URL = "http://login.mail.goo.ne.jp/certify-cgi/oshiete/ask_login.cgi"
s = "success=http://oshiete1.goo.ne.jp/goo_jumpin.php3?next_to=mypage.php3" _
& "&site=oshiete.goo.ne.jp" _
& "&auto=0" _
& "&uname=" & Text1.Text _
& "&pass=" & Text2.Text
PostData = StrConv...続きを読む

Qエクセルについているマクロが出てこない・・・

 エクセルをひらき、ツール→マクロ→マクロでマクロの作成ができると聞きましたが、私のエクセル2002ではマクロのその機能が空欄状態です。復帰や回復できる方法を教えて下さい。

Aベストアンサー

(1)自分でマクロの記録を採る。
    ツールーマクロー新しいマクロの記録
(2)または他人がマクロの記録をとった。
   (3)他人がVBAコード(プログラム)を組んだ
    ツールーマクローVBEープログラム作成
場合に出てくる。(1)(2)(3)ともやっていないから、出てこないのは当然。
(1)なぞはマクロの画面でマクロー編集でコードが見れます。
ーーー
本でもWEBでも、マクロに関する本1冊か、「エクセル マクロ」でWEB照会して、勉強し。予備知識をえるべきです。

QAプログラムの画面表示情報をVBより参照したいのですが....

最近VB2005をはじめた超初心者です。
Aと言うプログラムの画面表示上に通常0の数字が入っている項目があります、この項目が0→1になったときVB側で情報をつかみVB側で作成した処理をさせたいと思っています。
教えてgoo、ネット等で調べましたが同類の回答が見つかりませんどうぞよろしくお願いします。
現在わかったこと。
1.画面上の表示データを調べるにはウィンドウエックスプローラを使うらしい。
2.WIN32APIに対してGETを発行するらしい。
できましたら手順とサンプルを回答していただければ大変助かります。

Aベストアンサー

> 1については教えてgoo

できれば URL も明記して頂けると良かったのですが……

> 2についてはVB2005のヘルプ

GET に続く文字列はありませんでしたか?

> サンプルに関しては回答していただいた方にご迷惑がかかるかも

というより、あなたご自身が意味をわからずに使うのはよろしくないという意味です。

> ヒントに基づき自力で書籍等で調べたいと思います

ご質問の「Aと言うプログラムの画面表示上に通常0の数字が入っている項目」というのは文字列ですか?

DrawText などで描画された画像の場合は文字列として取れないと思われますが、次のような手順を
踏めば取得できるかも知れません。

(1) メインウィンドのハンドルを得る
 マウスカーソルの位置からであれば WindowFromPoint
 ウィンドキャプションの条件からであれば FindWindow
 または EnumWindows など、まだ他にもありますが……

これがおそらくあなたの仰る「A というプログラム」のウィンドハンドルを得る操作になると思われます。

(2) メインウィンドのハンドルから子ウィンドを列挙する
 EnumChildWindows など

これがあなたの仰る「項目」という子ウィンドハンドルを得る操作になると思われます。

(3) ウィンドの中から所望のテキストを得る
 GetWindowText など

ここで運が良ければあなたの仰っている「0」や「1」というテキストが得られることになります。

場合によっては 1 ~ 3 を組み合わせて所望のウィンドを探す必要があるかも知れません。

また WIN32API を使わず VB2005 のみでも (1) の列挙は出来ます。

@IT:.NET TIPS デスクトップ上のすべてのメイン・ウィンドウを列挙するには? - C# VB.NET
http://www.atmarkit.co.jp/fdotnet/dotnettips/233enumwin/enumwin.html

> 1については教えてgoo

できれば URL も明記して頂けると良かったのですが……

> 2についてはVB2005のヘルプ

GET に続く文字列はありませんでしたか?

> サンプルに関しては回答していただいた方にご迷惑がかかるかも

というより、あなたご自身が意味をわからずに使うのはよろしくないという意味です。

> ヒントに基づき自力で書籍等で調べたいと思います

ご質問の「Aと言うプログラムの画面表示上に通常0の数字が入っている項目」というのは文字列ですか?

DrawText などで描画された画像...続きを読む

Qエクセル2010で作成したマクロ

エクセル2010で作成したマクロブックがあります。
このエクセルを知人にメールで送りました。

知人のエクセルは2007です。
マクロブックのフォームボタンを押しても何も動作しない状況との事です。

エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

素人の質問で申し訳ありませんが、ご指導お願いいたします。

Aベストアンサー

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイルの形式をマクロ有効ブックにして保存したのを送ったか再確認する
といったところをよく確認してください


先方に対してあなたが確認すべきポイントとしては、
○「何も起こらない」とは、具体的にどんな状況なのか再確認する
 ・ホントにうんともすんとも反応が無いということなのか
 ・実は何かエラーメッセージっぽいダイアログが現れて、OKをクリックしてもマクロが動作した様子が無いとかの状況では無かったか



具体的な状況が明らかになったら、ようやく対処を検討する事ができるようになります。
●そもそもどういうマクロを作成したのか、ご自分の作成したマクロをよく確認して、「反応が現れない」マクロを書いてたんじゃないのか再確認する
 たとえば無意味にon error resume nextのような仕込みをしてたりしないか
 たとえば不適切なデータに対して何も作動せずに終わってしまうようなそもそも作りにしてたんじゃないか
 とか。

●実は何かダイアログが出てたのなら、具体的にどんなダイアログなのか正確に聞き取って、あなたの方で対処を考える
 「マクロが無効になってる」のなら、マクロを有効にして実行するように伝える
 とか。

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイル...続きを読む

Q【VB2005】別のプログラムから別のプログラム起動

"A"というVB2005で、作成したプログラムがありまして、
メインのフォームがあり、
そこにボタンがあります。
Shellの関数を使って、クリックイベントで、
指定したExe"B"を立ち上げます。

そのExe"B"は、VB2005で作成したオリジナルのプログラムです。
プロジェクトは別で作った物と考えてください。

Exe"B"を起動した画面を[フォーム1]と考えて、
ボタンがあり、クリックすると
別の[フォーム2]が表示するはずなのですが、
特にエラーも掴まずに、Showで開くことができません。

しかし、Exe"B"からダイレクトに起動させて
ボタンをクリックしたら[フォーム2]が表示されます。

どうしたら、Exe"A"からExe"B"を起動して
Exe"B"からフォーム2を呼び出すことができるか、
考えられる要因などをアドヴァイスして頂けたら助かります。

Aベストアンサー

意味がよくわかりませんので、補足をお願いします。

A.EXE と B.EXE という実行ファイルがあり、それらは VB 2005 で
作ったもので……
A.EXE から Shell 関数で B.EXE を起動すると B.EXE が持っている
Form2 の表示が不可能となるが
A.EXE を起動していない状態で B.EXE を起動すると B.EXE が
持っている Form2 の表示が可能である。

という意味なのでしょうか?

A.EXE から B.EXE の起動と表示を行う箇所のコードも記述して
頂けると何かわかるかも知れません。

Qエクセルで作成したマクロが他のシートに反映しない

必要に迫られ始めてマクロをエクセル上で作成してみました。(初心者)
そのマクロを違うエクセルファイル上でも反映させたいのですが
マクロを作ったおおもと(最初)のファイルを閉じてしまうと違うエクセルファイルを開いてもマクロが反映されていません。
マクロでの命令内容としては 
エクセル上の数字の羅列→グラフ作成→上書き保存 という手順で作りました。
他のエクセルファイルも同じように数字の羅列があります。それを同じ作業(グラフ作成→上書き保存)したいのです。
一度作ったマクロを他のエクセルファイルにも反映させるにはどうしたら良いのでしょうか?
説明がわかりにくくてすみません。
よろしくお願いします。

Aベストアンサー

マクロの記録先を「個人用マクロブック」にするのが良いと思います。
一回マクロの記録を行い「保存先」を「個人用マクロブック」にします。するとPERSONAL.XLSという特別なブックが作成されます。

このブックの標準モジュールシートに先に作ったマクロを貼り付けてください。

そうすればエクセルを開くと、どのブックでもマクロが実行可能になります

Qコンボボックス等における表示アイテムの設定方法(VB5.0→VB6.0移植)

秋月, "Visual basic 1001 Tips", 725-725,オーム(1998). ISBN4-274-06247-3に
「ユーザーがコンボボックスのアイテムにアクセスできるように、プログラムでList, ListCount, ListIndex プロパティを設定できます」
との記載がありますが、
Dim CTP$(16)
Call SetCTP(CTP$(), IA&): 'IA& = 5
UpdateColor$ = CTP$(IA&)
UpdateColorList.Clear
UpdateColorList2.Clear
For IA& = 1 To 16
UpdateColorList.AddItem CTP$(IA&): 'リストボックス
UpdateColorList2.AddItem CTP$(IA&): 'コンボボックス
If UpdateColor$ = CTP$(IA&) Then UpdateColorList.ListCount = IA&
If UpdateColor$ = CTP$(IA&) Then UpdateColorList2.ListCount = IA&
Next IA&
では、いずれも「コンパイルエラー。値の取得のみ可能なプロパティに値を設定することはできません」とのメッセージが表示され使用できません。
VB.5.0からVB.6.0への書き換えではどのように対応したかご存知の方お知らせください。
現在の設定状況を初期値として表示し、オペレーターが変更可能にするためのものです。
<BODY>に使用した色を除外するために、IEのみ対応している色にも対応するために、16という数値は変化します。変更ルーチンは作成していません。

秋月, "Visual basic 1001 Tips", 725-725,オーム(1998). ISBN4-274-06247-3に
「ユーザーがコンボボックスのアイテムにアクセスできるように、プログラムでList, ListCount, ListIndex プロパティを設定できます」
との記載がありますが、
Dim CTP$(16)
Call SetCTP(CTP$(), IA&): 'IA& = 5
UpdateColor$ = CTP$(IA&)
UpdateColorList.Clear
UpdateColorList2.Clear
For IA& = 1 To 16
UpdateColorList.AddItem CTP$(IA&): 'リストボックス
UpdateColorList2.AddItem CTP$(IA&): 'コンボボック...続きを読む

Aベストアンサー

ListCountではなくてListIndexに代入するのでは?
あと、代入時は-1しないと期待したものが選択されないと思います。


人気Q&Aランキング

おすすめ情報