2016-11-30 78 views
0

我已經寫了一個2D陣列旋轉工作得很好,但是我有一個點集中在陣列上的單個位置並顯示「!」而不是顯示數組時的數字。2D陣列旋轉和旋轉vb.net中的一個點

我曾經想過,如果我在數組旋轉過程中檢查了點,然後將點位置更改爲新的數組位置,則焦點將與數組一起旋轉,但是,新點位置不會匹配旋轉的點。

在這個例子中,我將重點放在數字「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 

回答

1

只是固定的旋轉功能邏輯

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 

接過焦點分配圈外的,因爲他們只做過一次,數學是很簡單的。

+1

謝謝!只是看到你們終於讓我意識到我做錯了 - 把它放在循環中,所以當它旋轉(正確)並且循環遇到新的旋轉位置時,它再次應用相同的數學運算,並將它發送到意外的地方。 – Fozzedout