2011-06-15 56 views
2

以下是改编自一个真实的世界代码:如何加速动态显示带有自定义刻度的图形?

ticks = Join[ 
    Table[{i, Style[i, 10, Background -> White], {.04, 0}}, {i, 0, 20, 
    1}], 
    Table[{i, Null, {.01, 0}}, {i, 0, 20, 0.1}], 
    Table[{i, Null, {.025, 0}}, {i, 0, 20, 0.5}] 
    ]; 
loc = {1, 1}; 
LocatorPane[ 
Dynamic[loc, loc[[2]] = #[[2]]; &], 
[email protected][ 
    Graphics[{Dashed, 
    Line[{{loc[[1]] - 0.5, loc[[2]]}, {0, loc[[2]]}}]}], 
    ImageSize -> 300, PlotRange -> {{-10, 10}, {0, 20}}, 
    Axes -> {False, True}, AxesOrigin -> {0, 0}, 
    Ticks -> {Automatic, ticks} 
    ]] 

我的问题是,当我使用自定义蜱,更新(移动定位器)变得比自动蜱(Ticks -> {Automatic, Automatic})慢得多。我怎样才能避免我认为是蜱重建时间?

(I确实需要[email protected][...]有关此代码示例中未示出的其它更新的原因)。

+0

请提供你的程序的'动态@ Show'部分的详细信息。您可能很好地呈现一组“Ticks”,然后覆盖“Graphics”。 – 2011-06-16 00:11:24

+0

取决于你正在尝试做的,也可能是你能够移动''里面Graphics' Dynamic':'显示[图形[动态@ {破灭,...' – 2011-06-16 00:39:08

+0

你能给出一个更完整的例子,显示了为什么你需要'Show'外的'Dynamic'?正如其他人所提到的,如果你可以在内部进一步推动'Dynamic',你就有可能获得更加快速响应的图形。 – 2011-06-16 03:24:51

回答

3

正如中移动Dynamic的例子:

ticks = Join[ 
    Table[{i, Style[i, 10, Background -> White], {.04, 0}}, {i, 0, 20, 
    1}], Table[{i, Null, {.01, 0}}, {i, 0, 20, 0.1}], 
    Table[{i, Null, {.025, 0}}, {i, 0, 20, 0.5}]]; 
loc = {1, 1}; 
LocatorPane[Dynamic[loc, loc[[2]] = #[[2]]; &], 
Show[Graphics[ 
    [email protected]{Dashed, Line[{{loc[[1]] - 3, loc[[2]]}, {3, loc[[2]]}}]}], 
    ImageSize -> 300, PlotRange -> {{-10, 10}, {0, 20}}, 
    Axes -> {False, True}, AxesOrigin -> {0, 0}, 
    Ticks -> {Automatic, ticks}]] 

不知道更多关于你的程序的其余部分,我不能有很大的帮助。

+0

我有一个返回Graphics对象的功能,所以我做的:显示[图形[...],myFunction的[LOC]。是否有一种安全的方法去除元素的图形标题,以便在两者之间添加Dynamics? – 2011-06-16 13:26:21

+1

@ P.Fonseca你可以使用'myFunction的[LOC] /图形[E _]:>图形[动态[E]]',而不仅仅是'myFunction的[LOC]'。 – 2011-06-18 12:40:55

+0

@Sjoerd C. de Vries这是一个很好的解决方案! 谢谢。 – 2011-06-20 11:28:27

相关问题