Example #1
0
def draw_right_arrow(canvas, column, row, line_color):
    """→描画"""
    left = column * GRID_UNIT
    right = (column + 0.8) * GRID_UNIT
    top = (row + 0.5) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((right, top)),
             color_for_cv2(line_color),
             thickness=LINE_THICKNESS)
    # 矢頭
    right2 = (column + 0.5) * GRID_UNIT
    top2 = (row + 0.2) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((right, top)),
             point_for_cv2((right2, top2)),
             color_for_cv2(line_color),
             thickness=LINE_THICKNESS)
    # 矢頭
    right2 = (column + 0.5) * GRID_UNIT
    top2 = (row + 0.8) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((right, top)),
             point_for_cv2((right2, top2)),
             color_for_cv2(line_color),
             thickness=LINE_THICKNESS)
Example #2
0
def draw_space(canvas, column, row):
    """半角スペースを三角形で描画"""
    center = (column + 0.5) * GRID_UNIT
    bottom2 = (row + 0.8) * GRID_UNIT
    # 底辺部
    left = (column + 0.1) * GRID_UNIT
    right = (column + 0.9) * GRID_UNIT
    bottom = (row + 1) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, bottom)),
             point_for_cv2((right, bottom)),
             color_for_cv2(FONT_COLOR),
             thickness=FONT_THICKNESS)
    # 左斜辺
    left2 = (column + 0.1) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left2, bottom)),
             point_for_cv2((center, bottom2)),
             color_for_cv2(FONT_COLOR),
             thickness=FONT_THICKNESS)
    # 右斜辺
    left2 = (column + 0.9) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((center, bottom2)),
             point_for_cv2((right, bottom)),
             color_for_cv2(FONT_COLOR),
             thickness=FONT_THICKNESS)
Example #3
0
def draw_down_arrow(canvas, column, row):
    """↓描画"""
    left = (column + 0.5) * GRID_UNIT
    top = row * GRID_UNIT
    bottom = (row + 0.8) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((left, bottom)),
             color_for_cv2(LINE_COLOR),
             thickness=LINE_THICKNESS)
    # 矢頭
    left2 = (column + 0.2) * GRID_UNIT
    bottom2 = (row + 0.5) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, bottom)),
             point_for_cv2((left2, bottom2)),
             color_for_cv2(LINE_COLOR),
             thickness=LINE_THICKNESS)
    # 矢頭
    left2 = (column + 0.8) * GRID_UNIT
    bottom2 = (row + 0.5) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, bottom)),
             point_for_cv2((left2, bottom2)),
             color_for_cv2(LINE_COLOR),
             thickness=LINE_THICKNESS)
Example #4
0
def draw_up_arrow(canvas, column, row, line_color):
    """↑描画"""
    left = (column + 0.5) * GRID_UNIT
    top = (row + 0.2) * GRID_UNIT
    bottom = (row + 1) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((left, bottom)),
             color_for_cv2(line_color),
             thickness=LINE_THICKNESS)
    # 矢頭
    left2 = (column + 0.2) * GRID_UNIT
    top2 = (row + 0.5) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((left2, top2)),
             color_for_cv2(line_color),
             thickness=LINE_THICKNESS)
    # 矢頭
    left2 = (column + 0.8) * GRID_UNIT
    top2 = (row + 0.5) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((left2, top2)),
             color_for_cv2(line_color),
             thickness=LINE_THICKNESS)
Example #5
0
    def draw_3bars(self, canvas):
        """バーを描きます"""

        # yは逆さ

        # バーR
        cv2.rectangle(canvas,
                      point_for_cv2((self.__left, self.__top)),
                      point_for_cv2(
                          (self.__red_right, self.__top + self.one_height)),
                      color_for_cv2(SOFT_RED, BAR_TICKS),
                      thickness=-1)

        # バーG
        cv2.rectangle(canvas,
                      point_for_cv2(
                          (self.__left, self.__top + self.one_height)),
                      point_for_cv2((self.__green_right,
                                     self.__top + 2 * self.one_height)),
                      color_for_cv2(SOFT_GREEN, BAR_TICKS),
                      thickness=-1)

        # バーB
        cv2.rectangle(canvas,
                      point_for_cv2(
                          (self.__left, self.__top + 2 * self.one_height)),
                      point_for_cv2((self.__blue_right, self.__bottom)),
                      color_for_cv2(SOFT_BLUE, BAR_TICKS),
                      thickness=-1)
