【发布时间】:2011-12-07 03:00:55
【问题描述】:
我想在Manipulate 结构中包含一些区域图,但是渲染速度几乎令人望而却步。代码是
ClearAll[regions, rplot]
r:regions[n_Integer, o_Integer] := r = Apply[And,
Subsets[Table[(#1 - Cos[t])^2 + (#2 - Sin[t])^2 <= 1, {t, 2 Pi/n,
2 Pi, 2 Pi/n}], {o}], {1}] &
r:rplot[n_Integer, o_Integer] := r = Show[{RegionPlot[
Evaluate[regions[n, o][x, y]], {x, -2, 2}, {y, -2, 2},
PlotRange -> {{-2, 2}, {-2, 2}}, PlotRangePadding -> .1,
Frame -> False, PlotPoints -> 100],
Graphics[Table[Circle[{Cos[t], Sin[t]}, 1], {t, 2 Pi/n, 2 Pi, 2 Pi/n}]]}]
这会产生类似的图形
GraphicsGrid[{{rplot[3, 2], rplot[5, 3]}, {rplot[7, 2], rplot[4, 1]}}]
在我的电脑上计算和渲染上述内容大约需要 40 秒。 谁能建议一种更快地获得类似质量图形的方法?
注意 1:我已经记住了图形对象,因此在我的演示中不需要每次都重新计算它 - 但即使是第一次也太慢了。
注 2:我对光栅化图像很满意,因此也许可以选择泛洪填充类型的解决方案...
注意 3:我需要像 Manipulate[
rplot[n, o], {n, 2, 10, 1, Appearance -> "Labeled"}, {{o, 1},
Range[1, (n + 1)/2], ControlType -> RadioButtonBar}] 这样的东西才能使用。
【问题讨论】:
-
形状总是圆形吗?
-
是的-所以我只想替换
rplot,除了它的速度之外,它与上面的没有区别。但是,如果您有更通用的解决方案,也欢迎! -
西蒙,我刚做完运动,脑子里一片混乱。您想为 n 或更多圆圈重叠的区域着色,每个离散区域的颜色不同。这是正确的吗?
-
@Mr.Wizard:是的。或者,更准确地为
n圆圈重叠的区域着色。如果填充不是完全不透明的,那么重叠超过n的地方会更暗。 -
(还是多云)如果你不给 more 多于
n圆圈重叠的区域着色,那么这些区域不会是 白色而不是更暗?