下記VBScripサンプルで2次元動的配列をつかっているのですが
redim preserveでエラになります。
(インデックスが有効範囲にありません)
原因をご伝授ください。
環境 IIS 5.0
Windows XP

index.asp

<%@ LANGUAGE="VBScript" %>
<% 'option explicit %>
<!-- #include file="test.asp" -->
<%
Dim Order()
Dim dat()
call test(Order,dat)
response.write("dat=" & dat(1,2))

%>

test.asp

<%'Option Explicit%>
<%
function test(Order_info,dat)

Dim i
redim dat(0,7)
for i=0 to 1 <- iが0の時はOK,iが1になるとエラー
redim preserve dat(i,7)
dat(i,1)="1"
dat(i,2)="2"
dat(i,3)="3"
dat(i,4)="4"
dat(i,5)="5"
dat(i,6)="6"
next

End function

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

A 回答 (1件)

ReDimで変更できるのは最終次元の添え字です



dim dat(0,7)
と宣言した場合 変更できるのは 2次元目の7側の次元です
つまり ReDim dat( 0, 8 )や ReDim dat( 0, 3 ) は許されますが
ReDim dat(1,7) など 1次元目の変更は出来ません

直感的ではないかもしれませんが添え字が固定のものを1次元目にして対処してみてはいかがでしょう

redim dat(7,0)
for i=0 to 1
  redim preserve dat(7,i)
  dat(1,i)="1"
  dat(2,i)="2"
  dat(3,i)="3"
  dat(4,i)="4"
  dat(5,i)="5"
  dat(6,i)="6"
next
といった具合で ...

この回答への補足

上手くいきました。
ありがとうございました。

補足日時:2009/05/12 13:47
    • good
    • 0
この回答へのお礼

上手くいきました。
ありがとうございました。

お礼日時:2009/05/12 13:47

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

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

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

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

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

QC言語で2次元画像

C言語で2次元画像を書きたいです。
例えば、a.datと言うファイル
1   10
2   20
3   30
4   40
.   .
.   .
などなど

このファイルを2次元の曲線として出力したいです。
できますでしょうか?
教えてください!
お願いします。

Aベストアンサー

 まあ、直線も曲線のうちですから、一緒に考えてしまいましょう。
 で、二次元に限定されているので、ラグランジェの補間法ではなくて、最小二乗法による近似がいいと思います。計算方法は数値解析の本などにありますので、それを参考にしていただきたいのですが、これによってもっとも誤差が少ない二次関数の係数を求めることができます。

 もし出力先が画面ですと、DOS窓は少々やっかいですが、ウィンドウズにだせば割と簡単にできます。以下のリンクを参考にしてみてください。

http://www.kumei.ne.jp/c_lang/index_sdk.html

 具体的には、ウィンドウを表示する前に係数を計算して置いて、それを元にウィンドウを表示・秒がすればいいと思います。
 もし、Linuxなどを使っておられれば、X Window Systemとなります。

QReDim PreserveよりもReDimが遅い

こんにちは、配列がいくつまで取得できるのか計算するマクロを作っている時に変なことに気が付きました。
エクセルでフォームとラベルを1つ用意し、下記のようなプログラムをモジュールに書きます。

実行すると、10万ずつ数字が増えていき、数字が1000~2000万超えたあたりで、メモリ不足ですという
表示がでます。
ここで、ReDim PreserveのPreserveをとって、ReDimだけにすると、数字の増え方が目に見えて遅くなります。
ReDim Preserveとしたときは9.5秒ぐらいですが
ReDim の時は 30秒以上かかっています
3台のマシンでテストしましたが、どれも似たような結果になりました
普通に値を保持するredim Preserveの方が遅いと思うのですがなぜこのような結果になるのでしょうか?
ご教授お願いいたします。

Public Sub 配列上限取得計算()
On Error GoTo ErrEnd
Dim i As Long
Const kankaku As Long = 100000

ReDim ans(1 To kankaku) As String
ans(1) = 1
i = 2
UserForm1.Show vbModeless

