【问题标题】:How can I reproduce a scribbly pattern like this in code?如何在代码中重现这样的涂鸦图案?
【发布时间】:2010-09-17 14:34:45
【问题描述】:

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

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

你能做出相似的图案吗?

任何语言的可读代码都很好,但最好是可以在浏览器中运行的代码(即 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 等应该如何工作,因此 trig 函数因平台和架构而异。
  • 请不要使用布朗运动图

最后,这是另一个可能对您的任务有所帮助的示例:(link)

【问题讨论】:

  • 您的等式仅适用于 x 的某些范围的问题似乎与多值函数有关。如果你取双方的 Sin[],你的平等无处不在。

标签: language-agnostic math graphics trigonometry


【解决方案1】:

当您询问任何语言中相似的外观模式时,这里是 Mathematica 代码(真的很简单,因为 Wolfram Alpha 基于 Mathematica)

编辑

确实是四舍五入的效果:

如果我们设置:

并制作一个情节

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

结果是:

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

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

我们得到

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

顺便说一句,你的 f[x,y] 是一个非常好的函数:

因此,如果我成功地复制了您的公式而没有错误(这应该被认为是一个奇迹),那么您的等式两边仅在 x 的某些周期范围内相等,可能形式为 [2 n Pi, (2 n + 1) 圆周率]

【讨论】:

  • +1 和 -1:我很受诱惑,但认为它太容易而且太无用了。干得好@belisarius,因为你有足够的胆量发布这个。
  • @High Performance Mark 我只是认为 OP 可能会受益于学习情节的形式为“ContourPlot[f[x,y] == 0]”,因为 Wolfram Alpha 没有显示那...但是是的...-1 :)
  • 不是我想的那样 :) 但它确实有助于澄清事情并且确实提供了更好(更大)的模式图像,因此仍然值得赞赏。
  • @High Performance Mark 你的 -1 是我心中的一个刺 :)。见编辑
  • 再次感谢! “仅在某些周期范围内相等”我怀疑它可能只是错误的符号(那些平方根可能应该在它们前面有 +/-?)我只是在推测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多