龙的形象


23

我看到一个由正方形制成的双龙曲线的酷图,不知道如果我们从另一个基本图像开始会发生什么。所以我写了一个程序来做到这一点。

                                       

太酷了,我以为作为挑战来做会很有趣。

任务

您将拍摄一个正方形图像,其边缘长度为2的幂(大于4)。

要制作此图像,您应先将图像分成4个相等大小的垂直带,然后将相邻的带沿相反方向移动为图像大小的八分之一(移动的带应环绕到另一侧)。然后,您应该在每次将图像分为两倍的分割并向上一次移动一半时重复此过程。每次迭代都应在垂直和水平移位之间交替。您应该进行迭代,直到移位要求您移位完成的点数像素(始终为1/2)。

从左向左垂直移动奇数编号的带(零索引)时,应向下移动,而偶数向上移动。水平移动时,从顶部起奇数编号的频段应向左移动,而偶数编号的频段应向右移动。

您只需要输出/显示转换的最终结果,而不是像gif所示的所有中间步骤。

这是因此目标是最小化以字节为单位的源代码长度。

通过示例工作

我将逐帧浏览页面顶部显示的cat gif。

这是起始图像:

该图像为512 x 512像素。我们将其分为4个频段,以将每个频段垂直移动和移动1/8图像尺寸(64像素)。

现在,我们将其分为两倍的频段(8个频段),并将其移动到上次的一半(32像素)。这次我们将水平移动。

现在,我们这次再次垂直移动,分为16个波段,每个波段移动16个像素。

32波段8像素水平移动

64波段4像素,垂直移位。

128个波段,2个像素,水平移动。

256个波段,1个像素,垂直移位。

由于下一个移位将要求我们将每个波段移动半个像素,因此我们将在此处停止并输出结果。

测试用例

我有一个可以制作这些图像的工作脚本,所以我想我会让你们选择测试用例的图像。因此,如果您有一个平方的图像是2的幂次方,那么您希望看到它变成龙形。随时将其发送给我,我将其作为测试用例。

测试1 出1

您还应该在纯白色或纯黑色图像上进行测试,以便确定像素是否消失。



2
龙的形象?哎呀
Conor O'Brien

我认为,导致关闭的主要原因是不清楚图像应移动多少次。如果您指定应该发生转移的次数,那么我认为会很好。对我来说,没有什么不清楚的。
“ SparklePony同志” 17年

1
@LuisMendo,**Start** by shifting one 8th of the size of the image那么repeat ... each time splitting the image into twice as many divisions and shifting half as far as the previous time第一次是1/8,第二次是1/16。第三个1/32,直到像素数为小数为止。我看不出有什么不清楚的地方。
Level River St

Cartmanager由于人们对此一无所知,我认为一个显示链接示例的前几个静态框架的工作示例(显示一个简单的正方形)可能比动画更有用,并且更易于理解。(将现有的猫动画放到很酷的地方,但要抓住这个概念就很忙了。)
Level River St

Answers:


11

MATLAB,237字节

function A=r(A);n=size(A,1);p=@(a,v)permute(a,[v,3]);k=n/8;v=1:2;while k>=1;b=mod(0:n-1,4*k)<2*k;x=find(b);y=find(~b);c=[k+1:n,1:k;n-k+1:n,1:n-k];A=p(A,v);c=c(3-v,:);A(x,:,:)=A(x,c(1,:),:);A(y,:,:)=A(y,c(2,:),:);A=p(A,v);k=k/2;v=3-v;end

由于我不了解规格说明中的步骤,因此进行了一些猜测工作,但是借助了图像,它起作用了。


7

Python 2中,317 313 304 298

from PIL import Image
I=Image.open(input())
w,h=I.size
b,p,q,s=4,w/8,1,1
while p>1:o=I.copy();o.paste(I,[(w-p,0),(0,w-p)][q==1]);o.paste(I,[(p-w,0),(0,p-w)][q==1]);q*=-1;x=0;exec'o.paste(I.crop([(0,x,w,x+p*2),(x,0,x+p*2,w)][s%2]),[(q*p,x),(x,q*p)][s%2]);q*=-1;x+=p*2;'*b;p/=2;I=o;s+=1;b*=2
o.show()

1
根据我们的网站规则,您可以使用input()并期望将其作为字符串传递来获取输入,而不是raw_input()
小麦巫师

2

Mathematica,177个字节

这很慢,没有完全打高尔夫球。

r=ImageRotate;r[#2,Pi/2(3-#)]&@@Nest[{#+1,ImageAssemble@MapIndexed[RotateLeft[#,(-1)^#2]&]@ImagePartition[r@#2,Reverse@d/2^{#,#-1}]}&@@#&,{3,#},Log2@Min[d=ImageDimensions@#]-2]&

这是莉娜:

莉娜

这是龙莉娜:

在此处输入图片说明

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.