Do
If i Mod kankaku = 0 Then
DoEvents
UserForm1.Label1 = i
'ここのPreserveをなくすと明らかに遅くなる
ReDim Preserve ans(1 To i + kankaku) As String
End If
ans(i) = i
i = i + 1
Loop
Erase ans
Unload UserForm1
Exit Sub
ErrEnd:
MsgBox "これ以上の配列を設定できません。" & vbCrLf & "上限は" & i & "です。" & vbCrLf & Err.Description
Erase ans
Unload UserForm1
End Sub

こんにちは、配列がいくつまで取得できるのか計算するマクロを作っている時に変なことに気が付きました。
エクセルでフォームとラベルを1つ用意し、下記のようなプログラムをモジュールに書きます。

実行すると、10万ずつ数字が増えていき、数字が1000~2000万超えたあたりで、メモリ不足ですという
表示がでます。
ここで、ReDim PreserveのPreserveをとって、ReDimだけにすると、数字の増え方が目に見えて遅くなります。
ReDim Preserveとしたときは9.5秒ぐらいですが
ReDim の時は 30秒以上...続きを読む

Aベストアンサー

こんにちは、

> ここで、ReDim PreserveのPreserveをとって、ReDimだけにすると、数字の増え方が目に見えて遅くなります。
> ReDim Preserveとしたときは9.5秒ぐらいですが
> ReDim の時は 30秒以上かかっています

 ReDim は 新築
 ReDim Preserve は 増築
という喩で説明になっているかと思います。

実際には、Eraseして、メモリの再割り当てをしつつ、配列のサイズ(ディメンション)を再定義するのがReDim
既存のメモリを維持しつつ、メモリを拡張、サイズを再定義するのがReDim Preserve
ということになります。
必然的にReDimを繰り返したら遅くなります。

ご提示のコードでPreserve キーワードを抜くと、
kankakuごとに、ReDimしている訳ですから、
せっかく格納したそれまでの値を消去していることになります。
可変長のString型変数の場合は特殊で、割り当てられるメモリサイズが固定ではありませんから
格納したり消去(長さ0の文字列を格納)したりするのに特に時間が掛かります。

ご提示のコードでPreserve キーワードを抜くと、
それまでに格納した文字長に比例したメモリサイズ、は無視されてしまいます。
本来の目的から外れたテストになってしまいます。

可変長の変数なのですから、要素数、だけではなくて、
要素数と文字長、の2点について、色々パラメータを変えながら
テストしてみた方がより有意義なものになるのではないかと思います。

 Dim ans() As String
のように一旦、文字列型として、動的配列変数を予め定義しておいた方が
テストの精度が高まりますし、ReDimに掛かる時間も短くなります。

以上です。

こんにちは、

> ここで、ReDim PreserveのPreserveをとって、ReDimだけにすると、数字の増え方が目に見えて遅くなります。
> ReDim Preserveとしたときは9.5秒ぐらいですが
> ReDim の時は 30秒以上かかっています

 ReDim は 新築
 ReDim Preserve は 増築
という喩で説明になっているかと思います。

実際には、Eraseして、メモリの再割り当てをしつつ、配列のサイズ(ディメンション)を再定義するのがReDim
既存のメモリを維持しつつ、メモリを拡張、サイズを再定義するのがReDim Preserve
ということにな...続きを読む

Q画像の2次元フーリエ変換の結果の表示の仕方について

現在、C言語で画像に2次元離散フーリエ変換を施し、高速フーリエ変換と比較しろという課題に取り組んでいます。

以下の様なプロセスで2次元フーリエ離散変換を施し、結果を表示しようと思っています。

・画像を読み込み、float型配列に入れる。
(画像は一番左上が原点とします。256×256のサイズです)
・上記のfloat型配列の、第1象限と第3象限、第2象限と第4象限を各々入れ替える。

・各行ごと、つまり、f[0][0]~f[0][255]、f[1][0]~f[1][255]、と順々)に1次元離散フーリエ変換を施す。