Example #6
0
def draw_left_arrow(canvas, column, row):
    """←描画"""
    left = (column + 0.2) * GRID_UNIT
    right = (column + 1) * GRID_UNIT
    top = (row + 0.5) * GRID_UNIT
    # 線
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((right, top)),
             color_for_cv2(LINE_COLOR),
             thickness=LINE_THICKNESS)
    # 矢頭
    left2 = (column + 0.5) * GRID_UNIT
    top2 = (row + 0.2) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((left2, top2)),
             color_for_cv2(LINE_COLOR),
             thickness=LINE_THICKNESS)
    # 矢頭
    left2 = (column + 0.5) * GRID_UNIT
    top2 = (row + 0.8) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((left2, top2)),
             color_for_cv2(LINE_COLOR),
             thickness=LINE_THICKNESS)
Example #7
0
 def draw_bars_rate(self, canvas):
     """バー率を描きます"""
     top = self.top + self.label_gap
     # 左列のバー率
     left = self.__left - 3 * GRID_UNIT
     cv2.putText(
         canvas,
         f"{int(self.rates[0]*100):3}%",
         point_for_cv2((left, top)),  # x,y
         self.font,
         self.font_scale,
         color_for_cv2(BRIGHT_GRAY, BAR_TICKS),
         self.line_type)
     # 中列のバー率
     left = (self.__lower_x + self.__upper_x) / 2 - 1.5 * GRID_UNIT
     cv2.putText(
         canvas,
         f"{int(self.rates[1]*100):3}%",
         point_for_cv2((left, top)),  # x,y
         self.font,
         self.font_scale,
         color_for_cv2(DARK_GRAYISH_GRAY, BAR_TICKS),
         self.line_type)
     # 右列のバー率
     left = self.__right - 0.5 * GRID_UNIT
     cv2.putText(
         canvas,
         f"{int(self.rates[2]*100):3}%",
         point_for_cv2((left, top)),  # x,y
         self.font,
         self.font_scale,
         color_for_cv2(BRIGHT_GRAY, BAR_TICKS),
         self.line_type)
Example #8
0
 def draw_clock_hand(self, canvas):
     """時計の針を描きます"""
     inner_p = (self.radius1 * math.cos(self.theta) + self.center[0],
                -self.radius1 * math.sin(self.theta) + self.center[1])
     outer_p = (self.radius2 * math.cos(self.theta) + self.center[0],
                -self.radius2 * math.sin(self.theta) + self.center[1])
     cv2.line(canvas,
              point_for_cv2(inner_p),
              point_for_cv2(outer_p),
              color_for_cv2(PALE_GRAY, BAR_TICKS),
              thickness=2)
     # 時計の針の先
     # 楕円、描画する画像を指定、座標(x,y),xyの半径、角度,色、線の太さ(-1は塗りつぶし)
     start_angle = math.degrees(self.theta) - self.unit_arc / 2
     end_angle = math.degrees(self.theta) + self.unit_arc / 2
     if start_angle == end_angle:
         end_angle += 1  # 差が 0 だと変なとこ描画するんで
     cv2.ellipse(canvas,
                 point_for_cv2(self.center),
                 point_for_cv2((self.radius2, self.radius2)),
                 0,
                 360 - start_angle,
                 360 - end_angle,
                 color_for_cv2(PALE_GRAY, BAR_TICKS),
                 thickness=int(self.tickness))
     cv2.ellipse(canvas,
                 point_for_cv2(self.center),
                 point_for_cv2((self.radius3, self.radius3)),
                 0,
                 360 - start_angle,
                 360 - end_angle,
                 color_for_cv2(PALE_GRAY, BAR_TICKS),
                 thickness=int(self.tickness))
