J'ai écrit une rotation de tableau 2D qui fonctionne très bien, mais j'ai un point qui est concentré sur un seul emplacement sur la matrice et affiche un "!" au lieu du nombre lors de l'affichage du tableau. Je pensais que si je vérifiais le point pendant la rotation du tableau, puis changeais la position du point à la nouvelle position du tableau, le point de mise au point tournerait alors avec le tableau, mais le nouvel emplacement du point ne correspond tout simplement pas. correspondre au point de rotation.Rotation de tableau 2D et rotation d'un point dans vb.net
Dans l'exemple, je me concentre sur le nombre "5" (position 1,1), et devrait toujours afficher le "!" au lieu de "5".
Cette rotation fonctionne pour un point focal de 0,0, mais pas pour d'autres points. Quelqu'un peut-il me signaler ce que je fais de mal et expliquer pourquoi la logique ne fonctionne pas toujours?
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
Merci pour votre aide! Le simple fait de voir le vôtre m'a finalement permis de me rendre compte de ce que j'avais fait de mal, de le mettre dans la boucle, et quand il a été tourné (correctement) et que les boucles ont rencontré le nouvel emplacement pivoté, il a appliqué le même calcul. – Fozzedout