・上記のフーリエ変換の結果を各列ごと、つまり、f[0][0]~f[255][0],f[1][1]~f[255][1]という風に1次元離散フーリエ変換を施す。

・フーリエ変換の結果の、第1象限と第3象限、第2象限と第4象限を各々入れ替える。

・f[][]のパワースペクトル(実部の2乗+虚部の2乗の、自然対数をとったもの)を計算する。

・そのパワースペクトルとをfloat型なので、char型に置き換えて画像として出力する。

正規化等の少し細かいところは省略しました。

結果として、参考書等で見かけるもの(真ん中が直流成分で、含まれる周波数を濃淡で表したもの)になればいいのですが、上記のプロセスで大丈夫ですか?

パワースペクトルを計算した後に、何らかの移動の処理(つまり、画像の真ん中が直流成分となるような処理)を施す必要がなく、
フーリエ変換の計算の前と後に象限の入れ替えを施すだけで、直流成分が出力画像の真ん中に来るということですか?

フーリエ変換の前と後で、象限を入れ替えるだけで周波数空間では原点が真ん中になることが納得できないです。

ややこしい質問ですが、「プロセスのここが間違ってるよ」等を教えていただけると助かります。特にパワースペクトルの部分等。

よろしくお願いします。

現在、C言語で画像に2次元離散フーリエ変換を施し、高速フーリエ変換と比較しろという課題に取り組んでいます。

以下の様なプロセスで2次元フーリエ離散変換を施し、結果を表示しようと思っています。

・画像を読み込み、float型配列に入れる。
(画像は一番左上が原点とします。256×256のサイズです)
・上記のfloat型配列の、第1象限と第3象限、第2象限と第4象限を各々入れ替える。

・各行ごと、つまり、f[0][0]~f[0][255]、f[1][0]~f[1][255]、と順々)に1次元離散フーリエ変換を施す。

・...続きを読む

Aベストアンサー

??
なんで象限の入れ替えが2回入ってるんだ?
2次元FFTの前か後どちらかで1回すればいいと思うけど。

> フーリエ変換の前と後で、象限を入れ替えるだけで周波数空間では原点が真ん中になることが納得できないです。

FFTの後で入れ替えたらDCが真ん中になるのは納得できますよね。
そのままですから・・・。

FFT前で入れ替えても同じことができます。
DFTは無限に続くデータに対して変換します。
例えば□という画像があったとして、これにフーリエ変換をかけようとするとき、変換している範囲は、□という画像の見えている範囲だけと考えるのは間違っています。
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・
・・・・・・□□□・・・・・・
・・・・・・□□□・・・・・・
・・・・・・□□□・・・・・・
・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・無限に続く

というように□が縦横に無限に連なった画像を解析すると考えたほうがわかりやすいです。
もし□の象限が入れ替わってもx,yにオフセットするだけで同じ画像ですよね。

??
なんで象限の入れ替えが2回入ってるんだ?
2次元FFTの前か後どちらかで1回すればいいと思うけど。

> フーリエ変換の前と後で、象限を入れ替えるだけで周波数空間では原点が真ん中になることが納得できないです。

FFTの後で入れ替えたらDCが真ん中になるのは納得できますよね。
そのままですから・・・。

FFT前で入れ替えても同じことができます。
DFTは無限に続くデータに対して変換します。
例えば□という画像があったとして、これにフーリエ変換をかけようとするとき、変換...続きを読む

Qマクロで100マス計算! Dim i,j As Integer For i = 2 ToRang

マクロで100マス計算!

Dim i,j As Integer

For i = 2 ToRange(”A1”).End(xlDown).Row
For j=2 To Range(”B1”).End(xlToRight).Column

Cells(i,j).Value = Cells(i,1).Value * Cells(1,j).Value
Next j
Next i
Endsub

上記のように記述しましたが、
iの最終行が2となってしまっていますがなぜこのコードが間違っているのか分からないです。。どなたか教えていただけたら嬉しいです!

Aベストアンサー

確認してはいませんが…


>改行、スペースは実際にはきちんととっていますので気にしないでください
とのことなので、違っているのかもしれませんが、