Example #9
0
def draw_border(circle_rail, canvas):
    """背景の左限、右限の線"""

    diameter = 2 * circle_rail.radius
    half_height = diameter * math.tan(math.radians(30))

    # 矩形
    left = circle_rail.center[0] - circle_rail.radius
    top = circle_rail.center[1] - half_height
    right = circle_rail.center[0] + circle_rail.radius
    bottom = circle_rail.center[1] + half_height
    cv2.rectangle(canvas,
                  point_for_cv2((left, top)),
                  point_for_cv2((right, bottom)),
                  color_for_cv2(GRAY, BAR_TICKS),
                  thickness=2)

    # 左限の線
    cv2.line(canvas,
             point_for_cv2((circle_rail.center[0] - circle_rail.radius,
                            circle_rail.drawing_top)),
             point_for_cv2((circle_rail.center[0] - circle_rail.radius,
                            circle_rail.drawing_bottom)),
             color_for_cv2(GRAY, BAR_TICKS),
             thickness=2)
    # 右限の線
    cv2.line(canvas,
             point_for_cv2((circle_rail.center[0] + circle_rail.radius,
                            circle_rail.drawing_top)),
             point_for_cv2((circle_rail.center[0] + circle_rail.radius,
                            circle_rail.drawing_bottom)),
             color_for_cv2(GRAY, BAR_TICKS),
             thickness=2)
Example #10
0
def draw_tone_name(canvas, bar_box, tone_name):
    """トーン名を描きます"""
    line_type = 2
    cv2.putText(canvas, f"{tone_name}",
                point_for_cv2((bar_box.left, BAR_BOX_TOP - 3.5 * GRID_UNIT)),
                cv2.FONT_HERSHEY_SIMPLEX, FONT_SCALE,
                color_for_cv2(DARK_GRAYISH_GRAY, BAR_TICKS), line_type)
    cv2.putText(
        canvas, f"tone diameter",
        point_for_cv2(
            (bar_box.left + GRID_UNIT, BAR_BOX_TOP - 2.5 * GRID_UNIT)),
        cv2.FONT_HERSHEY_SIMPLEX, FONT_SCALE,
        color_for_cv2(DARK_GRAYISH_GRAY, BAR_TICKS), line_type)
Example #11
0
    def draw_me(self, canvas):
        """描きます"""
        # 色相環
        color_count = len(self.color_list)
        # print(
        #    f"color_count={color_count} self.area_size=({self.area_size[0]}, {self.area_size[1]})")
        for i in range(0, color_count):
            theta = math.radians(i * self.unit_arc)
            color = self.color_list[i]
            # print(f"[{i}] theta={theta} color={color}")

            # 円弧
            # 楕円、描画する画像を指定、座標(x,y),xyの半径、角度,色、線の太さ(-1は塗りつぶし)
            start_angle = math.degrees(theta) - self.unit_arc / 2
            end_angle = math.degrees(theta) + self.unit_arc / 2
            if start_angle == end_angle:
                end_angle += 1  # 差が 0 だと変なとこ描画するんで
            cv2.ellipse(canvas,
                        point_for_cv2(self.__origin),
                        point_for_cv2(self.__area_size),
                        0,
                        360 - start_angle,
                        360 - end_angle,
                        color_for_cv2(color, BAR_TICKS),
                        thickness=int(self.__tickness))
Example #12
0
    def draw_3figures(self, canvas, num, left, top, color):
        """3桁の数字の描画"""
        def parse_figures(num):
            if num > 99:
                return [
                    f"{int(num/100)}", f"{int(num/10) % 10}", f"{num % 10}"
                ]
            if num > 9:
                return ["", f"{int(num/10) % 10}", f"{num % 10}"]
            if num > -1:
                return ["", f"", f"{num % 10}"]
            if num > -10:
                return ["", f"-", f"{num % 10}"]
            if num > -100:
                return ["-", f"{int(num/10) % 10}", f"{num % 10}"]
            # 入りきらない
            return ["X", "X", f"X"]

        figures = parse_figures(num)
        for i, figure in enumerate(figures):
            cv2.putText(
                canvas,
                f"{figure}",
                point_for_cv2((left + i * 0.7 * GRID_UNIT, top)),  # x,y
                self.font,
                self.font_scale,
                color_for_cv2(color, BAR_TICKS),
                self.line_type)
