vec_to_angle problem

Posted By: Bone

vec_to_angle problem - 07/25/10 16:56

I want to move an entity to a position given by a vector.
Is the entity at the position it shall stop.
To know in which direction the entity must move I use vec_to_angle.

With vec_dist I check whether the entity at the position or not.

While the distance > 0 the entity move.

There are two problems:

If I don´t create the Entity at 0,0,0
the entity move a little bit next to the position given by
the vector.
In that case the vec_dist value is never 0.

If the entity is at 0,0,0 it works with reservations.
If the speed of the entity is too high
the vec_dist value is also never 0.


If the speed is 0.1 it works
with 0.5 it doesn´t work



I use this script:
Code:
var position = 1;

VECTOR* zwei = nullvector;


ENTITY* test_train;

action train()
{
	
	test_train = me;
	c_setminmax(test_train);	
}


function move_train()
{
	VECTOR* temp = nullvector;

	
	vec_set(temp.x, zwei.x); // 
	vec_sub(temp.x,test_train.x); // from the vec_to_angle example
	vec_to_angle(test_train.pan,temp.x); // from the vec_to_angle example
	


	while(position != 0)
	{

	position =  vec_dist(zwei.x,test_train.x); 
 
 	
 	c_move(test_train,vector(0.1,0,0), NULL, IGNORE_PASSABLE| GLIDE);
	wait(1);
	}





}

function main()
{
	
	level_load("");
	
	wait(1);
	

	vec_set(zwei.x,vector(600,450,0)); // position the entity shall move to
	
	
	ent_create("v200.mdl",vector(0,0,0), train); // train entity

	
	on_k = move_train;
	

}



Anybody know the problem or have an idea what I can do?

Thanks for read my post laugh

good evening
Posted By: Superku

Re: vec_to_angle problem - 07/25/10 17:48

Why don't you use while(position > some small value) ?!
When you are programming you will always have to deal with inaccuracies, they result from the implementation and limitation of numbers on computers.
Posted By: Saturnus

Re: vec_to_angle problem - 07/25/10 17:59

Also change

VECTOR* zwei = nullvector;
VECTOR* temp = nullvector;

to

VECTOR zwei;
VECTOR temp;

You don't really want to modify the nullvector, huh?
Posted By: Bone

Re: vec_to_angle problem - 07/25/10 18:54

I changed it wink

Ich kann keine kleine Zahl nehmen da es ja schon exakt sein muss.
Der Zug würde irgendwann irgendwo landen.
Schon nach ein paar "Metern" fährt er dann ja schon neben den Gleisen
und so ist es ja nicht richtig wink

Es ist ja nur exakt wenn die Distanz zwischen der Position und dem Zug
0 ist.

Edit:
Ach quatsch. Hab da doch glaub ich n kleinen Denkfehler...
Muss ich mir nochmal genau überlegen
Posted By: Superku

Re: vec_to_angle problem - 07/25/10 18:58

Du scheinst es nicht ganz zu verstehen, Computerzahlen sind NICHT exakt, das ist technisch unmöglich, du kannst keine nicht-periodische Zahl mit unendlich Nachkommastellen, wie es nun mal die irrationalen Zahlen sind, mit endlich vielen Informationen in den PC übertragen, d.h. bei deiner Distanz-Berechnung treten schon die ersten Ungenauigkeiten auf.
Auch wird var nicht mit deiner gewünschten Exaktheit gespeichert, sondern nur mit einer Genauigkeit von 0.001.

Um dein Problem zu lösen: Ändere deinen Code in folgenden:

while(position > 0.5)
{

position = vec_dist(zwei.x,test_train.x);

vec_set(temp.x, zwei.x); //
vec_sub(temp.x,test_train.x); // from the vec_to_angle example
vec_to_angle(test_train.pan,temp.x); // from the vec_to_angle example


c_move(test_train,vector(0.1,0,0), NULL, IGNORE_PASSABLE| GLIDE);
wait(1);
}
Posted By: Bone

Re: vec_to_angle problem - 07/25/10 19:08

Ja grad erkannt was du meintest

Steh grad ein bisschen auf dem Schlauch

scheint auch jetzt zu funktionieren

Das macht wohl die müdigkeit. Vielen dank für die Hilfe

Hier kommt man echt immer zum Ziel laugh

Obwohl ich auch noch nicht genau weiss warum.
Die abweichung der Distanz bei höherer Geschwindigkeit
lag nicht in bereich von +/- 10 sondern bei 30


Posted By: Superku

Re: vec_to_angle problem - 07/25/10 19:35

"Obwohl ich auch noch nicht genau weiss warum.
Die abweichung der Distanz bei höherer Geschwindigkeit
lag nicht in bereich von +/- 10 sondern bei 30"

Was meinst du genau?
Wenn deine Distanz bspw. noch 5 beträgt, du bei einer Distanz kleiner 2 die Schleife beendest und deine Lok pro frame um 10 quants bewegst, dann wird sie immer vor und zurückspringen, weil die Bewegung ja nicht fließend ist sondern stückweise (wegen pro frame 10 quants), der Betrachter empfindet es ja nur als flüssige Bewegung.
Posted By: Bone

Re: vec_to_angle problem - 07/25/10 20:05

Das Problem war das wenn ich das Modell nicht an Position 0,0,0 erstellt hatte
es immer an der Zielposition vorbei fuhr.

Demnach war dann die Distanz durch vec_dist immer 30+ , je nachdem wie
weit vom Null Punkt erstellt wurde

Das hat sich aber jetzt zauberhafter weise erledigt.
Edit :

Es gibt nun ein anderes Problem.

Es wird nicht immer angehalten am Endpunkt da ja die Distanz ungenau sein kann.

Ich hab die While Schleife für die Bewegung mit verschieden niedrigen Werten bestückt und dabei ist
mir aufgefallen das zB bei positon > 0.1 öfter und schneller
nicht am ende gestoppt wird (bzw jetzt nicht von vorne begonenn wird) also wenn ich position > 0.8 prüfe

Jetz fehlen mir Ideen.
Ab und zu wird einfach weiter gefahren und das darf einfach
nicht passieren


© 2024 lite-C Forums