Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
924to928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
924to928
924to928
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

geometrisches Mapping

geometrisches Mapping
17.11.2007 14:54:46
gerd
Hallo liebe VBA-User,
erstmal ein dickes Dankeschön an diese Community, konnte schon einiges hier lernen und anwenden!!
Bei einem speziellen Problem geometrischer Natur stehe ich allerdings ziemlich auf dem Schlauch:
Ich habe zwei worksheets:
1. ich habe ein Rechteckraster (wie kariertes Papier). Jedem der Schnittpunkte ist ein bestimmter Wert "abc" zugewiesen. Die Koordinaten der Schnittpunkte sind bekannt.
2. ich habe (aus einem Fenite Element-Raster) eine Fläche, die exakt der des Rasters entspricht. In dieser Fläche liegen Punkte, deren x/y-Koordinaten ebenfalls bekannt sind. Jedoch befinden sich mehr Punkte in der Fläche als Schnittpunkte in dem Raster. Zudem liegen sie "irgendwie" in der Fläche (also keine "Karo"-Struktur)
Nun möchte ich gerne zu den Punkten von "2." den jeweils geometrisch nächsten (in x und y) von "1." finden und dem entsprechenden Punkt von"2." den Wert "abc" zuweisen.
Ist hoffentlich ne schöne Knobelaufgabe für's Wochenende ;-)
Vielen Dank im Voraus! Ich weiß, dass sich hier einige Leute echt ganz schön reinhängen und finde das sehr respektabel!

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: geometrisches Mapping
17.11.2007 15:54:19
Daniel
Hi
die Brute-Force-Method wäre natürlich
- für jeden Punkt aus 2 den Abstand zu jedem Rasterpunkt aus 1 berechen,das geht über den Satz des Pythagoras Abstand² = (x1-x2)² + (y1-y2)²
- dann den Rasterpunkt auswählen, der den geringsten Abstand hat.
das ist natürlich ne grössere Rechenaufgabe, die nur mit VBA sinnvoll lösbar ist, ggf noch mit aufwendigen Matrix-Formeln.
aber vielleicht lässt sich das Ergebnis auch einfacher erzielen:
- alle Koordinaten aus 1 und 2 mit einem Umrechenfaktor so multiplizieren, daß die Koordinaten der Schnittpunkte aus 1 immer ganze Zahlen mit dem Abstand 1 sind
- die Koordinaten aus 2 auf den nächsten Ganzzahligen Wert runden.
- alle Koordinaten aus 1 und 2 wieder durch den Faktor teilen, um die Original-Koordinaten zu erhalten.
das sollte sich wesentlich schneller rechnen lassen und müsste auch ohne VBA nur mit einfachen Excelformeln umsetztbar sein.
über die gleichen Koordinaten müsste dann auch der entsprechende ABC-Wert aus 1 auffindbar sein, aber das ist dann ne Detaillösung und abhängig davon, wie die Datenstruktur aufgebaut ist.
Gruß, Daniel

Anzeige
AW: geometrisches Mapping
17.11.2007 16:42:00
gerd
Hallo Daniel,
vielen Dank für die schnelle Antwort! Werd mich direkt mal hinsetzen und die VBA-Variante austesten. Eine schön einfache Lösung.
Merci!

AW: geometrisches Mapping
17.11.2007 16:45:51
Daniel
Hi
meiner Ansicht nach ist die Formel-Lösung die schönere (und wahrscheinlich schnellere und einfacherer)
per Schleife einfach jede Möglichkeit durchprüfen ist einfach nur stupide rechnerei
Gruß, Daniel

AW: geometrisches Mapping
17.11.2007 17:15:34
gerd
Hallo Daniel,
möchte meine VBA-Skills halt mal etwas verbessern, und da erscheint mir das ne gute Übung :-).
Bei Nichterfolg werd ich deine Excel-Variante austesten.

