Как я могу построить эллипс над разными центрами, определенными в массиве

Я строю эллипс и перевожу его с помощью функции translate, где определяются вручную dx & dy

Теперь я хотел бы иметь больше графиков с разными значениями dx,dy, которые содержатся в этом массиве.

translation_points = 
[ (5, 6), (5, 7), (5, 8), (5, 9), (5, 10), (5, 11), (5, 12), (5, 13), (5, 14), (6, 5), (6, 6), (6, 7), (6, 8), (6, 9), (6, 10), (6, 11), (6, 12), (6, 13), (6, 14), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9), (7, 10), (7, 11), (7, 12)]

Как я могу это сделать?

import numpy as np
import matplotlib.pyplot as plt

def ellipse(x, y):
    value = (x*x) + (y*y)/3
    if (value >= 300):
        return 0
    else:
        return 1

def translate(x, y):
    DX = 5
    DY = 5
    return (x- DX, y - DY)    


def rotate(x, y):
    theta = np.radians(40)
    matrix = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]])
    return np.dot(matrix, (x,y))

data = np.zeros((100,100))

for i in range(0, 100):
    for j in range(0, 100):
        (x, y) = translate(i,j)
        (x, y) = rotate(x, y)
        data[i,j] = ellipse(x, y)

plt.imshow(data, cmap = "gray")
plt.show()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
105
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

сначала измените свой translate(), добавьте новый параметр offset:

def translate(x, y, offset):
    (dx, dy) = offset
    return x - dx, y - dy

затем поместите 2 цикла for в функцию, чтобы мы могли вызвать ее позже, эта функция также должна принимать параметр offset. тогда мы можем вызвать его для построения графика для каждого смещения.

def draw(offset):
    data = np.zeros((100, 100))
    for i in range(-100, 100):
        for j in range(-100, 100):
            (x, y) = translate(i, j, offset)
            (x, y) = rotate(x, y)
            data[i, j] = ellipse(x, y)
    plt.imshow(data, cmap = "gray")

наконец, создайте цикл, который отображает наш эллипс для каждого смещения в translation_points. здесь я использую plt.subplot(4, 7, i+1) для создания 28 подзаговоров, каждый подзаговор для переведенного эллипса. вы можете прокомментировать эту строку, если вы просто хотите увидеть каждый отдельный график.

for i in range(len(translation_points)):
    plt.subplot(4, 7, i+1)
    draw(translation_points[i])

да, мы сделали это.


больше редактировать:

поскольку мы используем imshow, графики обрезаются. более того, координаты совершенно неверны. поэтому сначала установите наш диапазон:

for i in range(-100, 100):
    for j in range(-100, 100):

затем дайте ему смещение по умолчанию:

def translate(x, y, offset):
    (dx, dy) = offset
    return x - dx - 50, y - dy - 50

расширьте фигуру, установите ограничения по оси: добавьте эти строки в draw()

plt.xlim(-50, 50)
plt.ylim(-50, 50)
plt.imshow(data, cmap = "cool", extent=[-data.shape[1]/2., data.shape[1]/2., -data.shape[0]/2., data.shape[0]/2.])

и наконец:

import numpy as np
import matplotlib.pyplot as plt

translation_points = [(5, 6), (5, 7), (5, 8), (5, 9), (5, 10), (5, 11),
                      (5, 12), (5, 13), (5, 14), (6, 5), (6, 6), (6, 7),
                      (6, 8), (6, 9), (6, 10), (6, 11), (6, 12), (6, 13),
                      (6, 14), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9),
                      (7, 10), (7, 11), (7, 12)]


def ellipse(x, y):
    value = (x*x) + (y*y)/3
    if value >= 300:
        return 0
    else:
        return 1


def translate(x, y, offset):
    # dx = 5
    # dy = 5
    (dx, dy) = offset
    return x - dx - 50, y - dy - 50


def rotate(x, y):
    theta = np.radians(40)
    matrix = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]])
    return np.dot(matrix, (x, y))


def draw(offset):
    data = np.zeros((100, 100))
    for i in range(-100, 100):
        for j in range(-100, 100):
            (x, y) = translate(i, j, offset)
            (x, y) = rotate(x, y)
            data[i, j] = ellipse(x, y)
    plt.xlim(-50, 50)
    plt.ylim(-50, 50)
    plt.imshow(data, cmap = "gray",
               extent=[-data.shape[1]/2., data.shape[1]/2.,
                       -data.shape[0]/2., data.shape[0]/2.])


for i in range(len(translation_points)):
    plt.subplot(4, 7, i+1)
    draw(translation_points[i])

plt.show()

как я могу рассчитать пространственное расстояние между каждым пикселем на графике и каждым пикселем в другом изображении и сохранить это значение в массиве? это то, что я пробовал

M.Bore 26.07.2019 13:56

«пространственное расстояние между каждым пикселем на графике и каждым пикселем в другом изображении» я не понимаю. можете ли вы добавить больше объяснений или, что еще лучше, задать новый вопрос с подробностями?

AcaNg 27.07.2019 20:52
Ответ принят как подходящий
import numpy as np
import matplotlib.pyplot as plt
translation_points = [ (5, 6), (5, 7), (10,10), (20, 8), (5, 9), (12, 10), (40, 40), (50, 50),(20, 8)]
def ellipse(x, y):
    value = (x*x) + (y*y)/3
    if (value >= 300):
        return 0
    else:
        return 1

def translate(x, y,a,b):
    #print a,b
    DX = a
    DY = b
    return (x- DX, y - DY)    


def rotate(x, y):
    theta = np.radians(40)
    matrix = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]])
    return np.dot(matrix, (x,y))

def create(tlpoints):
    a,b=tlpoints
    #print a,b
    data = np.zeros((100,100))

    for i in range(0, 100):
        for j in range(0, 100):
            (x, y) = translate(i,j,a,b)
            (x, y) = rotate(x, y)
            data[i,j] = ellipse(x, y)
    return data


ells=[create(translation_points[i]) for i in range(len(translation_points))]
fig=plt.figure(figsize=(10,10))
columns = 3
rows = len(translation_points)/columns
for i in range(1, columns*rows +1):
    fig.add_subplot(rows, columns, i)
    plt.imshow(ells[i-1],cmap='gray')
plt.show()

output

Привет @rahul большое спасибо за ваш ответ, не могли бы вы прокомментировать свои новые функции, чтобы я понял, что происходит

M.Bore 18.07.2019 14:15

Другие вопросы по теме