Esempio n. 1
0
    def Drawing(self):
        point_1 = []
        x, y = self.UTM_get()
        for i in range(0, len(x)):
            point = []
            point.append(x[i])
            point.append(y[i])
            point_1.append(point)

        path_width, offset_width, turn_r = self.Path_Info()
        path_width = path_width * 10
        # 扫描线间隔距离(车辆工作幅宽)
        # path_width = 4 * 10  # 全部数据扩大10倍,画图时在缩小即可,扫描线间隔是4(原因是程序中i不能产生浮点数)
        # 偏置距离(根据转弯来计算)
        d = int(path_width / 10)
        d_ = int(d * (offset_width + 1))
        point_ = []

        # 调用偏置程序 (import Polygon_offset as Pol)
        for x in range(0, d_, d):
            a = cal.Shrink(x, *point_1)
            point_.append(a)
        point_offset = point_[int((d_ / d) - 1)]

        # 多边形顶点数
        POINTNUM_1 = len(point_offset)
        point_1.append(point_1[0])
        P_x_ = []
        P_y_ = []
        for p in point_1:
            P_x_.append(p[0])
            P_y_.append(p[1])
        self.F.axes.plot(P_x_, P_y_)

        for i in range(1, int((d_ / d) - 1)):
            point_[i].append(point_[i][0])
            P_x_ = []
            P_y_ = []
            for p in point_[i]:
                P_x_.append(p[0])
                P_y_.append(p[1])
            self.F.axes.plot(P_x_, P_y_, color='red', linewidth=1)

        Polygon_1 = point_offset
        X = []
        Y = []
        for i in range(POINTNUM_1):
            x = (Polygon_1[i][0])
            y = (Polygon_1[i][1])
            X.append(x)
            Y.append(y)
        X.append(Polygon_1[0][0])
        Y.append(Polygon_1[0][1])
        # 调用algorithm中polyScan_Draw函数画图
        algorithm.polyScan_Draw(self, point_1, point_offset, path_width)

        # 转弯部分
        min_angle, min_distance = algorithm.polyScan(point_1, point_offset,
                                                     path_width)

        top_point, low_point = algorithm.Rec_turn_point(
            self, point_1, point_offset, path_width)
        # print('low_point', low_point)
        # print('top_point', top_point)
        # 首先解决row_list,应该在算法部分,目前随便定义一下(可以连接为经验算法),后面修改
        row_list = []
        for i in range(0, len(low_point)):
            row_list.append(i)
        # 然后是转弯名称all_turn_name
        all_turn_name = []
        for i in range(0, len(low_point)):
            all_turn_name.append('U')  # 定义转弯方式
        # row_list和all_turn_name为算法求解部分

        all_turn = cal.All_Turn(self, point_1, point_offset, path_width,
                                row_list, turn_r, all_turn_name, min_angle)
        # print('all_turn', all_turn)
        for x in all_turn:
            self.F.axes.plot(x[0], x[1], color="red", linewidth=2)

        # 这一部分放在algorithm.py中,放这里会运行2次,加大计算量.
        # 结果展示内容
        # self.textBrowser.setText("最优角度: " + str(min_angle) + "\n最短距离: " + str(min_distance))
        self.F.axes.plot(X, Y, color='red', linewidth=1)
        self.F.axes.axis('equal')
        self.horizontalLayout.addWidget(self.F)
Esempio n. 2
0
    def Drawing(self):
        point_1 = []
        x, y = self.UTM_get()
        for i in range(0, len(x)):
            point = []
            point.append(x[i])
            point.append(y[i])
            point_1.append(point)

        path_width, offset_width, turn_r = self.Path_Info()
        path_width = path_width * 10
        # 扫描线间隔距离(车辆工作幅宽)
        # path_width = 4 * 10  # 全部数据扩大10倍,画图时在缩小即可,扫描线间隔是4(原因是程序中i不能产生浮点数)
        # 偏置距离(根据转弯来计算)
        d = int(path_width / 10)
        d_ = int(d * (offset_width + 1))
        point_ = []

        # 调用偏置程序 (import Polygon_offset as Pol)
        for x in range(0, d_, d):
            a = cal.Shrink(x, *point_1)
            point_.append(a)
        point_offset = point_[int((d_ / d) - 1)]

        # 多边形顶点数
        POINTNUM_1 = len(point_offset)
        point_1.append(point_1[0])
        P_x_ = []
        P_y_ = []
        for p in point_1:
            P_x_.append(p[0])
            P_y_.append(p[1])
        self.F.axes.plot(P_x_, P_y_)

        for i in range(1, int((d_ / d) - 1)):
            point_[i].append(point_[i][0])
            P_x_ = []
            P_y_ = []
            for p in point_[i]:
                P_x_.append(p[0])
                P_y_.append(p[1])
            self.F.axes.plot(P_x_, P_y_, color='red', linewidth=1)

        Polygon_1 = point_offset
        X = []
        Y = []
        for i in range(POINTNUM_1):
            x = (Polygon_1[i][0])
            y = (Polygon_1[i][1])
            X.append(x)
            Y.append(y)
        X.append(Polygon_1[0][0])
        Y.append(Polygon_1[0][1])
        #
        distance_set = []
        angle = 0
        for i in range(0, 180):
            if angle <= 180:
                t_distance = algorithm.polyScan(point_1, point_offset,
                                                path_width, angle)
                distance_set.append(t_distance)
                angle += 1
            else:
                pass
        min_angle = distance_set.index(
            min(distance_set))  # 求最小值在列表中位置,得到的数据其实就是角度大小
        min_distance = min(distance_set)  # 最短距离
        # 结果展示内容
        self.textBrowser.setText("最优角度: " + str(min_angle) + "\n最短距离: " +
                                 str(min_distance))

        # 调用algorithm中polyScan_Draw求解需要的参数
        boundary_point, route_point, top_list, low_list, point = algorithm.polyScan_Draw(
            point_1, point_offset, path_width, min_angle)

        # 转弯部分
        # 首先解决row_list,应该在算法部分,目前随便定义一下(可以理解为经验算法),后面修改
        row_list = []
        for i in range(0, len(low_list)):
            row_list.append(i)
        # 然后是转弯名称all_turn_name
        all_turn_name = []
        for i in range(0, len(low_list)):
            all_turn_name.append('M2')  # 定义转弯方式
        # row_list和all_turn_name为算法求解部分

        all_turn = cal.All_Turn(top_list, low_list, row_list, turn_r,
                                all_turn_name)
        all_turn = cal.Data_Spin(all_turn, min_angle, point)
        # 画转弯线
        for x in all_turn:
            self.F.axes.plot(x[0], x[1], color="red", linewidth=1)

        # 画车辆边界线与车辆路线
        for x in boundary_point:
            self.F.axes.plot(x[0], x[1], color='green', linewidth=0.5)
        for x in route_point:
            self.F.axes.plot(x[0],
                             x[1],
                             color='red',
                             linewidth=0.25,
                             linestyle='--',
                             dashes=[20, 15])

        self.F.axes.plot(X, Y, color='red', linewidth=1)
        self.F.axes.axis('equal')
        self.horizontalLayout.addWidget(self.F)