DynamicModule, Speed, and locally static variables.
- To: mathgroup at smc.vnet.net
- Subject: [mg82003] DynamicModule, Speed, and locally static variables.
- From: "W. Craig Carter" <ccarter at mit.edu>
- Date: Tue, 9 Oct 2007 05:36:51 -0400 (EDT)
Dear Mathematica Group, Sorry for the long question on combining Module, DynamicModule, LocatorPane, Manipulate to produce a GraphicsRow. I am in the middle of designing small program that uses Locator to find the position of a dynamic point and Manipulate to control the shape of the locator, and then compute an expensive result based on the position (from LocatorPlane) and the size (from Manipulate). Some calculations are expensive and don't depend on the locator position or shape. Other calculations are expensive and do depend on the locator's position and size. I am wondering how to scope this. Do I pay a penalty for local variables in DynamicModule that won't change? Here is what I am trying, I've made up an artificial example below that will (hopefully) show what I am trying to do. It is not working; I am not sure why, but guessing that it has to do with variable scope. I am hoping for two kinds of help: 1) that someone can comment about computational efficiency and dynamic variable scope. 2) that someone could point to a demo which does something similar. 3) I believe that I should be using ControlActive to separate the time scales from locator movement and graphics production. I can't quite see how that should appear here, yet. Does it make sense to have the following Module[DynamicModule[Manipulate[Locator]]] scoping? ----example----- demo[f_] := Module[{StaticExpression=ExpensiveFunction[f], StaticImage3D,StaticContourPlot, PositionInit={1,2}, LocatorSizeInit=1}, (*vars that don't change*) StaticImage3D=Plot3D[StaticExpression]; StaticContourPlot=ContourPlot[StaticExpression] GraphicsRow[ (*draw three graphics, 1-fixed, 2-manipulate, 3-result of dynamic variable and manipulate*) Flatten[ { StaticImage, (*first-image*) DynamicModule[newdata,{position=PositionInit,LocatorShape=Graphics[g[PositionInit,LocatorSizeInit]]}, {Manipulate[ (*manipulate returns a graphics object?*) LocatorShape=Graphics[position,size]; (*dynamic*) newdata=ExpensiveCalculation[position,size,StaticExpression]; LocatorPlane[Dynamic[position],StaticContourPlot,Appearance->LocatorShape],(*draw dynamic locator on static image*) {{size,LocatorSizeInit},0,1}], ArrayPlot[ExpensivistCalc[position, size, StaticExpression]] (*the final graphics object and most expensive*) } } ] (*dynamic module*) ] (*flatten*) ] (*graphicsrow*) ] (*module*) W. Craig Carter
- Follow-Ups:
- Re: DynamicModule, Speed, and locally static variables.
- From: "W. Craig Carter" <ccarter@mit.edu>
- Re: DynamicModule, Speed, and locally static variables.