Данная матрица целых чисел размером n на n, я хочу найти обрезанный круг, который максимизирует сумму. Вот изображение, а затем последует объяснение/код:
Центр круга находится в точке (0,0), и нас интересует только та часть, которая пересекает сетку. В каждой целочисленной координате в сетке находится целое число. Круг может иметь любой радиус (не обязательно целочисленный, но об этом ниже).
Существует также диагональная линия, которая может обрезать круг, как показано на рисунке. Диагональная линия всегда начинается и заканчивается в целочисленной координате на границе сетки и идет вниз и вправо под углом 45 градусов к горизонтали, как показано на рисунке.
Оценка за обрезанный круг — это сумма всех целых чисел, которые находятся как внутри круга (или на границе), так и на стороне диагональной линии, включая (0,0). Значения на границе (или рядом с ней): -3, 1, 3, -1, -3, 3, -1, 2, 0, 3.
Хотя круг может имеют любой радиус, нам нужно рассматривать только круги, которые точно пересекают точку сетки, чтобы существовало n ^ 2 различных соответствующих радиуса. Кроме того, нам нужно записать только одну позицию, где круг пересекается с диагональной линией, чтобы полностью указать обрезанный круг. Обратите внимание, что это пересечение с диагональю не обязательно должно происходить по целочисленной координате.
Если в оптимальном решении диагональ вообще не отсекает круг, то нам нужно только вернуть радиус. круга.
Если бы мы хотели найти только оптимальный круг, мы могли бы сделать это быстро и за время, пропорциональное входному размеру, с помощью:
import numpy as np
from math import sqrt
np.random.seed(40)
def find_max(A):
n = A.shape[0]
sum_dist = np.zeros(2 * n * n, dtype=np.int32)
for i in range(n):
for j in range(n):
dist = i**2 + j**2
sum_dist[dist] += A[i, j]
cusum = np.cumsum(sum_dist)
# returns optimal radius with its score
return sqrt(np.argmax(cusum)), np.max(cusum)
A = np.random.randint(-3, 4, (10, 10))
print(find_max(A))
Как быстро можно найти оптимальную обрезанную окружность?
Данная матрица целых чисел размером n на n, я хочу найти обрезанный круг, который максимизирует сумму. Вот изображение, а затем последует объяснение/код: [img]https://i.stack.imgur.com/fFBtX. png[/img]
[code] [[ 1, 1, -3, 0, 0, 3, -1, 3, -3, 2], [-2, -1, 0, 1, 0, -2, 0, 0, 1, -3], [ 2, 2, -3, 2, -2, -1, 2, 2, -2, 0], [-2, 0, -3, 3, 0, 2, -1, 1, 3, 3], [-1, -2, -1, 2, 3, 3, -3, -3, 2, 0], [-3, 3, 2, 0, -3, -2, -1, -3, 0, -3], [ 3, 2, 2, -1, 0, -3, 1, 1, -2, 2], [-3, 1, 3, 3, 0, -3, -3, 2, -2, 1], [ 0, -3, 0, 3, 2, -2, 3, -2, 3, 3], [-1, 3, -3, -2, 0, -1, -2, -1, -1, 2]] [/code] Центр круга находится в точке (0,0), и нас интересует только та часть, которая пересекает сетку. В каждой целочисленной координате в сетке находится целое число. Круг может иметь любой радиус (не обязательно целочисленный, но об этом ниже). Существует также диагональная линия, которая может обрезать круг, как показано на рисунке. Диагональная линия всегда начинается и заканчивается в целочисленной координате на границе сетки и идет вниз и вправо под углом 45 градусов к горизонтали, как показано на рисунке. Оценка за обрезанный круг — это сумма всех целых чисел, которые находятся как внутри круга (или на границе), так и на стороне диагональной линии, включая (0,0). Значения на границе (или рядом с ней): -3, 1, 3, -1, -3, 3, -1, 2, 0, 3. Хотя круг может имеют любой радиус, нам нужно рассматривать только круги, которые точно пересекают точку сетки, чтобы существовало n ^ 2 различных соответствующих радиуса. Кроме того, нам нужно записать только одну позицию, где круг пересекается с диагональной линией, чтобы полностью указать обрезанный круг. Обратите внимание, что это пересечение с диагональю не обязательно должно происходить по целочисленной координате. Если в оптимальном решении диагональ вообще не отсекает круг, то нам нужно только вернуть радиус. круга. Если бы мы хотели найти только оптимальный круг, мы могли бы сделать это быстро и за время, пропорциональное входному размеру, с помощью: [code]import numpy as np from math import sqrt np.random.seed(40)
def find_max(A): n = A.shape[0] sum_dist = np.zeros(2 * n * n, dtype=np.int32) for i in range(n): for j in range(n): dist = i**2 + j**2 sum_dist[dist] += A[i, j] cusum = np.cumsum(sum_dist) # returns optimal radius with its score return sqrt(np.argmax(cusum)), np.max(cusum) A = np.random.randint(-3, 4, (10, 10)) print(find_max(A)) [/code] Как быстро можно найти оптимальную обрезанную окружность?
Я использую код, найденный здесь:
Как обрезать часть изображения в позиции курсора?
Исходный графический блок, большой графический блок справа имеет размер 600 400, а размер левого маленького обрезанного изображения – 243 256. Когда мышь находится...
это мой код, когда я пытаюсь обрезать и сохранить обнаруженный объект с помощью yolov8:
я новичок в yolo show и впервые пишу это в блокноте Google Colab: >
from google.colab import drive
drive.mount('/content/drive')
Используйте jquery/javascript для обрезки и изменения размера изображения, и это работает нормально. Проблема в том, что я хочу загрузить обрезанное изображение с помощью обычного ввода (файла), чтобы мой скрипт настольного ламинаса на сервере мог...
Используйте jquery/javascript для обрезки и изменения размера изображения, и это работает нормально. Проблема в том, что я хочу загрузить обрезанное изображение с помощью обычного ввода (файла), чтобы мой скрипт настольного ламинаса на сервере мог...
Я использую Vedo в Python, и у меня есть две сферы. Мне нужно найти круглую поверхность, которая охватывается всеми точками пересечения сфер. Я не мог найти хорошего способа сделать это, и мне интересно, есть ли быстрое и простое решение, например....