塔珀自指公式自定义图形批处理构造器

24game
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

Re: 塔珀自指公式自定义图形批处理构造器

帖子 24game »

我的理解上, 那个公式只是将 2 位色深的图形 利用数学常规运算和数论函数 混合公式 的一种编码方式

如果要对 2 位色深图形作最简单的编码, 最直接的方式是 1 个二进制位对应一个像素, 这样简单编码的空间耗费比 塔珀公式常数 都要小

所以, 塔珀公式只是一个娱乐方式

塔珀公式的宽高其实是可以变化的, 取 106 宽 X 17 高, 只是为了能将那个公式在数学上的形式用一个图片完全容纳得下

106 * 17 = 1802 个像素, 相应的, 原始的常数就需要 1802 个二进制位,

常规编程语言支持的整数数据类型没这么多位数, 比如最常见的 32 位整数.

如果要用常规编程语言来实现这个公式, 那么首先就要编写一些长整数运算函数, 这在我看来是很麻烦, 很不好玩的.

既然宽高可以变化, 我们就把它变小点, 5 宽 X 5 高 = 30 个像素, 只需要 25 位,

最大的 25 位进制数 再乘以 5
(2^25 - 1)*5 < 2^31 (32位二进制位 最大的有符号 整数)

这对于常规编程语言, 不会超出运算范围了


以下是用 6 宽 X 5 高 范围内 画出的一个 大写字母 B 的例子
图片
k=5*FromDigits["111111010110101101010101000000",2]; sh = 1;

tb = Table[

1/2 < Floor[ Mod[Floor[y/5]*2^(-5 Floor[x] - Mod[Floor[y], 5]), 2]],

{y, k + 5 - sh, k, -sh}, {x, 6 - sh, 0, -sh}];

g = Graphics[Raster[tb /. {True -> 0, False -> 1}], ImagePadding -> None, PlotRangePadding -> None]
24game
渐入佳境
渐入佳境
帖子: 54
注册时间: 2016年09月02日 22:09
联系:

Re: 塔珀自指公式自定义图形批处理构造器

帖子 24game »

@523066680

常规编程语言中, 求余运算 比如 一些语言提供 % 运算符, 一些语言提供拼写形如 mod 的函数, 但不一定真的和数学上 标准的 MOD 函数等同

这个可能存在的差别会造成容易被忽略的问题

另外, floor 函数在一些语言中是见不到的, 需要自行构造

没有和 数学标准 MOD 函数等同的运算符 或者 函数时, 也需要自行补充代码进行变通转换

例如, 若某语言提供一种求余运算, 那么要确定这个求余运算和 数学标准 MOD 函数的差别, 作以下几个运算都和 标准 MOD 函数的结果对比即可
5 % 3
-5 % 3
5 % -3
-5 % 3
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

Re: 塔珀自指公式自定义图形批处理构造器

帖子 523066680 »

24game 写了:
试了一晚上,先Perl后Python,从stackoverflow找too large的解决方法 到 wikipedia找示例代码!
最后抱着试一下的心态,把python3.5卸载了,把2.7装上,输出无误了! :coverface1

[ascii].
@ @ @ @@ @ @ @ @ @ @ @ @@ @ @ @
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
@@ @ @ @ @ @@ @ @ @ @ @ @ @@ @@@@ @@@ @@@ @ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@@ @@@ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @ @@ @ @
@@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
@ @ @@ @ @@ @@@ @ @ @ @ @@@ @@@ @ @@@ @@@ @ @ @ @ @
@@@ @ @ @ @ @ @ @ @ @ @ @ @@@@ @ @ @ @ @
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
@@ @ @ @ @ @ @@ @@@ @ @ @ @@ @ @@@@ @@@@ @ @
@ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @ @ @
@@@ @ @ @ @ @ @ @ @
@ @ @ @ @ @
@@@ @ @@@ @@@ @ @@@[/ascii]
happy886rr
渐入佳境
渐入佳境
帖子: 45
注册时间: 2016年09月27日 16:11
联系:

Re: 塔珀自指公式自定义图形批处理构造器

帖子 happy886rr »

灵台方寸山 写了:python3 取余

除法并取整数
3 // 2
哈哈,兄的这个//方法,让我写py省了很多字符。
happy886rr
渐入佳境
渐入佳境
帖子: 45
注册时间: 2016年09月27日 16:11
联系:

Re: 塔珀自指公式自定义图形批处理构造器

帖子 happy886rr »

523066680 写了:
24game 写了:
最后抱着试一下的心态,把python3.5卸载了,把2.7装上,输出无误了!
python3.几也行。略作修改
图片
from functools import reduce

k=4858450636189713423582095962494202044581400587983244549483093085061934704708809928450644769865524364849997247024915119110411605739177407856919754326571855442057210445735883681829823754139634338225199452191651284348332905131193199953502413758765239264874613394906870130562295813219481113685339535565290850023875092856892694555974281546386510730049106723058933586052544096664351265349363643957125565695936815184334857605266940161251266951421550539554519153785457525756590740540157929001765967965480064427829131488548259914721248506352686630476300
def f(x,y):
d=y%17+17*x
e=reduce(lambda x,y:x*y,[2 for x in range(d)]) if d else 1
return 0.5<(y//(17*e)&1)

for y in range(k+17,k-1,-1):
line=""
for x in range(0,107):
if f(x,y):
line+="■"
else:
line+=" "
print(line)
头像
灵台方寸山
出类拔萃
出类拔萃
帖子: 76
注册时间: 2016年08月06日 16:40
来自: [color=red]斜月三星洞[/color]

Re: 塔珀自指公式自定义图形批处理构造器

帖子 灵台方寸山 »

happy886rr 写了:
灵台方寸山 写了:python3 取余

除法并取整数
3 // 2
哈哈,兄的这个//方法,让我写py省了很多字符。
我不生产方法。我只是教程的搬运工。 :crazylaugh4
:crazylaugh3 :oh_no
少发点科普,对中医产业,骗子产业不好。
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 0 访客