假设我有一个4x4的迷宫,如下所示,并且我已经编写了一个程序,该程序返回从开始到结束的可能路径,如下所示:

[(3, 1), (3, 0), (2, 0), (3, 0), (3, 1), (3, 2), (2, 2), (2, 3), (1, 3), (1, 2), (0, 2), (1, 2), (1, 1), (1, 0), (0, 0), (0, 1)]

起点是第一个元素,终点是最后一个元素.

如何将第三个值添加到包含以90度为增量的旋转的每个元组?如果发生旋转,它应该返回旋转和方向,-表示逆时针旋转.假设你开始朝北.

例如,对于前两点,

[(3, 1), (3, 0), ... ]

它应该会回来,

[(3, 1, -90), (3, 0, 90), ... ]

(3, 1)号公路上,你必须转向朝西,才能进入下一个点;在(3, 0)号公路上,你必须转向北,才能进入第三个点.

对于不会发生旋转并且会发生180度旋转的一组点,

[ ... (0, 2, 180), (1, 2, 90), (1, 1, 0), (1, 0, 90), ... ]

(0, 2)时,你需要从面向北转向面向南,才能继续前进,而对于(1, 1)点,你已经面临着正确的方向.

Maze

推荐答案

若要将第三个值添加到包含以90度为增量的旋转的每个元组,可以使用以下Python代码:

import math

def normalize_vector(vector):
    length = math.sqrt(vector[0] ** 2 + vector[1] ** 2)
    if length == 0:
        return [0, 0]
    else:
        return [vector[0] / length, vector[1] / length]

def calculate_angle(vector1, vector2):
    angle_radians = math.atan2(vector2[1], vector2[0]) - math.atan2(vector1[1], vector1[0])
    
    # Convert radians to degrees
    angle_degrees = math.degrees(angle_radians)
    
    # Ensure the angle is in the range of -180 to 180 degrees
    if angle_degrees > 180:
        angle_degrees -= 360
    elif angle_degrees < -180:
        angle_degrees += 360
    
    return angle_degrees

# Example usage:
input_points = [
    [3, 1],
    [3, 0],
    [2, 0],
    [3, 0],
    [3, 1],
    [3, 2],
    [2, 2],
    [2, 3],
    [1, 3],
    [1, 2],
    [0, 2],
    [1, 2],
    [1, 1],
    [1, 0],
    [0, 0],
    [0, 1],
]

current_direction = [-1, 0]

# Store the results in a list
result = []

for i, point in enumerate(input_points[:-1]):
    current_direction = normalize_vector(current_direction)
    next_direction = normalize_vector([input_points[i + 1][0] - point[0], input_points[i + 1][1] - point[1]])
    angle = -calculate_angle(current_direction, next_direction)#negative sign (-) indicating a counter-clockwise turn
    

    # Ensure the angle is in the range of -180 to 180 degrees
    if angle > 180:
        angle -= 360
    elif angle < -180:
        angle += 360

    result.append([point[0], point[1], angle])
    current_direction = next_direction

# Print the results
print(result)

Output of the code:[[3,1,-90.0],[3,0,90.0],[2,0,180.0],[3,0,-90.0],[3,1,-0.0],[3,2,-90.0],[2,2,90.0],[2,3,-90.0],[1,3,-90.0],[1,2,90.0],[0,2,180.0],[1,2,90.0],[1,1,-0.0],[1,0,90.0],[0,0,90.0]]

此代码将接受一组点作为输入,其中每个点都表示为[x,y].它计算连续点之间的旋转Angular ,并将该Angular 附加到格式为[X,Y,ROTATION_ANGLE]的每个元组.ROTATION_ANGLE的增量为90度,负号(-)表示逆时针旋转.

Python相关问答推荐

从管道将Python应用程序部署到Azure Web应用程序,不包括需求包

如何使用Python中的clinicalTrials.gov API获取完整结果?

计算所有前面行(当前行)中列的值

如何让 turtle 通过点击和拖动来绘制?

如何比较numPy数组中的两个图像以获取它们不同的像素

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

将两只Pandas rame乘以指数

两个pandas的平均值按元素的结果串接元素.为什么?

使用groupby Pandas的一些操作

如何在给定的条件下使numpy数组的计算速度最快?

try 检索blob名称列表时出现错误填充错误""

numpy.unique如何消除重复列?

如何获取Python synsets列表的第一个内容?

干燥化与列姆化的比较

使用Openpyxl从Excel中的折线图更改图表样式

如何在GEKKO中使用复共轭物

如何使用matplotlib查看并列直方图

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

为什么dict. items()可以快速查找?

Scipy差分进化:如何传递矩阵作为参数进行优化?