Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

Archivo del blog

domingo, 14 de julio de 2024

Rotar matriz 90º. Uso de librería "Apache Commons Math".

Objetivo:

El objetivo del algoritmo es rotar una matriz o tabla de distancias 90 grados en sentido horario utilizando la librería Apache Commons Math.
La librería Apache Commons Math se utiliza para manejar eficientemente las operaciones matriciales, proporcionando una estructura de datos robusta (RealMatrix) y métodos optimizados para acceder y modificar los elementos de la matriz.

Requisitos:

- NetBeans IDE
- Apache Commons Math (versión 3.6.1)

Pasos:

1. Descarga la librería Apache Commons Math 3.6.1 desde:
   https://archive.apache.org/dist/commons/math/binaries/
2. Buscar, descargar y descomprimir el archivo "commons-math3-3.6.1-bin.zip".
3. En NetBeans, añadir la librería "commons-math3-3.6.1.jar" al proyecto.




Código Java (MatrixRotator.java):

package matrixrotator;

import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.RealMatrix;

public class MatrixRotator {

    public static RealMatrix rotate90Degrees(RealMatrix matrix) {
        int rows = matrix.getRowDimension();
        int cols = matrix.getColumnDimension();

        RealMatrix rotatedMatrix = new Array2DRowRealMatrix(cols, rows);

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                rotatedMatrix.setEntry(j, rows - 1 - i, matrix.getEntry(i, j));
            }
        }

        return rotatedMatrix;
    }

    public static void printMatrix(RealMatrix matrix) {
        for (int i = 0; i < matrix.getRowDimension(); i++) {
            for (int j = 0; j < matrix.getColumnDimension(); j++) {
                System.out.printf("%6d", (int) matrix.getEntry(i, j));
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        double[][] data = {
            {0, 610, 703, 319, 90, 290, 219, 564},
            {12, 0, 897, 165, 549, 786, 859, 303},
            {505, 115, 0, 535, 445, 677, 639, 44},
            {359, 366, 581, 0, 848, 322, 841, 165},
            {500, 128, 653, 500, 0, 903, 789, 449},
            {559, 93, 314, 176, 404, 0, 130, 964},
            {55, 349, 2, 787, 622, 425, 0, 58},
            {909, 447, 276, 860, 388, 624, 666, 0}
        };

        RealMatrix matrix = new Array2DRowRealMatrix(data);

        System.out.println("Matriz original:");
        printMatrix(matrix);

        RealMatrix rotatedMatrix = rotate90Degrees(matrix);

        System.out.println("\nMatriz rotada 90 grados:");
        printMatrix(rotatedMatrix);
    }
}


Resultado:

run:
Matriz original:
     0   610   703   319    90   290   219   564
    12     0   897   165   549   786   859   303
   505   115     0   535   445   677   639    44
   359   366   581     0   848   322   841   165
   500   128   653   500     0   903   789   449
   559    93   314   176   404     0   130   964
    55   349     2   787   622   425     0    58
   909   447   276   860   388   624   666     0

Matriz rotada 90 grados:
   909    55   559   500   359   505    12     0
   447   349    93   128   366   115     0   610
   276     2   314   653   581     0   897   703
   860   787   176   500     0   535   165   319
   388   622   404     0   848   445   549    90
   624   425     0   903   322   677   786   290
   666     0   130   789   841   639   859   219
     0    58   964   449   165    44   303   564
BUILD SUCCESSFUL (total time: 0 seconds)

Con la tecnología de Blogger.