Example #13
0
 def draw_outline(self, canvas):
     """輪郭を描きます"""
     cv2.rectangle(canvas,
                   point_for_cv2((self.__left, self.__top)),
                   point_for_cv2((self.__right, self.__bottom)),
                   color_for_cv2(BRIGHT_GRAY, BAR_TICKS),
                   thickness=self.thickness)
Example #14
0
 def draw_circle(self, canvas):
     """描きます"""
     # 円レール。描画する画像を指定、座標(x,y),半径、色、線の太さ(-1は塗りつぶし)
     cv2.circle(canvas,
                point_for_cv2(self.center),
                int(self.radius),
                color_for_cv2(PALE_GRAY, BAR_TICKS),
                thickness=2)
Example #15
0
 def draw_point(canvas, center, r_radius, r_theta, fill_color):
     point_x = (r_radius * circle_radius) * math.cos(r_theta) + center[0]
     point_y = (r_radius * circle_radius) * -math.sin(r_theta) + center[1]
     cv2.circle(
         canvas,
         point_for_cv2((point_x, point_y)),
         6,  # radius
         color_for_cv2(fill_color),
         thickness=-1)
Example #16
0
def draw_jp(canvas, text, left_top, true_type_font, font_size, color):
    """日本語の表示"""
    canvas = cv2_put_text_5(canvas=canvas,
                            text=text,
                            left_top=point_for_cv2(left_top),
                            true_type_font=true_type_font,
                            font_size=font_size,
                            color=color_for_cv2(color),
                            anchor=2)           # 今指定した座標は文字描写域の中心だぞ
Example #17
0
def draw_vertical_line(canvas, column, row):
    """│描画"""
    left = (column + 0.5) * GRID_UNIT
    top = row * GRID_UNIT
    bottom = (row + 1) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((left, bottom)),
             color_for_cv2(LINE_COLOR),
             thickness=LINE_THICKNESS)
Example #18
0
def draw_horizontal_line(canvas, column, row):
    """─描画"""
    left = column * GRID_UNIT
    right = (column + 1) * GRID_UNIT
    top = (row + 0.5) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((right, top)),
             color_for_cv2(LINE_COLOR),
             thickness=LINE_THICKNESS)
Example #19
0
def draw_color_cross(canvas, column, row, color):
    """×ます"""
    # 円
    left = column * GRID_UNIT
    right = (column + 1) * GRID_UNIT
    top = row * GRID_UNIT
    bottom = (row + 1) * GRID_UNIT
    # バロック ダイアゴナル
    cv2.line(canvas,
             point_for_cv2((left, bottom)),
             point_for_cv2((right, top)),
             color_for_cv2(color),
             thickness=LINE_THICKNESS)
    # シニスター ダイアゴナル
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((right, bottom)),
             color_for_cv2(color),
             thickness=LINE_THICKNESS)
Example #20
0
def draw_color_circle(canvas, column, row, color):
    """○ます"""
    # 円
    left = (column + 0.5) * GRID_UNIT
    top = (row + 0.5) * GRID_UNIT
    cv2.circle(canvas,
               point_for_cv2((left, top)),
               int(GRID_UNIT / 2),
               color_for_cv2(color),
               thickness=-1)
Example #21
0
 def draw_rank2_box(self, canvas):
     """2段目の箱の輪郭を描きます"""
     # 線の太さを考慮
     thickness_minus1 = self.thickness - 1
     cv2.rectangle(canvas,
                   point_for_cv2((self.__lower_x - thickness_minus1,
                                  self.__top - thickness_minus1)),
                   point_for_cv2((self.__upper_x + thickness_minus1,
                                  self.__bottom + thickness_minus1)),
                   color_for_cv2(DARK_GRAYISH_GRAY, BAR_TICKS),
                   thickness=thickness_minus1 + 1)
