2维数组是怎么来的???

sunmingcn 2006-03-11 12:15:33
只给你N个1维数组
要你利用这“N个1维数组”来模拟 或是 组合成 一个完整的2维数组

有办法么?


在这个程序里只有A[X]
不能使用A[X,Y]
...全文
164 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunmingcn 2006-03-11
  • 打赏
  • 举报
回复
是整数类型
KiteGirl 2006-03-11
  • 打赏
  • 举报
回复
如果你的脚本语言数组是long类型,那么128个元素可以保存一个8*16的RGB位图,或者16*32的256色位图(比如手机游戏图块)、64*64的两色点阵(比如比较高清晰度的汉字、手机图标)。
sunmingcn 2006-03-11
  • 打赏
  • 举报
回复
COPY下来研究 头一次看数组 真不容易 ……
KiteGirl 2006-03-11
  • 打赏
  • 举报
回复
不是除二,而是开方。

H=高
W=宽

H=128/W

只可以做个8*16、4*32的小矩阵
sunmingcn 2006-03-11
  • 打赏
  • 举报
回复
脚本语言只支持0-127

用一维数组代替的话 容量就要除2????
KiteGirl 2006-03-11
  • 打赏
  • 举报
回复
了解这些之后,你就会理解BMP文件的文件头为什么要那么设计了。普通的图象亮度是256级别,但是在医学、天文领域采样模拟量可能需要更高的精确度。假如我要为高精度的医学影象设计一个高精度65536级灰度的图片格式,可能就是下面这个样子:

Type tpMapFile
fhHeight as Long
fhWidth as Long
fhPixs() as Integer
End Type

初始化这个图象的过程就是:
Dim tPixs_Length as long
Dim tMap As tpMapFile
tPixs_Length=tMap.fhHeight*tMap.fhWidth - 1 '元素总数减去1(因为数组是从0开始的)
ReDim tMap.fhPixs(tPixs_Length)

假如我想在一个文件里保存多张图片,则修改成这样:
Type tpMapFile
fhHeight as Long
fhWidth as Long
fhPageCount as Long '页数
fhPixs() as Integer
End Type

初始化这个图象的过程就是:
Dim tPixs_Length as long
Dim tMap As tpMapFile
tPixs_Length=tMap.fhPageCount*tMap.fhHeight*tMap.fhWidth - 1
ReDim tMap.fhPixs(tPixs_Length)

通常的图象是rgb格式,但是在天文,军事领域可能需要参考多个波长的光谱。假设每个波长的光谱有65536级灰度:

Type tpMapFile
fhHeight as Long
fhWidth as Long
fhLayCount as Long '位平面数
fhPageCount as Long '页数
fhPixs() as tpPix
End Type

之所以举这个例子是希望提醒你:许多看似是死规矩的东西,其实并没有限制。好比图象并非只允许是256级的RGB格式。假如你知道原理,可以根据具体情况决定如何应用。
sunmingcn 2006-03-11
  • 打赏
  • 举报
回复
因为我用的不是 VB写的代码,只是与VB十分相似

那个语言 只支持1维数组 不象VB直接就有多维数组了……
sqfeiyu 2006-03-11
  • 打赏
  • 举报
回复
道理很簡單;
A[x]=B[y,z]
x=y*z+z
所以用一個一維數組就可以表示已確定上下界的2維甚至3維4維..數組
KiteGirl 2006-03-11
  • 打赏
  • 举报
回复
1维转二维的关键在于数组的宽度设置。

假设N是1维定位,Xmax是宽度。则N=Y*Xmax+X。就这么简单。

二维数组:
N=Y*Xmax+(X)

三维数组:
N=Z*(Xmax*Ymax)+(Y*Xmax+(X))

四维数组:
N=A*(Zmax*Xmax*Ymax)+(Z*(Xmax*Ymax)+(Y*Xmax+(X)))

如果维数特别多,就需要用递归过程了。默认多维数组是88维,由于递归最大允许88级调用。但是如果你用自己设计的堆做递归,理论上只要变量空间允许,可以无限维。
KiteGirl 2006-03-11
  • 打赏
  • 举报
回复
干嘛要N个1维数组?不管它多少维,只要能装下,1维就够了。

Text1的MultiLine属性设置成True

Private Sub Command1_Click()
Dim tX As Long
Dim tY As Long
Dim tArray() As Long
Dim tArrayWidth As Long
Dim tArrayHeight As Long

tArrayWidth = 10
tArrayLine = 10

ArraySetBound tArray(), tArrayLine, tArrayWidth

For tX = 0 To 9
For tY = 0 To 9
ArrayPutValue tArray(), tY * 10 + tX, tX, tY, tArrayWidth
Next
Next

Text1.Text = ""

For tX = 0 To 9
For tY = 0 To 9
Text1.Text = Text1.Text & " " & ArrayGetValue(tArray(), tX, tY, tArrayWidth)
Next
Text1.Text = Text1.Text & vbCrLf
Next

End Sub



Public Function ArrayGetValue(ByRef pArray() As Long, ByVal pX As Long, ByVal pY As Long, ByVal pArrayWidth As Long) As Long
'返回数组pArray的pX,pY元素的值,数组pArray的宽度是pArrayWidth。
Dim tOutLong As Long

Dim tArray_Index As Long
tArray_Index = pY * pArrayWidth + pX
tOutLong = pArray(tArray_Index)

ArrayGetValue = tOutLong
End Function

Public Sub ArrayPutValue(ByRef pArray() As Long, ByVal pValue As Long, ByVal pX As Long, ByVal pY As Long, ByVal pArrayWidth As Long)
'将pValue写入数组pArray的pX,pY元素,数组pArray的宽度是pArrayWidth。
Dim tArray_Index As Long
tArray_Index = pY * pArrayWidth + pX
pArray(tArray_Index) = pValue
End Sub

Public Sub ArraySetBound(ByRef pArray() As Long, ByVal pX As Long, ByVal pY As Long)
'定义数组pArray的下界,使其容纳pX*pY个元素。
Dim tArray_Length As Long
tArray_Length = (pX * pY) - 1
ReDim pArray(tArray_Length)
End Sub
sunmingcn 2006-03-11
  • 打赏
  • 举报
回复
谢谢啦-.-
KiteGirl 2006-03-11
  • 打赏
  • 举报
回复
天呀!这么简单的问题。少等!我给你个例子!

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