AW: geometrisches Mapping
17.11.2007 17:42:00
Daniel
Hi
In diesem Fall ist selbstvertändlich die VBA-Lösung vorzuziehen ;-)
allerdings solltest du auch bei Erfolg mal die Formel-Lösung ausprobieren und beides miteinander vergleichen, weil du ja auch lernen musst erkennen zu können, wann eine VBA-Lösung und wann eine Formel-Lösung das bessere (weil schnellere) Ergebnis verspricht.
außerdem würde mich interessieren, ob mein Formelansatz überhaupt in die richtige Richtung führt, schließlich konnte ich mangels Beispieldaten nichts testen.
Gruß, Daniel

Anzeige
AW: geometrisches Mapping
17.11.2007 18:06:00
Daniel
Hi
ah, endlich mal ne beispieldatei.
wo sind deine bisherigen, erfolglosen Makroversuche?
oder Formeln?
kleiner Tipp noch, fass beide Tabellen in eine Datei zusammen, das macht es leichter
Gruß, Daniel

Anzeige
AW: geometrisches Mapping
17.11.2007 18:18:35
gerd
War für mich erst mal hart genug diese Sheets zu erstellen, da ich sie aus dem FE Programm automatisch auslesen musste. Und den Output zu FE hab ich auch schon. Damit habe ich mich jetzt 4 Tage beschäftigt. Funzt aber nur mit Dummy-Dateien, da ich mich bis jetzt um das geometrische Programmierproblem gedrückt habe. Hab zwar heute schon einiges probiert, aber habe noch keinen verwertbaren Code produziert. Ein Problem ist z.B., dass ich bei (worksheetsxy.cells(zeile,2).value)^2 eine Fehlermeldung bekomme. (Das ist der Wert, den ich für deine Phytagoras-Lösung) brauche. Ohne das Quadrieren funzt es... ?

Anzeige
AW: geometrisches Mapping
17.11.2007 19:06:00
Daniel
Hi
dann muss es irgenwo ein Syntaxfehler sein bei mir sieht die Zeile mit der Abstandsberechung so aus:
ABSaktuell = ((RK(r, 1) - PK(p, 1)) ^ 2 + (RK(r, 2) - PK(p, 2)) ^ 2) ^ 0.5
und funzt einwandfrei.
solltest du nicht auch für den Pythagoras nicht eher die Differenz der Koordinatenwerte quadrieren?
einen einzelnen Koordinatenwert zu quadrieren macht keinen Sinn.
noch zur Erläuterung:
zur Performance-Verbesserung habe ich die Koordinaten zur Verabeitung in array-Felder kopiert, dh.
RK(1,1) ist die X-Koordinate der ersten Zeile der Rasterpunkte
PK(1,2) ist die Y-Koordinate der ersten Zeile Datenpunkte
Gruß, Daniel
PS: die Fomel-Lösung liefert bei mir das gleiche Ergebnis wie die VBA-Lösung

Anzeige
AW: geometrisches Mapping
17.11.2007 19:24:00
gerd
Hallo,
stimmt, hatte anstatt y =f(x) ein f(x)= y ; also das Argument auf die falsche Seite gestellt.
Aber ehrlich gesagt bin ich mit meinem Latein etwas am Ende. Hab grade erst mit VBA/Programmieren begonnen und verzweifle grad etwas.
Wenn ich ABSaktuell habe, wie kann ich denn dann den kürzesten aus der Vielzahl herausfinden?
Im Moment versuche ich, ABSaktuell zu nehmen und in einer schleife mit den Werten aus dem Raster zu vergleichen. Also alle ABSaktuell rausschreiben in eine Spalte und dann mit MIN(SPALTE:SPALTE) denn geringsten Abstand zu finden. Diesen dann löschen und das ganze immer so weiter. Ist das ein "guter" Weg?
Vielen,vielen Dank für deine Bemühungen!!

