Ich möchte einen Punkt a in zweidimensionalen Suchraum zu einem anderen Punkt b mit einigen Stepsize (_config.StepSize = 0.03) verschieben.Verschieben Sie Punkt zu einem anderen in C#
Point a = agent.Location;
Point b = agentToMoveToward.Location;
//--- important
double diff = (b.X - a.X) + (b.Y - a.Y);
double euclideanNorm = Math.Sqrt(Math.Pow((b.X - a.X), 2) + Math.Pow((b.Y - a.Y), 2));
double offset = _config.StepSize * (diff/euclideanNorm);
agent.NextLocation = new Point(a.X + offset, a.Y + offset);
//---
Ist es korrekt?
Nun, welche Testfälle haben Sie versucht? –
Pythagoras schüttelt seinen Stock bei Euklid: "Verschwinde von meinem Rasen!" –
Mit einem Wort, nein. Deine euklidischeNorm ist im Grunde genommen die Hypotenuse, ich bin mir nicht sicher, was diff dir geben soll und der Versatz, wenn er richtig berechnet wird, wird zu x und y addiert und bedeutet eine Stufe in einem 45 Grad Winkel (wenn es eine Stufe gibt überhaupt). Sie müssen den Winkel des Vektors betrachten und diesen mit der Hypotenuse verwenden, um die neuen x- und y-Positionen zu bestimmen. Es gibt wahrscheinlich einige schlaue Wege, das schneller zu berechnen als Pythagoras, aber es würde funktionieren. – Lazarus