……墨西哥将为此付出代价!


26

唐纳德·特朗普对该网站上的人们的工作印象深刻。他看到您帮助Ben Carson所做的工作多么了不起,因此他甚至雇用您建造自己的墙。他认为你很棒。现在他再次需要您的帮助。虽然他成功地修建了自己的隔离墙,但现在他需要墨西哥政府来支付这笔费用。他想每英里收费100万美元,他告诉他们美墨边境长1989英里。但是,他们不确定此数字是否准确,因此他们也希望按比例绘制视觉表示。那就是您要进入的地方。您将使用此地图: 在此处输入图片说明

并针对边界上每n(50 <= n <= 500)英里绘制一条25像素长的线,该线垂直于该点的边界斜率。使用地图右侧的比例尺,我确定了100英里〜50像素。我为n = 60绘制了前3行的样本,但这些只是近似值:

在此处输入图片说明

笔记:

  • 唯一的输入是n。输出应该是地图图像,其中添加了线条,将其绘制到屏幕上或保存在光栅图像文件中(您可以覆盖原始地图文件)。
  • 您可以使用所需的任何文件名保存空白地图文件。它是JPEG,但可以根据需要将其转换为另一种常见的栅格格式。另外,只要您保持尺寸比例不变,并且线条仍然可以缩放,就可以将图像尺寸最多减少50%。
  • 每条线应垂直于该点的边界斜率。应从该点之前的50英里处开始计算坡度,并在该点之后的50英里处终止计算坡度。

准确性:

  • 每条线的斜率可以有±5°的误差范围
  • 每条线之间的间距的误差范围为±20英里(在常规地图上为10像素)。

3
10000美元/英里的价格可能降低了100倍,除非您所说的“墙”是指工人安装的3股铁丝网,每小时可以赚2.5美元。
Glenn Randers-Pehrson 2015年

1
此外,Mma指出,美国与墨西哥的边境约1952英里长。
LegionMammal978 2015年

18
很高兴知道,但是重要的是,这些数字对这一挑战都没有任何意义。
geokavel 2015年

@geokavel继续回答。
程序员

1
此外,此挑战的目的是能够在绘制线条之前处理图像并识别边框,或者仅在不实际处理图像的情况下就可以绘制线条(基本上假设图像是什么样的情况)是否可以接受? )?
notjagan

Answers:


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
凉!!很高兴看到答案!
geokavel

建议删除unworking蒂奥链接
ЕвгенийНовиков


@ЕвгенийНовиков感谢您的gif!它比我以前的图片更具说明性(简洁)。
notjagan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.