>For i = 2 ToRange(”A1”).End(xlDown).Row
         ↓
 For i = 2 To Range(”A1”).End(xlDown).Row
で、うまくいきませんか?
100マス(10×10)と最初から決まっているので、範囲は 2 To 11 でも良いように思いますが…

改行、スペースなどが正しくなっているなら、Range(”A1”).End(xlDown).Rowの値が2以下になっている可能性が考えられます。(ということは、A1が空白セル、または、A3が空白セルなどなど・・)
A1が空白セルの場合は、
 For i = 2 To Range(”A2”).End(xlDown).Row
とするか、
 For i = 2 To 11
などとすることで、動作するのではないかと推測します。

Q2次元フェチになった?

僕はいま中3なんですが、初めのほうは普通の動画や画像でオナニーをしていたのですが、最近ではアニメ(2次元)などの画像ですることが多くなってきました。いまでは2次元か3次元選べといわれたら、2次元を選ぶほどになってしまいました。しかも少しロリコン寄りになってきた気がしますorzこれは直していったほうがいいんでしょうか??

Aベストアンサー

三次元では相手にも個性がある。
二次元動画ではタイミングが自分本位ではない。
二次元静止画ではシチュエーションも過程も自分で作れる。
ある意味、想像力が豊かな事の証拠ですからいいんですが…

別の見方をすれば、自己本位ともいえます。
自分の気持ちに対して予想外の反応をする三次と付き合えなくなったり、自分本位の付き合いしか出来なかったり、場合によってはDVになる危険性もあります。

人間も動物であり、性衝動は子孫を残すための神聖な本能です。
優秀な子孫を残すためには若い繁殖力の強い相手を求めるのが当然ですから、それも善しです。
真のロリコンと言うのは若いというのではなく、初潮期の女性を求める性質を言いますから、正確にはオヤジが高校生を求めるのはロリコンとは言いません。
また、江戸時代には初潮が来れば立派な大人として扱われましたから、オヤジと小5位の結婚も普通に行なわれていました。
ロリコンなどという言葉は本当に近年に作られた基準なのです。

でも、質問者様は中3ですから小5辺りでも充分に範囲内です。
ただ、大人になって10歳違いの結婚はありですが、貴方の場合、まだ10歳違いでは相手に色気も何もありませんから、多分(間に合えば)三次元では興味薄ではないでしょうか。

アニメの場合は設定はロリ以下でも、描き方はロリ以上なので、リアルより性的魅力が強調されています。その為にアニメではロリ以下でも魅力を感じるのです。つまり、描いている設定はロリでも、その表現方法はロリではない事が多いです。
ただ、それに慣れてしまうと、今度は二次元をリアル社会に投影してみるようになり、リアルでもロリコンになってしまうので注意が必要です。
この場合、直面したギャップに追いつけず、かなりのショックやトラウマを背う事になる可能性があります。少女相手の性犯罪で相手を殺しtげしまうのは、このギャップによるショックが原因だと私は考えています。だから、犯行時の記憶が不鮮明なのです。

もう一つの見方として、ロリ以下の女子を相手にしようとする感覚は、自分の未熟さの反作用でもあります。
自分の心の奥に、自分が性に対して未熟だという自覚、或いは何かしらの劣等感があるから、更に未熟で支配できるロリ以下の女子に興味を持つのです。

以上の理由から、特に異常という訳ではありませんが、それで善しとしてしまうと将来ヒトとの付き合いがしにくくなるので注意しましょう。
むしろ、男二十歳までは未熟を堂々と言えても善しです。なので、逆に年上の成人女性に勇気を持って飛び込むのもいいと思います。
(もっとも、チャンスがあるかどうかですが、巡ってきたら勇気を持って飛び込むこと)

でも、女性が中3になったら、男は高校生でも充分に恋愛対象です。
結婚相手としては10歳違いでも通常範囲です
つまり、現在5~10歳下でも、将来的には充分なので、貴方が高校卒業するまでに、女性と優しく丁寧に付き合える、或いは仕事のパートナーとして性別を意識する事無く付き合える関係を作れるように勉強しましょう。

