如果你有一个坐标系或地图(或者一个2D数组,如果你愿意的话),并且每个单元的编号从[0,0]到[m,n]。在给定起点和终点坐标的情况下,如何判断每一步要走的方向?如果不在网格的边界(北、南、西北等),可以向8个方向移动。所以没有上升或下降,只有左/右等。
目标是有一个“向右走”、“向左走一半”的序列。。。到达目的地时,要考虑自己一直在看哪个方向。例如,如果一个人正朝地图的左边看,并向前移动,那么他将与正在查看网格但向左移动的人落在同一个单元格中。
示例
从[0,0]到[2,1]。为了便于说明,我画了两个步骤(如果你把这一步算进网格,也可以画三个步骤)。每个箭头还指示从哪个方向进入单元格,以及进入后的观察方向。例如,在[1,1]单元中,一个向东北方向看。
我希望这不是太离题,但在我看来这是一个编程问题。如何回答取决于你自己。我用Java实现了一个图形
方向表
x+, y= right
x-, y= left
x=, y+ up
x=, y- down
x+, y+ up-right
x+, y- down-right
x-, y+ up-left
x-, y- down-left
你可以用一个if语句来决定该怎么做
if (userinput == up) {
y++;
}
或者如果我们只是想弄清楚它是如何移动的,那就用斯派尔的建议。
这实际上取决于你如何实现你的移动算法,例如你可以向东移动,然后向东北移动,最后到达同一个点,有向的顺序是可交换的。
然而,当你真的去编码它时,你可以确保你总是按照一定的顺序来浏览方向列表,例如在这里的伪代码中:
while(!atDesintaion): //every iteration is a step
//work out direction from with reference to the background
direction = "";
if(destinationY >currentY) {
currentY++; //move north
direction = "North";
}
else {
currentY--; //move south
direction = "North";
}
if(destinationX >currentX) {
currentX++; //move east
direction += "East";
}
else {
currentX--; //move west
direction += "West";
}
rotation = "North";
if(currentAngle >= 0 && currentAngle < 22.5 || currentAngle >= 337.5 && currentAngle <= 360) rotation = "North";
else if(currentAngle >= 22.5 && currentAngle < 77.5) rotation = "NorthEast";
else if(currentAngle >= 77.5 && currentAngle < 112.5) rotation = "East";
etc...
else if(currentAngle >= 292.5 && currentAngle < 337.5) rotation = "NorthWest";
if(rotation != "North") {
switch(rotation) {
case NorthEast:
switch(direction) {
case North: direction = "NorthEast";
case NorthEast: direction = "East";
etc...
}
case East:
switch(direction) {
case North: direction = "East";
case NorthEast: direction = "SouthEast";
etc...
}
etc...
}
}
}
如果你跑过任何起点坐标和终点坐标,它会先沿对角线方向移动,直到到达目标,然后再沿剩余4个方向中的一个方向移动,所以每一步都可以跟踪它刚刚移动的方向
编辑:@laune的查找表比我尝试的任何东西都简单得多,在旋转更新中使用它
要做的事情是将“当前方向”添加到流浪汉的状态中。我将使用枚举N,NE,E,。。。为了国家和行动方向。然后可以从表格中计算“方向”;我用一个(头)H(alf)L(eft),L(eft)
Hobo faces
N NE E ...
------------------
Dir N | A HL L ...
NE| HR A HL ...
E | R HR A ...
...
TomTom建议的实现
这个HashMap中的键是“LOOKING_DIRECTION”“GLOBAL_MOVE_DIRECTION”元组,得到的值是左/右/。。以西/东/的形式。。(这些方向不是全局性的,而是主观的),同时也是下一步的寻找方向。
HashMap<String, String> DIR_CONVERTER = new HashMap<>();
String[] directions = {"N", "NE", "E", "SE", "S", "SW", "W", "NW"};
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
DIR_CONVERTER.put(directions[i]+directions[j], directions[(j+8-i)%8]);
}
}
我在研究空间日期时遇到了一个问题。我有一个包含列的表:对象id及其坐标(纬度和经度,数据类型是几何体)。我需要按照从西北到东南方向的坐标对这些数据进行排序。我该怎么做?我想我当然需要使用“orderby”和索引。但是哪一个和如何?
问题内容: 我从http://www.movable-type.co.uk/scripts/latlong.html实现了“轴承”公式。但这似乎非常不准确- 我怀疑我的实现中存在一些错误。您能帮我找到它吗?我的代码如下: 问题答案: 您将括号放在错误的位置。 您正在将度数添加到以弧度为单位的值,这将不起作用。将为您完成从弧度到度的转换, 然后 在获得度值后进行归一化。 你有: 但是您需要: 也请记
假设我想以这样的方式在Java中制作一个按钮,这样当你点击它时,就会出现一个JPopupMenu。它出现的相关代码是,它使JPopupMenu的左上角显示在按钮的中心,如下所示: 不过,我希望它的左下角位于按钮的中心,有点像iTunes的做法(左下角下方有一个按钮,大小与左侧的按钮相同): 我试图通过获取JPopupMenu的高度并将其添加到弹出菜单正在显示的y坐标来实现这一点,但我发现JPopu
有人能给我一个如何用PDFBox提取“单词”坐标的例子吗 我正在使用此链接提取单个角色的位置:https://www.tutorialkart.com/pdfbox/how-to-extract-coordinates-or-position-of-characters-in-pdf/ 我正在使用此链接提取单词:https://www.tutorialkart.com/pdfbox/extract
所以我想在10x10坐标系中转换不同支点之间的三个点 想象我想要什么: 这是我的第一个坐标系 翻译成: 现在,这些点必须保持在不同系统之间的同一点上,因此只有这些点的坐标应该更改。首先,我想我应该把之前的原点添加到转换后的坐标中,这对A和B是有效的,但C是不同的,也许我使用了一个错误的公式或其他东西 请你帮帮我
我试图让两个元素,一个按钮和一个标签,在JavaFX中的一个HBox中有它们自己的单独对齐。到目前为止我的代码: 默认情况下,hbox将两个元素推到左侧,彼此相邻。 我也可以做css,如果-fx-stylesheet的东西是这样工作的。