Vb.net 将1DPointArray转换为2DPointArray
我启动了一个新项目,它以ini数据的方式加载和保存TileSet。 现在的问题是,它将分片加载到一个1d列表中,该列表被复制并排序到一个1d数组中 现在我尝试将这个排序的1d数组转换为2d数组 我的尝试:Vb.net 将1DPointArray转换为2DPointArray,vb.net,math,Vb.net,Math,我启动了一个新项目,它以ini数据的方式加载和保存TileSet。 现在的问题是,它将分片加载到一个1d列表中,该列表被复制并排序到一个1d数组中 现在我尝试将这个排序的1d数组转换为2d数组 我的尝试: LoadedTiles.Sort(Function(p1, p2) (p1.Position.X.CompareTo(p2.Position.X))) LoadedTiles.Sort(Function(p1, p2) (p1.Position.Y.CompareTo(p2.Position.
LoadedTiles.Sort(Function(p1, p2) (p1.Position.X.CompareTo(p2.Position.X)))
LoadedTiles.Sort(Function(p1, p2) (p1.Position.Y.CompareTo(p2.Position.Y)))
Dim currentArray(AmountTiles) As Tile
currentArray = LoadedTiles.ToArray
Dim lengthX, lengthY As Integer
Dim yAxis As Integer = currentArray(0).Position.Y
For Each p In currentArray
If Not p.Position.Y = yAxis Then
lengthX = (p.Position.X / p.Size.Width)
lengthY = (currentArray(currentArray.Length - 1).Position.Y / p.Size.Width)
Else
lengthX = (currentArray(currentArray.Length - 1).Position.X / p.Size.Width)
lengthY = 0
End If
Next
MapTiles = New Tile(lengthX, lengthY) {}
Dim ii As Integer
For x = 0 To lengthX
For y = 0 To lengthY
MapTiles(x, y) = currentArray(ii)
If Not ii >= currentArray.Length - 1 Then
ii += 1
End If
Next
Next
这会产生错误的输出
见下图:
有可能把它做好吗?
非常感谢 1D数组中的
k
-th元素可以对应于行i=k/N
和列j=k%N
,其中N
是列数。相反的是k=i*N+j好了,伙计们,我明白了(=
公开课表格1
Dim列表作为新列表(点的)
私有子按钮1\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮1。单击
List.Add(New Point(180, 360))
List.Add(New Point(180, 180))
List.Add(New Point(180, 540))
'Convert 1d to 2d
Dim count As Point = countXYAxis(List, 180)
MsgBox(count.ToString)
Dim p(count.X - 1, List.Count - 1) As Point
MsgBox(p.Length)
Dim rofl As Integer
For i = 0 To p.GetUpperBound(0)
For j = 0 To p.GetUpperBound(1)
p(i, j) = List(rofl)
If Not rofl >= List.Count - 1 Then
rofl += 1
End If
Next
Next
For Each t In p
MsgBox(t.ToString)
Next
End Sub
Private Function countXYAxis(ByVal pt As List(Of Point), ByVal size As Integer) As Point
Dim bufferY As New List(Of Integer)
Dim cP As New Point
For Each pts In pt
If Not bufferY.Contains(pts.Y) Then
bufferY.Add(pts.Y)
End If
Next
For i = 0 To pt.Count - 1
If pt(i).Y = bufferY(0) Then
Else
cP = New Point(pt(i).X / size, bufferY.Count)
End If
Next
Return cP
End Function
结束类Sry,但是;你是说1d数组的长度是N吗?Thx mate
N
是列数。M
是行数,1d数组是N*M
。