三次元では相手にも個性がある。
二次元動画ではタイミングが自分本位ではない。
二次元静止画ではシチュエーションも過程も自分で作れる。
ある意味、想像力が豊かな事の証拠ですからいいんですが…

別の見方をすれば、自己本位ともいえます。
自分の気持ちに対して予想外の反応をする三次と付き合えなくなったり、自分本位の付き合いしか出来なかったり、場合によってはDVになる危険性もあります。

人間も動物であり、性衝動は子孫を残すための神聖な本能です。
優秀な子孫を残すためには若い繁殖力...続きを読む

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む

Q2次元フーリエ変換の実際について

「画像などを対象にする2次元フーリエ変換は、縦方向の1次元フーリエ変換と横方向の1次元フーリエ変換を組み合わせることにより計算できます」
との解説があります。下に示すような2次元の値で計算する場合、具体的にどのようにすればよいのでしょうか?
(9×9ピクセルの2次元画像でa1~a9はピクセル値とする)
          a1 a2 a3
           a4 a5 a6
           a7 a8 a9
計算方法
1)横方向(→方向)の1次元フーリエ変換をおこなう
         →a1 a2 a3
         →a4 a5 a6
         →a7 a8 a9
2)縦方向(→方向)の1次元フーリエ変換をおこなう
         →a1 a4 a7
         →a2 a5 a8
         →a3 a6 a9
これはできるのですが、「縦方向の1次元フーリエ変換と横方向の1次元フーリエ変換を組み合わせる」の意味がわかりません。

横方向や縦方向の1次元フーリエ変換した値をどのようにすればいいのでしょうか?
具体的に教えてください。

「画像などを対象にする2次元フーリエ変換は、縦方向の1次元フーリエ変換と横方向の1次元フーリエ変換を組み合わせることにより計算できます」
との解説があります。下に示すような2次元の値で計算する場合、具体的にどのようにすればよいのでしょうか?
(9×9ピクセルの2次元画像でa1~a9はピクセル値とする)
          a1 a2 a3
           a4 a5 a6
           a7 a8 a9
計算方法
1)横方向(→方向)の1次元フーリエ変換をおこなう
       ...続きを読む

Aベストアンサー

実際に扱ったことがあるのはN=2**n 点数 FFTですが、任意点数のFFTも可能のようです。

但し、2**nの場合は N*log2(N)に比例した時間で処理可能、in place computation 可能
任意点数の場合は  N*Nに比例した時間が必要、in place computation不可能 (temporary working arrayが必要)等の点が異なってきます。
点数が少ない場合は余り差はないのですが、512,1024point等と点数が増えた場合、大きな差となります。

少しサーチしてみました。

演算時間が問題になるような場合には次のフリーソフトが参考になると思われます。
http://www.fftw.org/

"二次元 FFT OR フーリエ変換 画像" 等でサーチしてみて下さい。
http://www.enjoy.ne.jp/~k-ichikawa/
フーリエ解析とは...

Qdimを使わずにredimを使う場合

VBAを使っていて、
配列数を変数で定義したいのですが、
ネットで検索すると


Dim aaaa() as integer
Redim aaa(xxx, yyy)

あるいは
Dim aaaa()
Redim aaa(xxx, yyy) as integer

のようにdimで変数を定義した後にredimで定義しなおす方法が書かれてあります。



一方で、

Redim aaa(xxx, yyy) as integer

のように、dimの定義を省略して、いきなりredimで配列を定義しても
問題なくプログラムは実行できることに気がついたのですが
これら二つの方法に違いはあるのでしょうか?

後者を使っても問題ないでしょうか?

Aベストアンサー

ReDimのヘルプより

