Визуализируйте разреженную матрицу, используя графику Python Turtle - PullRequest
0 голосов
/ 05 ноября 2018

Я застрял на этой проблеме.

def showMatrix(turtle_object, sparse_matrix):

Функция showMatrix() визуализирует содержимое матрицы, используя сетку точек. Каждое местоположение сетки будет соответствовать одному местоположению матрицы (строка, столбец). Наличие «точки» указывает на ненулевую запись.

Во-первых, вам нужно установить координаты отображения в соответствии с экстентом матрицы, используя screen.setworldcoordinates() метод. Другими словами, левый нижний угол дисплея будет стать координатой (0,0) и верхний правый угол будет (строки-1, столбцы-1). Смена экрана таким образом, координаты упрощают отображение индексов матрицы на экранные координаты путем сопоставления "сетки" и матричные координаты.

Используя методы .goto и .dot черепахи, нарисуйте красную точку для каждой матрицы.

Это работа, которую я проделал до сих пор:

def matrix(n, init):
    matrix = []
    for i in range(n):
        row = []
        for j in range(n):
            row.append(init)
        matrix.append(row)
    return matrix



def sparse_matrix(matrix,n,value):
    import random
    ctr = 0
    while ctr < n:
        row = random.randint(0,order(m)-1)
        col = random.randint(0,order(m)-1)
        if matrix[row][col] != value:
            matrix[row][col] = value
            ctr += 1
    return matrix

def showMatrix(turtle_object, sparse_matrix):
    for i in len(m):
        for j in len(m):
            if sparse_matrix[i][j] != 0:
                sparse_matrix[i][j] = turtle_object
    return sparse_matrix

1 Ответ

0 голосов
/ 05 ноября 2018

Что означает проблема (строки-1, столбцы-1)?

Это связано с вашей загадочной переменной m и функцией order(), которую вы оставили неопределенной. Давайте продолжим в любом случае. Из функции matrix() мы можем видеть, что имеем дело с квадратной матрицей, но давайте даже не будем предполагать это. В функции sparse_matrix() мы можем определить строки и столбцы, выполнив:

rows = len(sparse_matrix)
columns = len(sparse_matrix[0])

Наряду с проверкой, что rows не ноль.

Как показать разреженную матрицу на черепахе?

Ваша sparse_matrix() функция не использует turtle_object надлежащим образом - мы не хотим ее хранить, мы хотим попросить ее рисовать вещи. И эта функция, вероятно, не должна ничего возвращать. Я думаю, это должно выглядеть примерно так:

def showMatrix(turtle_object, sparse_matrix):
    rows = len(sparse_matrix)

    if rows == 0:
        return

    columns = len(sparse_matrix[0])

    turtle_object.penup()

    for r in range(rows):
        for c in range(columns):
            if sparse_matrix[r][c] != 0:
                turtle_object.goto(c, r)
                turtle_object.dot(dot_size, "red")

Где dot_size сейчас равно 1. Завернуть это в код черепахи:

from turtle import Screen, Turtle

# ...

m = 6

screen = Screen()

dot_size = 1

yertle = Turtle(visible=False)

mat = matrix(order(m), 0)
sparse_matrix(mat, order(m / 2), 1)

showMatrix(yertle, mat)

screen.mainloop()

Получаем неудовлетворительный график:

enter image description here

Поскольку все слишком мало и его нужно увеличить.

Я не уверен, как использовать screen.setworldcoordinates ()

Вместо того, чтобы добавлять коэффициент масштабирования непосредственно к нашему графическому коду, мы можем использовать собственную setworldcoordinates() черепахи, чтобы согнуть окно до пределов нашего графика:

screen.setworldcoordinates(0, 0, order(m), order(m))

dot_size = screen.window_width() / order(m)

Это дает нам что-то более визуально удовлетворяющее:

enter image description here

Надеюсь, этот грубый набросок заставит вас двигаться в правильном направлении.

...