#P1875. Robot
Robot
题目描述
一个用于自动化工厂的机械臂由个连接的连杆组成:连杆连接连杆,...,连杆连接连杆。每个连杆都是指定长度的直杆,长度分别为, , ..., 。每对连接的连杆之间有一个伺服电机:伺服(连接连杆和连杆),...,伺服(连接连杆和连杆),可以激活以调整连接连杆之间的角度。连杆还通过伺服连接到工厂地面(在笛卡尔坐标系中的点, , )。最后一个连杆(连杆)的自由端有一个"手",用于抓取物体。
在机械臂的初始设置中,每个伺服电机设置为无旋转(度),机械臂中的连杆与轴重合。平面是水平的(工厂地面),整个机械臂最初垂直向上。从这个初始设置开始,每个伺服电机可以在两个方向中的任意一个方向上旋转最多度。伺服通过绕轴旋转使整个机械臂在平面内移动。伺服通过绕轴旋转使机械臂(除连杆外)在(可能旋转后的)平面内移动。类似地,每个奇数编号的伺服电机可以在(可能旋转后的)平面内旋转机械臂的剩余部分,每个偶数编号的伺服电机可以在(可能旋转后的)平面内旋转机械臂的剩余部分。实际上,伺服电机绕固定在每个连杆末端的坐标系的轴和轴旋转连杆。如果我们沿着轴的正半轴看向坐标原点,逆时针旋转会产生正旋转角度。示例数据经过精心选择,以展示这些旋转的效果。
机械臂的最终定位有两个限制:机械臂的任何部分都不能低于工厂地面,并且机械臂中的连杆不能相互交叉(除了它们通过伺服电机连接的地方)。
只需检查机械臂的最终位置。
给定机械臂中的连杆数量、它们的长度以及伺服电机的拟议设置,首先确定机械臂的拟议定位是否允许。如果机械臂可以按拟议方式定位,则计算机器人手的坐标,精确到三位小数。否则,识别第一个(编号最小)设置不当的伺服电机,以及该设置不当的原因。如果连杆之间的距离小于长度单位,则认为它们相交。
输入格式
输入数据包含多个测试用例。每个测试用例按顺序包括连杆数量、它们的长度, ..., ,以及伺服电机(从伺服开始)拟议设置的角度。长度和伺服角度为实数,连杆数量为整数。任何机械臂中的连杆数量不超过个。最后一个测试用例后跟一个负整数。
输出格式
对于每个测试用例,显示测试用例编号(从开始)。然后,如果拟议设置允许,显示机器人手在原始(工厂地面)坐标系中的位置(保留三位小数)。否则,显示第一个设置不当的伺服电机的编号及其设置不当的原因。可以接受类似于下面所示的输出格式。
输入数据 1
2 25 15 0 90.0
1 1.0 45.0
2 1 1 0 45
4 1 2 3 4 90 0 0 0
3 1 1 1 0 90 90
2 1 1 45.0 45
4 1 1 1 2 0 90 0 90
8 10 1 1 1 1 1 1 2
0 0 90 0 90 0 90 0
-1
输出数据 1
Case 1: robot's hand is at (0.000,-15.000,25.000)
Case 2: robot's hand is at (0.707,0.000,0.707)
Case 3: robot's hand is at (0.000,-0.707,1.707)
Case 4: robot's hand is at (10.000,0.000,0.000)
Case 5: robot's hand is at (1.000,-1.000,1.000)
Case 6: robot's hand is at (1.207,-0.707,1.207)
Case 7: servo 4 attempts to move arm below floor
Case 8: servo 8 causes link collision