如何在代码中重现这样的涂鸦图案?

时间:2010-09-17 14:34:46

标签: language-agnostic math graphics trigonometry

我偶然在wolfram alpha中制作了这张图:

Graph

您是否可以编写代码来生成此模式的更大版本?

你能制作类似的模式吗?

任何语言的可读代码都很好,但可以在浏览器中运行的东西最好(即JavaScript / Canvas)。如果您使用其他语言编写代码,请附上截图。

注意:

  • 上图的输入公式为:arg(sin(x + iy))= sin ^( - 1)((sqrt(2)cos(x)sinh(y))/ sqrt(cosh(2 y) )-cos(2 x)))(link
  • 您不必使用上述公式。产生类似结果的任何东西都会很酷。但“反向工程”Wolfram Alpha将是最好的
  • 等式的两边是相等的(我认为),所以WA应该只返回'true'而不是图形
  • 该模式可能是舍入错误的结果。
  • 我不知道模式是通过迭代每个像素还是基于矢量(点和线)生成的。我的猜测是矢量。
  • 我不知道造成这种模式的原因(“舍入错误”是最好的猜测。)
  • IEEE浮点标准没有说明sin或cos等应该如何工作,因此三角函数在平台和架构之间有所不同。
  • 请不要布朗动作情节

最后,这是另一个可能有助于你的使命的例子:(link

Graph 2

1 个答案:

答案 0 :(得分:3)

当您要求使用任何语言的类似外观模式时,这里是Mathematica代码(由于Wolfram Alpha基于Mathematica,因此非常简单)

alt text

修改

这确实是一个临时效果:

如果我们设置:

alt text

制作情节

Plot3D[f[x, y], {x, 7, 9}, {y, -8, -9},WorkingPrecision -> MachinePrecision]

结果是:

alt text

但是如果我们将绘图的精度扩展到30位数:

Plot3D[f[x, y], {x, 7, 9}, {y, -8, -9},WorkingPrecision -> 30]  

我们得到了

alt text

并且粗糙度消失了(这导致了你的涂鸦图案)

顺便说一下,你的f [x,y]是一个非常好的功能:

alt text

因此,如果我设法复制你的公式没有错误(这应该被认为是一个奇迹),你方程的两边只在x的某些周期范围内相等,可能是[2 n Pi,(2 n +) 1)Pi]