Positionsänderung übernehmen

Maltose

Grünschnabel
Moin leute.
Also ich bin jetzt noch nen stück weiter gekommen. AM Quelltext könnt ihr sehen was mein prob ist. Es sollen jetzt halt die neuen x und y werte als neue position übernommen werden. kann mir einer sagen was ich da noch reinschreiben muss. danke

Code:
{
				Fish* f = swarmIt->second;

// find the nearest fish
				double minDistance = 2;
				RTI::ObjectHandle minDistanceIndex;
				double distance = 2;
				std::map<RTI::ObjectHandle,Fish*>::iterator swarmIt2;
				for (swarmIt2=swarm.begin(); swarmIt2!= swarm.end(); swarmIt2++)
				{
					if (swarmIt->first == swarmIt2->first) break;

					Fish* f2 = swarmIt->second;

					distance = abs(f->x.get() - f2->x.get()) + abs(f->y.get() - f2->y.get());
					if (minDistance > distance)
					{
						minDistance = distance;
						minDistanceIndex = swarmIt2->first;
					}
				}
				
				// move f to nearest fish mith minDistanceIndex HIER MUSS NOCH WAS REIN ;P

				f->move(xDir.set(x), yDir.set(y));


				// ---
PS:ich hatte mir das irgendwie gedacht, dass die werte noch mit f->move(x,y) übernommen werden müssen. kann da einer weiter machen ;P?
 
Zuletzt bearbeitet:
Die neue Position erhält du normalerweise (vereinfacht) so:

x1 = x0 + vx * dt;
y1 = y0 + vy * dt;

Dabei sind (x0,y0) die Position vor dem Zeitintervall, (x1,y1) die Postiion nach dem Zeitintervall, dt die Dauer des Zeitintervalls und (vx,vy) der Geschwindigkeitsvektor.

Hilft dir das weiter?

Es ist übrigens nicht so, dass das Lesen eines Codeschnipsels einem die Probleme des Programmierer klar macht. "Ein Code sagt mehr als tausend Worte" -- das stimmt so nicht. ;)

Ich möchte deshalb darum bitten, dass du deine Fragestellung in Zukunft etwas klarer machst.
----

Übrigens findest du unter den Links, die ich dir im anderen Thread gepostet habe, eine Menge Beispiele zu genau der Problematik, auch wenn vieles davon in Java geschreiben ist.
 
Ok danke für deine Info.
Das hilft mir jetzt im mom nich wirklich weiter.
Würde es denn weiter helfen, wenn ich den ganzen source code posten würde ?
 
Ok
Also ich habe eine Fischschwarm simulation. In dieser sollen die fische untereinander einen mindest abstand einhalten. diesen habe ich auch errechnter (ein fisch ausgehent, geht alle anderen abstände durch, den kleinsten setzt er dann als min Abstand). Jetzt muss ich nurnoch die werte , die jetzt neu errechnet wurde als neue position übergeben. das fehlt mir noch. Die stelle habe ich im code rot mackiert. wäre super wenn du da weiter wüstest. danke

Code:
muss ich wieder wech nehmen
}
über dem roten berreich is die berechnung der abstände
thx
 
Zuletzt bearbeitet:
Sorry, ich begreif das Problem irgendwie nicht. Die Fisch-Klasse wird doch wohl eine Methode zum Setzen der Position haben, oder? Benutz die doch einfach.
 
Zu der Zeile ein Hinweis:
Code:
distance = abs(f->x.get() - f2->x.get()) + abs(f->y.get() - f2->y.get());
SO berechnet man den Abstand nicht. So haut's schon eher hin:
Code:
distance = sqrt( (f->x.get() - f2->x.get()) * (f->x.get() - f2->x.get()) + (f->y.get() - f2->y.get()) * (f->y.get() - f2->y.get()) );

Oder allgemein: d = sqrt((x1-x2)²+(y1-y2)²) à la Satz des ollen Pythagoras.
 

Neue Beiträge

Zurück