... И Мексика заплатит за это!


26

Дональд Трамп очень впечатлен работой людей на этом сайте. Он видел, как удивительно, что вы помогали Бену Карсону , поэтому даже нанял вас, чтобы построить его стену . Он думает, что ты потрясающий. Теперь ему снова нужна твоя помощь. В то время как он успешно построил свою стену, теперь ему нужно правительство Мексики, чтобы заплатить за нее. Он хочет заплатить 1 миллион долларов за милю, и он сказал им, что длина границы между США и Мексикой составляет 1 989 миль . Однако они не совсем уверены, что это число является точным, поэтому они хотели бы также масштабировать визуальное представление. Вот где вы входите. Вы должны взять эту карту: введите описание изображения здесь

и для каждых n (50 <= n <= 500) миль на границе нарисуйте линию длиной 25 пикселей, перпендикулярную наклону границы в этой точке. Используя шкалу в правой части карты, я определил, что 100 миль ~ 50 пикселей . Я нарисовал образец первых 3 строк для n = 60, но они только приблизительные:

введите описание изображения здесь

Заметки:

  • Единственный вход - n . На выходе должно быть изображение карты с добавленными линиями, нарисованными на экране или сохраненными в файле растрового изображения (вы можете перезаписать исходный файл карты).
  • Вы можете сохранить пустой файл карты с любым именем файла. Это JPEG, но вы можете преобразовать его в другой распространенный растровый формат, если хотите. Кроме того, вы можете уменьшить размер изображения до 50%, если вы сохраняете размеры пропорциональными, а ваши линии все еще в масштабе.
  • Каждая линия должна быть перпендикулярна наклону границы в этой точке. Наклон следует рассчитывать, начиная с 50 миль до точки и заканчивая через 50 миль после точки.

Точность:

  • Наклон каждой линии может иметь погрешность ± 5 °
  • Интервал между каждой линией может иметь погрешность ± 20 миль (10 пикселей на обычной карте).

3
Цена 10000 долларов за милю, вероятно, отклоняется в 100 раз, если только под «стеной» вы не подразумеваете 3 нити колючей проволоки, установленные рабочими, что составляет 2,50 доллара в час.
Гленн Рандерс-Персон

1
Кроме того, Мма заявляет, что длина границы между США и Мексикой составляет около 1952 миль.
LegionMammal978

18
Полезно знать, но важно то, что ни одно из этих чисел ничего не значит для этой задачи.
геокавель

@geokavel Давай, ответь.
programmer5000

1
Кроме того, намерение этой задачи состоит в том, чтобы иметь возможность обрабатывать изображение и идентифицировать границу перед рисованием линий, или допустимо просто иметь возможность рисовать линии без фактической обработки изображения (по существу, предполагая, каким будет изображение )?
Notjagan

Ответы:


7

Python 2 + NumPy + OpenCV , 576 байт

Демо GIF

from cv2 import*
from numpy import*
n=input()/4
f="m.png"
i=imread(f)
b=array([0]*3)
y=array([165,195,225])
j=inRange(i,b,b+120)
k=inRange(i,y,y+25)
for x,y in zip(*where(j)):j[x,y]=k[x+3,y]-j[x+1,y]>1
j=j[506:732,152:557]
p=[array([11,9])]
for c in sorted(zip(*where(j)),key=lambda c:c[1]):r=range(p[-1][1]+1,c[1]+1);p+=map(array,zip(map(int,interp(r,*zip(p[-1],c)[::-1])),r))
for x,c in enumerate(p[25:-25:n]):s=-1/true_divide(*p[x*n+50]-p[x*n+25]);k=6/(1+s**2)**.5;line(i,*map(tuple,[(c+[int(k*s)+506,int(k)+152])[::-1],(c-[int(k*s)-506,int(k)-152])[::-1],b]))
imwrite(f,i)

Эта программа почти полностью разграблена, и есть некоторые аспекты, которые в настоящее время несколько неточны, но, по крайней мере, она работает по большей части. Кроме того, есть немного жесткого кодирования, но оно предназначено только для приблизительного окна, включающего границу и координату первого пикселя на границе (последний из которых я, скорее всего, на самом деле удалю позже).

Изображение, используемое программой, делится пополам по площади (т.е. 1120 x 865), поэтому длина нарисованных линий и расстояние между линиями меньше.


2
прохладный!! приятно видеть ответ!
геокавель

предлагаю удалить неработающую ссылку tio
Евгений Новиков

1
gif demo i.stack.imgur.com/RWQu4.gif . Применить мои правки
Евгений Новиков

@ ЕвгенийНовиков Спасибо за подарок! Это гораздо более показательно (и лаконично), чем фотографии, которые у меня были раньше.
17
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.