5 Stimmen

Wie erhalte ich die Mittelkoordinate eines 1-dimensionalen Arrays in einer 2d-Matrix?

Hier ist das Szenario:

// getMatrix() returns int[]. It is 1-d
// I wish it was 2d.
int[] mat = MyMatrix.getMatrix();

// get height and width of the matrix;
int h = MyMatrix.height;
int w = MyMatrix.width;

// calculate the center index of the matrix
int c = ... // need help here

// manipulate the center element of the matrix.
SomeClass.foo(mat[c]);

Beispiel: Angenommen, ich habe eine 5 x 5 Matrix:

* * * * * // index 0 to 4
* * * * * // index 5 to 9
* * * * * // index 10 to 14.
* * * * * // index 15 to 19
* * * * * // index 20 to 24

Si getMatrix() zurückkehren würden int[][] wäre die Mittelpunktskoordinate dieser Matrix (2,2) 0-Index basiert. Aber da getMatrix() gibt zurück. int[] der zentrale Koordinatenindex c es 12 .

Wenn die Höhe oder Breite der Matrix jedoch gerade ist, kann der Mittelindex einer der 2 oder 4 Mittelpunkte sein, wie in einer 6 x 6 Matrix gezeigt:

* * * * * *
* * * * * *
* * @ @ * *
* * @ @ * *
* * * * * *
* * * * * *

--> Das Zentrum ist eines der @ oben.

Wie würde ich den Zentrumsindex berechnen? c eines m x n-Matrix ?

7voto

Markus Jarderot Punkte 83090

Der Mittelpunkt der Matrix ist der Mittelpunkt des Feldes. Das liegt daran, dass sich über und unter der mittleren Zeile die gleiche Anzahl von Zeilen befindet. Und in der mittleren Zeile gibt es eine gleiche Anzahl von Zellen links und rechts von der mittleren Zelle.

int c = mat.length / 2;

oder, wenn Sie wollen:

int c = (width * height) / 2;

Dabei wird davon ausgegangen, dass es einen einzigen Mittelpunkt der Matrix gibt. Das heißt, es gibt eine ungerade Anzahl von Zeilen und Spalten.

Wenn Sie den Median (Mittelwert aller Zentren) suchen, wird es komplizierter:

int x1 = (width - 1)/2;
int x2 = width/2;
int y1 = (height - 1)/2;
int y2 = height/2;
double median = (mat[width*y1 + x1] + mat[width*y1 + x2] +
                 mat[width*y2 + x1] + mat[width*y2 + x2])*0.25;

Wenn Sie nur eine der mittleren Zellen benötigen, wählen Sie eine der vier Kombinationen von x1 , x2 , y1 , y2 . Am einfachsten wäre es:

int c = width * (height / 2) + (width / 2); // lower right center

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X