ПОмогите срочно !!! Есть массив координат например [(0, 1), (20, 25), (52, 56), (21, 9), (35, 513)] , мне надо его отсортировать по самой близкой координате. Приму любые варианты, ЛЮБЫЕ. Заранее спасибо за внимание !!!!
Насколько я понимаю, вам нужно отсортировать координаты в списке по убыванию расстояния от центра координатной плоскости (точка с координатами (0; 0)). В таком случае нужно воспользоваться формулой расстояния между двумя точками на плоскости (также известна как формула длины двухмерного вектора): Spoiler: Формула длины вектора Поскольку, центр — точка (x0; y0) с координатами (0; 0), формула упрощается: sqrt((x-x0)**2 + (y-y0)**2) -> sqrt(x**2 + y**2) Метод list.sort() имеет параметр key, который принимает функцию сортировки. Пишем функцию сортировки: Code: import math def sortKey(value): x, y = value d = math.sqrt(x**2 + y**2) return d Сортируем: Code: coords = [(0, 1), (20, 25), (52, 56), (21, 9), (35, 513)] coords.sort(key=sortKey) print(coords) Более простой вариант с использованием анонимной функции: Code: import math coords = [(0, 1), (20, 25), (52, 56), (21, 9), (35, 513)] coords.sort(key=lambda c: math.sqrt(c[0]**2 + c[1]**2)) print(coords) Результат: [(0, 1), (21, 9), (20, 25), (52, 56), (35, 513)]
Есть допустим эти точки. Эта сортировка будет соединять их где-то так А мне нужно что бы после сортировки точки были отсортированы таким образом, что бы я мог соединять их так
@Matrix001 Вы говорите не о сортировке, о задаче на построение выпуклой оболочки. Решается она через подзадачу: определение положения точки относительно вектора: https://acmp.ru/article.asp?id_text=172 Алгоритм вкратце: выбираем любую точку A из множества точек, затем выбираем любую точку B, строим вектор AB, затем в цикле проверяем положение всех оставшихся точек относительно вектора AB. Допустиим, будем строить оболочку по часовой стрелке, тогда все остальные точки должны быть по правую сторону вектора. Если какая-либо точка оказывается по левую сторону — прерываем цикл и выбираем другую точку B, затем снова проверяем положение остальных точек относительно вектора AB. И так до тех пор, пока не будет выбрана верная точка B. После этого выбираем точку C и повторяем действия с вектором BC. Повторяем алгоритм до тех пор, пока не задействуем все точки. После этого соединяем две оставшиеся, замыкая оболочку. Возможно, набросаю код, но чуть позже.
Может уже как-то получиться показать код на python-е ? Я у себя использовал эту функцию Code: def cc(crd, crds, index, r=1): size = 300, 401 tarr = [] res = False for x in range(crd[0]+r, crd[0]+r+1): for y in range(crd[1] - r, crd[1] + r + 1): if x < size[0] and x >= 0 and y < size[1] and y >= 0 and crd != (x, y): tarr.append((x, y)) for x in range(crd[0]-r, (crd[0]-r)+1): for y in range(crd[1] - r, crd[1] + r + 1): if x < size[0] and x >= 0 and y < size[1] and y >= 0 and crd != (x, y): tarr.append((x, y)) for y in range(crd[1]-r, (crd[1]-r)+1): for x in range(crd[0] - r, crd[0] + r + 1): if x < size[0] and x >= 0 and y < size[1] and y >= 0 and crd != (x, y): tarr.append((x, y)) for y in range(crd[1]+r, (crd[1]+r)+1): for x in range(crd[0] - r, crd[0] + r + 1): if x < size[0] and x >= 0 and y < size[1] and y >= 0 and crd != (x, y): tarr.append((x, y)) for i in range(0, len(tarr)): if tarr[i] in crds: res = True draw.line((crd[0], crd[1], tarr[i][0], tarr[i][1]), fill=index) #грубо break return res Она просто берет от координаты допусти (1,1) соседнии пиксели по радиусу (включая по диагонали) и если есть такая координата в массиве с уже существующими координтами, то рисует (грубо) линию. Но это конечно происходит сначало с радиусом 1-н, потом радиус увеличивается пока не будет найдена та точка. Это мне намного лучше конечно помогает, получается довольно та ки прикольно. Но наверное то что ты писал, будет намного лучше ??? И да, мой алгоритм таков, что я не могу использовать многопоточность, потому что у меня все должно выполнятся линейно, то есть, бесмысленно мне делать даже так что создавать массив из 256-х, а потом уже из него все заменять. Это будет даже дольше.
Как я могу в OpenCV сделать свой собственный фильтр на два изображения ? Например у меня есть первое изображение и второе изображение. Я хочу что бы в результате сравнения этих двух изображений получилось изображение из максимального значения, как это сделать в OpenCV ?
Я немного разобрался, хотелось бы посмотреть на код, потому что я не совсем понимаю как будет делаться такое прохождение для каждой точки если учесть что расположение точек может быть рандомным и не все "круги" должны быть замкнуты
Есть такая формула x^2 + y^2 = R^2 - если у вас в задаче координаты вида (x,y) можно использовать ее, а точнее - вывести R (радиус) и найти минимальный.
Здравствуйте. Пытаюсь реализовать алгоритм решения системы линейных уравнений согласно методу Крамера. Возможно, кто-то встречался с такой проблемой. Пршу помочь.
В photoshop есть режим цвета как "Индексированные цвета". В этом режиме подбирается оптимально ограниченное количество цветов (например 256). Можно выбирать разную палитру. Как это реализовать в python 3.x с использованием numpy+opencv где палитра будет выстраиваться по индексам цветов этого изображения в градациях серого ? P.S: То есть где каждое значение пикслея изображения в градациях серого от 0 до 255 будет присвоен свой цвет. Реально ли такое ? Я пробовал лишь усреднение цветов, что дает плохой результат. Также не помогает HSV и HLS ! Заранее спасибо за любую помощь !!! Могу заплатить 300 р за ответ.
Ха, это вообще не то (хотя проблема в иной сфере таже и не решена как видно)... Причем здесь цвета и индексы (мне не нужно переводить цвета в индексы для превращения изображения в градации сеорого). Мне нужно что бы цвета (ограниченного количества) подбирались к значениям (изображения оригинального с полной RGB переведенного из цветного в градации серого ПРОСТЫМ УСРЕДНЕНИЕМ ВСЕХ КАНАЛОВ как обычно) так что бы это было понятное изображение а не бредятина (пробовал больше 4 способов присвоить цвета после индекса к значениям усредненного оригинального изображения (градации сеорго) получалось сплошное г***) ... Photoshop со своими индексами цветами просто подбирает цвета по ограниченному количеству так что бы было приблизно соответствие к оригинальному цвету пикселя, но не учитывает индекс по изображению в градациях серого. Понятное, что невозможно использовать все 0...255 значений в градациях сеорого изображения если в изображении всего 3 цвета допустим (там будет простая нормализация по индексам градаций серого изображения я так себе это представляю), но я думаю это реально если в изображении их >= 256. Наверное я пытаюсь решить то что стоилобы милиарды, и то что способно сократить размер любого изображения в 100 раз без потери качества вообще. Но мне это нужно для других целей.
Может кто знает ... есть массив a = [ [1,2] ] и b = [ [[0,0,0],[0,0,0]] ] Как вставить в массив b по индексам из массива a единицы ? То есть должен получится следующий массив r = [ [[0,1,0],[0,0,1]] ]