【发布时间】:2015-08-21 20:01:45
【问题描述】:
我想将二维搜索空间中的某个点 a 移动到另一个具有一定步长 (_config.StepSize = 0.03) 的点 b。
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);
//---
对吗?
【问题讨论】:
-
嗯,你尝试了哪些测试用例?
-
毕达哥拉斯对着欧几里得摇着棍子:“滚开我的草坪!”
-
一句话,没有。你的 euclideanNorm 基本上是斜边,我不确定 diff 打算给你什么,偏移量,即使计算正确,也被添加到 x 和 y 中,同样意味着 45 度角的一步(如果有一步完全)。您需要查看矢量的角度并将其与斜边一起使用来确定新的 x 和 y 位置。可能有一些聪明的方法可以比毕达哥拉斯更快地计算出来,但它会起作用。
-
你想将它直接从一个位置(a)移动到另一个位置(b)吗?
-
@Hans Passant:该死的 Euclid,他总是醉醺醺地过来,也在我的草坪上睡觉。