Ich wollte mal demnächst eine Grafikroutine programmieren und breuchte eine Routine zur Schwerpunktbestimmung in einer Matrix:
Zum besseren verständnis:
Eine Matrix sieht folgendermaßen aus:
01000
01100
01000
als Ergebniss wollte ich dann gerne eine Matrix die den Schwerpunkt aller " 1" 'en in obriger Martix zusammenfasst in einen Punkt ähnlich diesem hier:
00000
01000
00000
Es reicht mir wenn ich das Prinzip zur zusammenfassung verstehe…
Wie Du anhand der Ausführungen (ich habe sie nur überflogen) ist es nicht so einfach diese Funktionen zu programmieren - okay hier geht es um den medizinischen Bereich mit Graustufen, d. h. auch die einzelnen Werte der Matrix sind ausschlaggebend, das weiß ich jetzt nicht, wie es bei deiner Aufgabe ist, da Du ja nur mit 0/1 gearbeitet hast.
Eine Möglichkeit wäre Spalte für Spalte und Zeile für Zeile zu gewichten, problematisch ist, dass aber die anliegenden Spalten, bzw. Zeilen ja auch „Gewicht“ erzeugen. Ich denke da nochmal drüber nach, vielleicht fällt mir ja noch was besseres ein.
Lösung?
so ich habe mich jetzt mal etwas damit beschäftigt und würde eine Lösung mit Hilfe des Satzes von Pythagoras anstreben, in der Vektorisierung bin ich nicht so fit.
Dein Beispiel ist leider etwas „eindeutig“.
Jedes Feld hat ja ein „Gewicht“ zu tragen, je mehr Felder in einem Bereich besetzt sind, desto mehr Gewicht wird hier erzeugt. Beispielhaft könnte man von einem Tuch ausgehen, auf dem Kugeln verteilt sind. Jede Kugel beult das Tuch an seiner Stelle aus, je mehr Kugeln sich irgendwo anhäufen, desto mehr wird das Tuch durchgedrückt (somit würden alle Kugeln an diese Stelle laufen).
Wie soll man es nun berechnen, wo diese Stelle ist. Ich habe es mir mal bildlich aufgezeichnet und bin so auf den Satz von Pythagoras gekommen, der sagt ja aus, dass das Quadrat der Hypothenuse gleich der Summe der Quadrate der Katheten ist (c²= a² + b²).
Somit habe ich im Endeffekt für jede Position auf der Matrix „Dreiecke“ angelegt, die ich ja gewichten musste. Sicherlich kommen bei den Dreiecken auch Berechnungen wie c² = 0² + 0² raus, aber das tat der Lösung wohl keinen Abbruch.
Wie bin ich auf Entfernungen / Gewichtung gekommen. Ich habe einfach die Entfernung x/y = Zeile/Spalte berechnet und folgende Werte erhalten:
Ob der ermittelte Schwerpunkt jetzt stimmt, das habe ich noch nicht prüfen können. Gegebenfalls findest Du ja noch bessere Lösungswege in den bereits geposteten Links.
so ich habe mich jetzt mal etwas damit beschäftigt und würde
eine Lösung mit Hilfe des Satzes von Pythagoras
Leider kann ich nicht so ganz nachvollziehen woher die Werte der Tabelle kommen.
Könntest Du mir vielleicht anhand des obersten linken Wertes (9,1…) erklären, wie Du darauf gekommen bist???
Ich denke das ganze ist eigentlich viel zu kompliziert gedacht, ich habe mir noch einmal die ganze Sache durch den Kopf gehen lassen und folgende „EINFACHE“ Lösung gefunden:
Man Nummeriert die Spalten und Zeilen einfach durch oben Links in der Matrix ist Zeile 1 und Spalte 1
und unten Rechts ist Zeile 4 und Spalte 4
wie wär’s, wenn Du, anstatt Dir irgendwelches Zeug auszudenken, einfach die physikalische Definition des Schwerpunktes zugrundelegen würdest? Eine solche gibt es nämlich und als Maschinenbautechniker könntest Du sie sogar kennen.
Wenn Du n Lötpunkte auf die x-Achse lötest (Massen m[i], Positionen x[i], i = 1…n), dann ist der Schwerpunkt xS der ganzen Chose gegeben durch
Summe x[i] m[i]
xS = ----------------- (Summation über i := 1...n)
Summe m[i]
Ich hoffe, Du kannst das korrekt auf Dein Matrix-Problem übertragen. Wenn noch was unklar ist, poste hier.