开发者

Move point to another in c#

开发者 https://www.devze.com 2023-02-04 18:07 出处:网络
I would like to move some point a in two dimensional search space to another point b with some stepsize (_config.StepSize = 0.03).

I would like to move some point a in two dimensional search space to another point b with some stepsize (_config.StepSize = 0.03).

Point a = agent.L开发者_StackOverflow中文版ocation;
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);
//---

Is it correct?


Assuming you mean you want to move one point towards another point and assuming your step size has distance units, then no, your calculation is not correct.

The correct formula is:

  • nextLocation = a + UnitVector(a, b) * stepSize

In C#, using just a simple Point class and the Math library, this looks like:

public Point MovePointTowards(Point a, Point b, double distance)
{
    var vector = new Point(b.X - a.X, b.Y - a.Y);
    var length = Math.Sqrt(vector.X * vector.X + vector.Y * vector.Y);
    var unitVector = new Point(vector.X / length, vector.Y / length);
    return new Point(a.X + unitVector.X * distance, a.Y + unitVector.Y * distance);
}

Edit: Updated code as per TrevorSeniors suggestion in comments

0

精彩评论

暂无评论...
验证码 换一张
取 消