二维数组旋转和旋转 vb.net 中的一个点
2D Array Rotation and Rotating a Point in vb.net
我写了一个 2D 数组旋转,它工作得很好,但是我有一个点集中在数组上的单个位置并显示一个“!”而不是显示数组时的数字。
我原以为在阵列旋转的时候勾选点,然后把点的位置改成新的阵列位置,焦点就会随着阵列旋转,结果新的点位置就不会了' t匹配旋转后的点
在示例中,我关注数字“5”(位置 1,1),并且应该始终显示“!”而不是“5”。
此旋转适用于焦点 0,0,但不适用于其他点。有人可以向我指出我做错了什么并解释为什么逻辑并不总是有效吗?
Public Module Module1
Dim focalX As Integer = 1
Dim focalY As Integer = 1
Sub Main()
Dim src(,) As String =
{
{"1", "2", "3"},
{"4", "5", "6"},
{"7", "8", "9"},
{"0", "1", "2"}
}
ShowArray(src)
src = RotatedCW(src)
ShowArray(src)
src = RotatedCW(src)
ShowArray(src)
src = RotatedCW(src)
ShowArray(src)
Console.WriteLine()
Console.WriteLine("Press Enter to exit...")
Console.ReadLine()
End Sub
Sub ShowArray(src(,) As String)
Console.WriteLine(focalX & ", " & focalY)
For i = 0 To src.GetUpperBound(0)
For j = 0 To src.GetUpperBound(1)
If focalX = j And focalY = i Then
Console.Write("!" & " ")
Else
Console.Write(src(i, j) & " ")
End If
Next
Console.WriteLine()
Next
Console.WriteLine()
End Sub
Function RotatedCW(src(,) As String) As String(,)
Dim maxX As Integer = src.GetUpperBound(0)
Dim maxY As Integer = src.GetUpperBound(1)
Dim newArray(maxY, maxX) As String
For i = 0 To maxX
For j = 0 To maxY
newArray(j, maxX - i) = src(i, j)
If focalX = j And focalY = i Then
focalX = maxX - i
focalY = j
End If
Next
Next
Return newArray
End Function
End Module
刚刚修复了你的旋转函数逻辑
Function RotatedCW(src(,) As String) As String(,)
Dim maxX As Integer = src.GetUpperBound(0)
Dim maxY As Integer = src.GetUpperBound(1)
Dim oldFocalY = focalY
focalY = focalX
focalX = maxX - oldFocalY
Dim newArray(maxY, maxX) As String
For i = 0 To maxX
For j = 0 To maxY
newArray(j, maxX - i) = src(i, j)
Next
Next
Return newArray
End Function
将焦点分配排除在循环之外,因为它们只完成一次并且数学运算非常简单。
我写了一个 2D 数组旋转,它工作得很好,但是我有一个点集中在数组上的单个位置并显示一个“!”而不是显示数组时的数字。
我原以为在阵列旋转的时候勾选点,然后把点的位置改成新的阵列位置,焦点就会随着阵列旋转,结果新的点位置就不会了' t匹配旋转后的点
在示例中,我关注数字“5”(位置 1,1),并且应该始终显示“!”而不是“5”。
此旋转适用于焦点 0,0,但不适用于其他点。有人可以向我指出我做错了什么并解释为什么逻辑并不总是有效吗?
Public Module Module1
Dim focalX As Integer = 1
Dim focalY As Integer = 1
Sub Main()
Dim src(,) As String =
{
{"1", "2", "3"},
{"4", "5", "6"},
{"7", "8", "9"},
{"0", "1", "2"}
}
ShowArray(src)
src = RotatedCW(src)
ShowArray(src)
src = RotatedCW(src)
ShowArray(src)
src = RotatedCW(src)
ShowArray(src)
Console.WriteLine()
Console.WriteLine("Press Enter to exit...")
Console.ReadLine()
End Sub
Sub ShowArray(src(,) As String)
Console.WriteLine(focalX & ", " & focalY)
For i = 0 To src.GetUpperBound(0)
For j = 0 To src.GetUpperBound(1)
If focalX = j And focalY = i Then
Console.Write("!" & " ")
Else
Console.Write(src(i, j) & " ")
End If
Next
Console.WriteLine()
Next
Console.WriteLine()
End Sub
Function RotatedCW(src(,) As String) As String(,)
Dim maxX As Integer = src.GetUpperBound(0)
Dim maxY As Integer = src.GetUpperBound(1)
Dim newArray(maxY, maxX) As String
For i = 0 To maxX
For j = 0 To maxY
newArray(j, maxX - i) = src(i, j)
If focalX = j And focalY = i Then
focalX = maxX - i
focalY = j
End If
Next
Next
Return newArray
End Function
End Module
刚刚修复了你的旋转函数逻辑
Function RotatedCW(src(,) As String) As String(,)
Dim maxX As Integer = src.GetUpperBound(0)
Dim maxY As Integer = src.GetUpperBound(1)
Dim oldFocalY = focalY
focalY = focalX
focalX = maxX - oldFocalY
Dim newArray(maxY, maxX) As String
For i = 0 To maxX
For j = 0 To maxY
newArray(j, maxX - i) = src(i, j)
Next
Next
Return newArray
End Function
将焦点分配排除在循环之外,因为它们只完成一次并且数学运算非常简单。