Anzeige
AW: geometrisches Mapping
17.11.2007 19:36:00
Daniel
Hi
naja, nicht unbedingt,
man kann es zwar so machen, aber wozu?
speichere doch den kleinsten Abstandswert in einer Variable ABSmin und vergleiche diesen mit dem aktuell berechneten ABSaktuell.
wenn ABSaktuell kleiner als ABSmin ist, speicherst du wiederrum den akuellen ABC-Wert und schreibst den ABSakuell nach ABSmin
nach dem Schleifendurchlauf schreibst du dann den gespeicherten ABC-Wert zurück.
mein Makro dazu sieht so aus:

Sub Berechnung()
Dim RK 'Koordinaten der Rasterpunkte
Dim RasterABC 'ABC-Werte der Rasterpunkte
Dim PK 'Koordinaten der Datenpunkte
Dim PunktABC 'ABC-Werte der Datenpunkte
Dim p As Long, r As Long 'Schleifenzähler für Datenpunkte und Rasterpunkte
Dim ABSaktuell As Double, ABSmin As Double
Dim Rmin As Long
'--- Daten aus der Tabelle in Array-Variablen übernehmen
RK = Sheets("Raster").Range("E2:F64")
RasterABC = Sheets("Raster").Range("C2:C64")
PK = Sheets("Punkte").Range("B2:C104")
PunktABC = Sheets("Punkte").Range("D2:D104")
'--- Berechnung durchführen
For p = 1 To UBound(PK, 1)
For r = 1 To UBound(RK)
ABSaktuell = ((RK(r, 1) - PK(p, 1)) ^ 2 + (RK(r, 2) - PK(p, 2)) ^ 2) ^ 0.5
If ABSaktuell 


allerdings hab ich mir beide Tabellen in eine Datei geschoben und die Tabellen in die Linke obere Ecke gesetzt, dh. du musst die Zellbezüge noch anpassen.
Gruß, Daniel
btw ich hab gesehen, daß durch den Datentransfer noch NAMEN entstehen, die sich auf deine übertragenen Daten beziehen.
Diese NAMEN könnte man anstelle der Zellbezügen verwenden, so daß sich deine Datei immer automatisch an die übertragene Datenmenge anpassst.
Gruß, Daniel

Anzeige
AW: geometrisches Mapping
17.11.2007 19:50:21
gerd
Hallo Daniel,
Probier ich direkt mal aus. Das es mit arrays funzt, dachte ich mir schon. Aber meine Gedankengänge sind (noch) zu rudimentär dafür :-). Stehe grade am Anfang meines Maschinenbau-Studiums und versuche mich mit Programmieren i.Allg. und VBA im Speziellen auseinanderzusetzen. Aber echt super von erfahrenen Usern Unterstützung zu bekommen.
Habe zwar den "Kofler"+ Beispiele durchgearbeitet, aber Erfahrung ist da wohl durch nichts zu ersetzen (..wie so oft)
"Mühsam ernärt sich das Eichhörnchen.."

AW: geometrisches Mapping
17.11.2007 19:59:00
Daniel
Hi
ja die Arrays sind schon ne gute Sache.
dadurch werden die VBA-Programme ähnlich wie normale Programme.
wenn man direkt auf den Zellen rumprogrammiert, ist VBA recht langsam und man muß sich schon mit den Besonderheiten von VBA-Excel auseinandersetzen, um guten Code zu schreiben.
Gruß, Daniel

Anzeige
AW: geometrisches Mapping
17.11.2007 20:38:47
gerd
Hallo Daniel,
ICH ENTSCHULDIGE MICH TAUSENDMAL!
War meine Schuld, dein Code war astrein.

AW: geometrisches Mapping
17.11.2007 20:20:47
gerd
Hallo Daniel,
hab deine Lösung nicht ganz verstanden. Als Ergebnis sollten 103 Zuweisungen vorhanden sein. Es soll allen Punkten die jeweils nächste Rasterkoordinate zugewiesen werden. Ich versuch grade es zu ändern..
Und was meinst du mit NAMEN ?
Aber prinzipiell sieht das echt super aus. wär ich ewig nicht drauf gekommen.. Danke!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige