... ¡Y México lo pagará!

26

Donald Trump está muy impresionado con el trabajo de las personas en este sitio. Él vio lo increíble que fue el trabajo que hiciste ayudando a Ben Carson , por lo que incluso te contrató para construir su muro . Él piensa que eres genial. Ahora necesita tu ayuda de nuevo. Si bien ha construido con éxito su muro, ahora necesita que el gobierno mexicano lo pague. Quiere cobrar $ 1 millón por milla, y les ha dicho que la frontera entre Estados Unidos y México tiene 1,989 millas de largo . Sin embargo, no están seguros de que este número sea exacto, por lo que también les gustaría una representación visual a escala. Ahí es donde entras. Debes tomar este mapa: ingrese la descripción de la imagen aquí

y por cada n (50 <= n <= 500) millas en el borde, dibuje una línea de 25 píxeles de longitud, perpendicular a la pendiente del borde en ese punto. Usando la escala en el lado derecho del mapa, he determinado que 100 millas ~ 50 píxeles . He dibujado una muestra de las primeras 3 líneas para n = 60, pero estas son solo aproximadas:

ingrese la descripción de la imagen aquí

Notas:

  • La única entrada es n . La salida debe ser la imagen del mapa, con las líneas agregadas, dibujadas en la pantalla o guardadas en un archivo de imagen ráster (puede sobrescribir el archivo del mapa original).
  • Puede guardar el archivo de mapa en blanco con el nombre de archivo que desee. Es un JPEG, pero puede convertirlo a otro formato ráster común si lo prefiere. Además, puede reducir el tamaño de la imagen hasta en un 50%, siempre que mantenga las dimensiones proporcionales y sus líneas aún estén a escala.
  • Cada línea debe ser perpendicular a la pendiente del borde en ese punto. La pendiente debe calcularse comenzando 50 millas antes del punto y terminando 50 millas después del punto.

Exactitud:

  • La pendiente de cada línea puede tener un margen de error de ± 5 °
  • El espacio entre cada línea puede tener un margen de error de ± 20 millas (10 píxeles en el mapa normal).
geokavel
fuente
3
El precio de $ 10000 / milla probablemente se reduzca por un factor de 100, a menos que por "muro" se refiera a 3 hebras de alambre de púas instaladas por trabajadores que ganan $ 2.50 / hora.
Glenn Randers-Pehrson
1
Además, Mma afirma que la frontera entre Estados Unidos y México tiene aproximadamente 1952 millas de largo.
LegionMammal978
18
Es bueno saberlo, pero lo importante es que ninguno de esos números significa nada para este desafío.
geokavel
@geokavel Continúa y responde.
programmer5000
1
Además, la intención de este desafío es poder procesar la imagen e identificar el borde antes de dibujar las líneas, o es aceptable poder dibujar las líneas sin procesar realmente la imagen (suponiendo esencialmente cómo será la imagen) )?
notjagan

Respuestas:

7

Python 2 + numpy + OpenCV , 576 bytes

GIF de demostración

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)

Este programa es casi totalmente inexperto, y hay aspectos que son algo imprecisos en este momento, pero al menos funciona en su mayor parte. Además, hay un poco de codificación, pero es solo para una ventana aproximada que encierra el borde y la coordenada del primer píxel en el borde (el último de los cuales probablemente eliminaré más adelante).

La imagen utilizada por el programa se divide a la mitad en área (es decir, 1120 x 865), por lo que la longitud de las líneas dibujadas y la distancia entre líneas es menor.

notjagan
fuente
2
¡¡guay!! genial ver una respuesta!
geokavel
sugerir eliminar el enlace tio que no funciona
Евгений Новиков
1
demostración de gif i.stack.imgur.com/RWQu4.gif . Aplicar mi edición
Евгений Новиков
@ ЕвгенийНовиков ¡Gracias por el gif! Es mucho más ilustrativo (y breve) que las imágenes que tenía antes.
notjagan