二维数组旋转和旋转 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

将焦点分配排除在循环之外,因为它们只完成一次并且数学运算非常简单。