メモ 宣言した変数がモジュール レベルまたはプロシージャ レベルにない場合、
ReDim ステートメントは宣言ステートメントと同様の働きをします。同じ名前を
持つほかの変数が後で作成されると、その変数の適用範囲 (スコープ) が広く、
Option Explicit ステートメントが指定されている場合でも、
ReDim ステートメントは後で作成された変数を参照し、コンパイル エラーは発生しません。
このような名前の競合を避けるには、ReDim ステートメントは宣言ステートメント
として使わず、配列を再定義するためだけに使用します。

と、ありますので宣言なしでRedimはしない方がいいでしょうね。
バグの温床になりそうな気配です。

Q2次元フーリエ変換

ある画像f(x,y)をθ回転させたものを2次元フーリエ変換すると、それはf(x,y)の2次元フーリエ変換F(u,v)の結果をθ回転したものになるみたいなのですが、どうしてそうなるのかわかりません。

拙い説明で申し訳ありませんがよろしくお願いいたします。

Aベストアンサー

[A]
回転なしで変換する場合、単純にフーリエ変換するだけなので、
F(u,v)=∬f(x,y)*exp(i{u,v}・{x,y})dxdy

[B]
θ回転させるには、以下の様に座標変換をすればよいから、
x <= x*cosθ-y*sinθ
y <= x*sinθ+y*cosθ
f(x,y) <= f(x*cosθ-y*sinθ,x*sinθ+y*cosθ)

θ回転させた後にフーリエ変換した場合
F(u,v)=∬f(x*cosθ-y*sinθ,x*sinθ+y*cosθ)*exp(i{u,v}・{x,y})dxdy

[C]
フーリエ変換後にθ回転させた場合
u => u*cosθ-v*sinθ
v => u*sinθ+v*cosθ
F(u,v)=∬f(x,y)*exp(i{u*cosθ-v*sinθ,u*sinθ+v*cosθ}・{x,y})dxdy
=∬f(x,y)*exp(i{u*x*cosθ-v*x*sinθ+u*y*sinθ+v*y*cosθ})dxdy
=∬f(x,y)*exp(i{u*(x*cosθ+y*sinθ)+v*(-x*sinθ+y*cosθ)})dxdy
=∬f(x,y)*exp(i{u,v}・{x*cosθ+y*sinθ,-x*sinθ+y*cosθ})dxdy

以下の様な変数変換を考える
z = x*cosθ+y*sinθ
w = -x*sinθ+y*cosθ

ここでx,yについて逆に解くと
x = z*cosθ-w*sinθ
y = z*sinθ+w*cosθ

また
dzdw=
| cosθ +sinθ|
| -sinθ cosθ|*dxdy
=(cosθcosθ+sinθsinθ)dxdy
=dxdy

以上より
F(u,v)=∬f(z*cosθ-w*sinθ,z*sinθ+w*cosθ)*exp(i{u,v}・{z,w})dzdw

積分変数の文字は自由に変えてよいからz->x,w->yと書けば
F(u,v)=∬f(x*cosθ-y*sinθ,x*sinθ+y*cosθ)*exp(i{u,v}・{x,y})dxdy

[B]と[C]より題意は示された。
----------------------------------------

興味があったので、やってみました。
フーリエ変換の係数とか、細かいところは省略しました。
間違ってたらごめんなさい。

[A]
回転なしで変換する場合、単純にフーリエ変換するだけなので、
F(u,v)=∬f(x,y)*exp(i{u,v}・{x,y})dxdy

[B]
θ回転させるには、以下の様に座標変換をすればよいから、
x <= x*cosθ-y*sinθ
y <= x*sinθ+y*cosθ
f(x,y) <= f(x*cosθ-y*sinθ,x*sinθ+y*cosθ)

θ回転させた後にフーリエ変換した場合
F(u,v)=∬f(x*cosθ-y*sinθ,x*sinθ+y*cosθ)*exp(i{u,v}・{x,y})dxdy

[C]
フーリエ変換後にθ回転させた場合
u => u*cosθ-v*sinθ
v => u*sinθ+v*cosθ
F(u,v)=∬f(x,y)*exp(i{u*cosθ-v*sinθ,u*sinθ+v*cos...続きを読む

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます


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

人気Q&Aランキング