Example #22
0
def draw_left_bottom_corner(canvas, column, row, line_color):
    """└描画"""
    # 水平線部
    left = (column + 0.5) * GRID_UNIT
    right = (column + 1) * GRID_UNIT
    top = (row + 0.5) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((right, top)),
             color_for_cv2(line_color),
             thickness=LINE_THICKNESS)
    # 垂直線部
    left = (column + 0.5) * GRID_UNIT
    top = (row + 0) * GRID_UNIT
    bottom = (row + 0.5) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((left, bottom)),
             color_for_cv2(line_color),
             thickness=LINE_THICKNESS)
Example #23
0
def draw_left_tee(canvas, column, row):
    """┤描画"""
    # 水平線部
    left = (column + 0) * GRID_UNIT
    right = (column + 0.5) * GRID_UNIT
    top = (row + 0.5) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((right, top)),
             color_for_cv2(LINE_COLOR),
             thickness=LINE_THICKNESS)
    # 垂直線部
    left = (column + 0.5) * GRID_UNIT
    top = (row + 0) * GRID_UNIT
    bottom = (row + 1) * GRID_UNIT
    cv2.line(canvas,
             point_for_cv2((left, top)),
             point_for_cv2((left, bottom)),
             color_for_cv2(LINE_COLOR),
             thickness=LINE_THICKNESS)
Example #24
0
    def draw_me(self, canvas):
        """描きます"""
        # 色相環
        color_count = len(self.color_list)
        for i in range(0, color_count):
            theta = math.radians(i * self.unit_arc)
            color = self.color_list[i]
            # print(f"[{i}] theta={theta} color={color}")

            # 円弧
            # 楕円、描画する画像を指定、座標(x,y),xyの半径、角度,色、線の太さ(-1は塗りつぶし)
            start_angle = int(math.degrees(theta) - self.unit_arc / 2)
            end_angle = int(math.degrees(theta) + self.unit_arc / 2)
            if start_angle == end_angle:
                end_angle += 1  # 差が 0 だと変なとこ描画するんで

            # カクカクだが、フェーズを増やせば円に近づくのでこれでいいとするぜ(^~^)
            #
            #     end_theta
            #
            #       c+---+
            #        |   +---+
            #       ++       |
            #       +---+    ++
            #       d   ++    |  start_theta
            #            |  +-+b
            #            +--+
            #      x      a
            #   origin
            #
            # tickness/2 <-- radius --> tickness/2
            # in_r                           out_r
            #
            start_theta = theta - math.radians(self.unit_arc / 2)
            end_theta = theta + math.radians(self.unit_arc / 2)
            in_r = self.__radius - self.__tickness / 2
            out_r = self.__radius + self.__tickness / 2
            a_x = int(in_r * math.cos(start_theta) + self.__origin[0])
            a_y = int(in_r * -math.sin(start_theta) + self.__origin[1])
            b_x = int(out_r * math.cos(start_theta) + self.__origin[0])
            b_y = int(out_r * -math.sin(start_theta) + self.__origin[1])
            c_x = int(out_r * math.cos(end_theta) + self.__origin[0])
            c_y = int(out_r * -math.sin(end_theta) + self.__origin[1])
            d_x = int(in_r * math.cos(end_theta) + self.__origin[0])
            d_y = int(in_r * -math.sin(end_theta) + self.__origin[1])
            contours = np.array([[a_x, a_y], [b_x, b_y], [c_x, c_y],
                                 [d_x, d_y]])
            cv2.fillPoly(canvas,
                         pts=[contours],
                         color=color_for_cv2(color, BAR_TICKS))
Example #25
0
def draw_left_top_round_corner(canvas, column, row, line_color):
    """┌描画(丸み)"""
    # 曲線
    right = (column + 1) * GRID_UNIT
    bottom = (row + 1) * GRID_UNIT
    cv2.ellipse(
        canvas,
        point_for_cv2((right, bottom)),
        point_for_cv2((GRID_UNIT / 2, GRID_UNIT / 2)),
        0,
        180,  # yが逆さの座標系
        270,
        color_for_cv2(line_color),
        thickness=LINE_THICKNESS,
        lineType=2)
