rowett wrote:Were you envisioning N, S, E and W being defined as cells per generation where:
- -c <= N, S E or W <= c
- N >= S and E <= W
- non-growing patterns would have N=S and E=W
This description makes me try to think about two different things at once. The inequalities make sense for points along the X and Y axes, but the definition would be a starting N, S, E, and W, plus a deltaN, deltaS, deltaE, and deltaW which would all usually be between -1 and 1.
I see that there are some things to worry about as regards "N >= S and E <= W", if you're trying to avoid having the N and S or E and W boundaries coincide (and possibly cause division by zero errors). I was kind of thinking that the current closest zoom level would put a cap on that kind of thing, and that the boundaries could be swapped if the N one got farther south than the S one (or whatever).
Huh. "E <= W". What kind of coordinate system has the X coordinate increasing to the west, anyway? Have been meaning to ask about that. For the April Fool's knightship I originally wrote
#C [[ T 6 X -1 Y 2 LINEAR ALL ]] (simplified)
because by T=6 I wanted the camera to move by (-1, 2), left 1 and down 2, to keep up with the "knightship" motion. But to make it work I had to edit that to
#C [[ T 6 X 1 Y -2 LINEAR ALL ]]
and I didn't really know why -- just kind of shrugged and moved on, figuring I was just confused and it would all be clear if I thought about it more. But today I'm still confused.
---------------------------
Here's an alternate proposal that allows a lot more interesting cases to be covered -- including the pi ship one that doesn't stick out beyond the LWSSes on the right at all for a while, and then it does.
- Define a Point of Interest (POI) as POI X1 Y1 T1 X2 Y2 T2, where the point is considered to move linearly from (X1, Y1)@T1 to (X2, Y2)@T2
- Points of interest always have to be inside the view, so if the current view doesn't include the POI's current location, adjust the appropriate boundary so that the point is (at least barely) visible.
- Add more POIs, at least one for each moving boundary -- and if a boundary shouldn't move at first, then start with T1>0... and if a boundary should start moving faster after a while, define a second POI that moves faster than the first POI at that boundary.
- If AUTOFIT is turned on, then consider the corners of the current active pattern's bounding box to be POIs also.
- [Tangential thought: might it be possible to have an AUTOFIT version that includes LifeHistory 'blue cells', or the LifeViewer equivalent?]
- If all POIs are inside the viewport, or if there are no active POIs, then there's nothing to do and the zoom level can remain the same.
- If one POI moves outside of the viewport, the default is to move the camera and keep the zoom level the same... but if that would move another POI outside of the viewport, then the zoom level has to change.
The appearance and disappearance of POIs could affect the viewport in all kinds of interesting ways -- could allow an alternate way of tracking multiple signals simultaneously through a circuit without having to calculate common center locations or zoom levels.
rowett wrote:The other thing to bear in mind is that the LifeViewer grid is a maximum of 8192x8192 cells. This is not an issue for the TRACK command because it LOOPs. If you're not looping then at some stage your pattern will hit the grid boundary.
Thinking about it, it's usually fine to stop or loop at some point, which can be chosen safely below the limits of the viewer. Growing patterns tend to get boringly predictable well before 8192x8192, and really you might as well start them over. Just wouldn't want them to start over too early, before the pattern was established.