Example #26
0
def draw_right_bottom_round_corner(canvas, column, row, line_color):
    """┘描画(丸み)"""
    # 曲線
    left = column * GRID_UNIT
    top = row * GRID_UNIT
    cv2.ellipse(
        canvas,
        point_for_cv2((left, top)),
        point_for_cv2((GRID_UNIT / 2, GRID_UNIT / 2)),
        0,
        0,  # yが逆さの座標系
        90,
        color_for_cv2(line_color),
        thickness=LINE_THICKNESS,
        lineType=2)
Example #27
0
def draw_left_bottom_round_corner(canvas, column, row):
    """└描画(丸み)"""
    # 曲線
    right = (column + 1) * GRID_UNIT
    top = row * GRID_UNIT
    cv2.ellipse(
        canvas,
        point_for_cv2((right, top)),
        point_for_cv2((GRID_UNIT / 2, GRID_UNIT / 2)),
        0,
        90,  # yが逆さの座標系
        180,
        color_for_cv2(LINE_COLOR),
        thickness=LINE_THICKNESS,
        lineType=2)
Example #28
0
def draw_right_top_round_corner(canvas, column, row):
    """┐描画(丸み)"""
    # 曲線
    left = column * GRID_UNIT
    bottom = (row + 1) * GRID_UNIT
    cv2.ellipse(
        canvas,
        point_for_cv2((left, bottom)),
        point_for_cv2((GRID_UNIT / 2, GRID_UNIT / 2)),
        0,
        270,  # yが逆さの座標系
        360,
        color_for_cv2(LINE_COLOR),
        thickness=LINE_THICKNESS,
        lineType=2)
Example #29
0
def screenshot_func(seq, board, agent):
    """画像を出力します"""
    # キャンバス生成
    canvas = np.full((board.height*GRID_UNIT, board.width*GRID_UNIT, CANVAS_CHANNELS),
                     color_for_cv2(BACKGROUND_COLOR)[0], dtype=np.uint8)

    # 盤の描画
    draw_board(canvas, board)

    # エージェントの描画
    draw_agent(canvas, agent)

    # 書出し
    canvas = cv2.cvtColor(canvas, cv2.COLOR_BGR2RGB)  # BGRをRGBにする
    cv2.imwrite(f"./@share/out-istep1-{seq}.png", canvas)
    seq += 1

    return seq
Example #30
0
    def draw(self, canvas):
        """描きます"""
        # 3辺
        cv2.line(canvas,
                 point_for_cv2(self.nodes_p[0]),
                 point_for_cv2(self.nodes_p[1]),
                 color_for_cv2(self.__edge_color, BAR_TICKS),
                 thickness=2)
        cv2.line(canvas,
                 point_for_cv2(self.nodes_p[1]),
                 point_for_cv2(self.nodes_p[2]),
                 color_for_cv2(self.__edge_color, BAR_TICKS),
                 thickness=2)
        cv2.line(canvas,
                 point_for_cv2(self.nodes_p[2]),
                 point_for_cv2(self.nodes_p[0]),
                 color_for_cv2(self.__edge_color, BAR_TICKS),
                 thickness=2)
        # 3頂点
        if self.__node_radius > 0:
            cv2.circle(canvas,
                       point_for_cv2(self.nodes_p[0]),
                       int(self.__node_radius),
                       color_for_cv2(self.__nodes_color[0], BAR_TICKS),
                       thickness=-1)
            cv2.circle(canvas,
                       point_for_cv2(self.nodes_p[1]),
                       int(self.__node_radius),
                       color_for_cv2(self.__nodes_color[2], BAR_TICKS),
                       thickness=-1)
            cv2.circle(canvas,
                       point_for_cv2(self.nodes_p[2]),
                       int(self.__node_radius),
                       color_for_cv2(self.__nodes_color[1], BAR_TICKS),
                       thickness=-1)

            # 重心
            gravity = self.triangular_center_of_gravity()
            cv2.circle(canvas,
                       point_for_cv2(gravity),
                       int(self.__node_radius),
                       color_for_cv2(self.__center_color, BAR_TICKS),
                       thickness=-1)