Monday, December 28, 2015

Making a movie out of large volume batch images using ffmpeg

I've used ffmpeg to do this, and it is done through console command application.

From terminal, just go to the directory of still animated images.  

In order to create a movie, the files will need be sequentially numbered.  Also you may need to break, large volumes into smaller parcel chunks.  This is true especially if you are working in large volumes where apparently memory management and flushing memory for compilation of a given video using ffmpeg become problematic.

The command given below indicates how to compile a video using a file number start sequence that isn't by default zero:

ffmpeg -start_number 13473 -f image2 -r 25 -i screen-%5d.tif -vcodec libx264 movie.mp4  

-start_number 13473  indicates the start number at file string name 'screen-13473.tif'  based upon all the other command parameters also provided.

-r 25 indicates the frame rate. 

-i screen-%5d.tif  indicate the string path name of the batch file that is beginning with the string 'screen-' and then having a 5 digit number followed by the '.tif' string.  

-vcodec libx264 is the codec for compilation.

finally movie.mp4 is the file name into the compilation directory or whatever user specified directory is provided.


Friday, December 25, 2015

Interesting story I recall somewhere...

goes something along the lines of...

here's a bit of philosophy The Story of the Taoist farmer...

This farmer had only one horse, and one day the horse ran away. The neighbors came to condole over his terrible loss. The farmer said, "What makes you think it is so terrible?"

A month later, the horse came home--this time bringing with her two beautiful wild horses. The neighbors became excited at the farmer's good fortune. Such lovely strong horses! The farmer said, "What makes you think this is good fortune?"

The farmer's son was thrown from one of the wild horses and broke his leg. All the neighbors were very distressed. Such bad luck! The farmer said, "What makes you think it is bad?"

A war came, and every able-bodied man was conscripted and sent into battle. Only the farmer's son, because he had a broken leg, remained. The neighbors congratulated the farmer. "What makes you think this is good?" said the farmer.

I couldn't recall the story...of course, it sucks having the broken leg, but as to what seems bad initially.  

You don't have friends?  Is that always bad?

I do a little poke teasing here...

Story here

The Story of the Taoist Farmer

Thursday, December 24, 2015

I find that psychological profiling analysis at a glance is...

I find that psychological profiling analysis at a glance is...

  Often given to the perceptive misgivings of an the observer as opposed to the observed.
Case in point, if you say something that seems psychologically disagreeable with another, they think that your view must be an emotional statement as in, "you are disturbed, or you are mad or angry" which say more about the observer likely which is "I don't believe what you are saying and if I did I might have a hard time coping emotionally".  The problem that I offer to the observer is that you are projecting your sentiments, feelings and emotions on the observed.  Shit I don't know how many times I have had this argument.  :)

In order to understand the world...

  this is related to having a higher levels of interactivity with it, yet in having a higher levels of interactivity could very well mean having learned something that you may have suspected true, having been told were true, or having observed a degree of such truth.  Obviously if you felt it were sensible neither interacting with parts of the world in mind to any degree of safety or having cared entertained another facet of a given world in a given social sense there is nothing wrong with it, and then neither having cared entertained anything else once having been familiar, such as I am not twenty now as opposed to being forty plus years old.  Of course, going through these particular phases in life mean something like, "I grew out of any fondness in discovering what people may or may not be like."  That is, even if you need not believe that anything of creepy fascist spy culture out and about in the world, this need not serve as the primary rational justification of choosing to stay in or having gone out and about in a given world, or having said that one might actually be missing out on much in a given world.  Anyways, we learn to make due with the things we have in life, and some are forcible put in situations of living under circumstances of confinement for long duration.  Obviously, one finds ways of coping and surviving in these circumstances, or one simply doesn't.  Which is to say how ever perceptively narrow, it seems, circumstances may seem is given by a measure of 'How do you see the glass?  Half empty?  Half full?'  Of course, there may be any number that could scarcely tolerate and in like kind that one might find less tolerable if having put one's self in another's shoes.  That is certainly what gives rise to the distinction of self.  There are some that live their very lives in the neighborhoods that they grew up and spend an entire lifetime neither wandering more than a few miles from such.  There are some given the freedom of shunning much of the outside world and having lived so much in a defined world that were relatively much insular.  Certainly, even given the issue of forced confinement, there are always decisions to be made in so far as empowerment as it is likely true when supposedly confinement is neither so strictly defined.

Ambiguous feedback...

   given by one really being interested in another's dissertation on these matters.  Amusingly, there is all the biases of point 1 (above) given, where one assumes that by given degree of verbosity that there must be obsessive compulsive disorder (merely having said anything or caring to such), though apparently this could be given to the more common place disorder of the mid western man having believed that one's emotional centers were given in the form of less talk, or thereby any supposed symptom of emotional disarray were shown from any deviance of 'quietude'.  :)   That is, certain governments love it when they are treated with all the respect of a parent that meddles in the lives of families with all the power to ruin and destroy relationship and given to all power in controlling who is 'fallen' versus 'risen'.  They may certainly love it having the excessive power in mediating the emotional psychology of families in so far as faith.  It is true when such power is exemplary of a confessional, or having provided psychological consolation in turn to those having felt alienated from a given collective social organism which is defined as more than town but country as a whole.  Though today, one should imagine, it is all given to a different degree, all embedded in the synthetic broken social scene, embedded in all the consumerism and commercial enterprise that makes 'America the country that it is'.  Of course, there is nothing wrong with feeling 'alienated' so long as return to the notion that 'you have brought this on yourself'.  Of course, you might have 'brought' this upon yourself invariably for all sorts of reasons which is very much given by as much reason that you seek 'their' forgiveness, not the other way around even if rising social dissent seems more likely a given and social polarities couldn't be more self evident which seem also to suggest that the collective power and authority of such social collective couldn't also be potentially more arbitrarily invested.

  lame...because all of this could in time could potentially be garbled one were ever too successful in saying.  Have you considered that your situation is defined as such because it isn't just you?  Have you considered that there are as likely broadcasting algorithms to anything and everything you say on a given social networking platform which controls the extent of a potential broadcast and the impact of a given outreach?

Some could tell you how to get a social life if you wanted to, but then, even if you don't care for anything of that being said above, you'd probably not like all the social hoops that you'd have to jump through in getting one.  It takes something stupidly energetic in this day and age and given more likely to all the individual rolling a rock up the hill to watch it roll right back down more often than not, that is, assuming you avoided all pitfalls in such process.


Tuesday, December 22, 2015

Anyways what is to come of it if anything and everything you say is potentially under lock and key?

I ask this question because it is true.

Is it gate filtering on anything and everything said?

Not exactly sure, but maybe none of this true or maybe it is.

Then you understand why some seems to care little about violations of constitutional freedoms here given that it all along reflects a given trend.

Although, I might have to correct myself what free speech is really guaranteed in so far as the internet and having access to it through a given ISP?



Ominous notice and the holiday season

   The year of ominous notice.  I have been quiet up to now because generally it has been rather quiet though not completely at times.

One year, so many years back, I happen to be driving a short jaunt (literally less than a mile) while having come across a car with a bumper sticker reads on the back of a car shockingly rude enough to anyone in clearest view, "You are such a disliked a**hole.  You should have prostate cancer."  The driver's use of bumper sticker advertisement, however, might have seemed a bit atypical for a mid western person in general, or maybe even in a regional context atypical, especially where it were given to something of rude advertising with potentially malicious and threatening notice?  It were in proximity to any given annual holiday season, a postcard surfaces in the mail a few days later.  Somehow I'd been signed up for information concerning a speaking engagement of renowned proctologists from the Mayo clinic at Unity village, though I couldn't recall ever having any expressed interests interests in so far as medicine in this area.  You might have had the sense that there were something more than someone having the conspired interest in routing for one's personal health decline in certain areas.

Sure it seems to run amiss in the cruel social behaviors, namely I'd pin it on conservatives as likely, or it could be something as given more obvious in the area where it is most often found...maybe over on Facebook or Twitter where lingering vulturism eagerly might have awaited the death knell of a former President Jimmy Carter or at least some furthered horror news.  They [such conservatives] might have danced in the streets of New Jersey chanting 'God is Great' among their Christian Coalition cronies.  Though I am not sure in my personal case, if such should have anything to do with politics in the sense that I were as much, out of water, being a democrat in a largely Republican stronghold, or just having been socially targeted by one of those 'groups' invariably for one reason or another that should represent a shit list in so many words.

Really though I imagine it depends on the year and certainly, it seems useful taking all of this in stride.  The seemingly menacing and bellicose behavior is arguably given different measure from year to year.  This year such weren't given potentially in the form of a driver put in a car sent out on a given mission, coupled to any lame attempt in communicating further via postcard, but at least the narrative should be approximately the same.  The same sorts up to their well wishing for the holidays...

All having to do with fastidious attention to personal health and any manner of behavior to go with it.  Year to year, I attribute it to rise of BROKEN SOCIAL SCENE.  Surely, in a way, you have to take it all in stride.  I will likely survive into a specific age category beyond another bracket.  Any investment this year around were likely cheaper.

Occasionally a proximity tailgater from the past, is put up to making the effort of making the unwelcome call on occasion, though never receiving a response,  one should in like kind politely offer, the initiative taken is often at their behest which is a clue enough and the responses given much the same.

I then think of a few brief solicitations after an equivalent 'spring/fall' garage cleaning for odds and ends in the house.  No wants to be an absolute pack rat.  For what I thought might have been innocuous stuffs, a now antique Craftsman table saw, a caller inquires (in the paraphrase):

'I saw your ad for a table saw.'

'Yes, it is up for sale as advertised.'

'Would you be willing to sell this for less?'

(Thinking to myself I hadn't placed this OBO but...)

'Sure I might be willing to do half.'

'That's sounds fine.  The price is too low.  I live near the Walmart supercenter in [unaforementioned] town nearby. You ever been there?'

(hmm supposed to be small chat I would guess but sort of sounds like strangely leading questions but whatever...small town bumpkin one should gather).

'I don't recall.'

(whatever... call terminates)

Though it seems in retrospect, the caller seems to be leading into 'I know why you are selling these things and you aren't above my suspicion sort of effort'.  Price 'too low'?  How could you sell something 'too low'?  There isn't anything illegal by selling anything 'too cheaply'.  Some sell things cheaply just because you can, or you don't really fucking care.  But mostly you figure, the dude was on a limited budget, maybe he were looking for something 'forensically' and his 'department' asked him to get the price as low as possible, and likely like any other garbage collected from the premise going to sit for decades warehoused and collecting dust.  Entirely there might be something coincidental, who knows, but in the end leading one to roll one's eyes.  What could I possibly be doing with a posting...it seems if I had a connection in transacting a table saw to someone I might not post a solicitation in selling a table saw in the first place?  Which sort of runs along the lines of, 'We know you are up to something but we don't what you are up to?'  At this moment I imagine the man's eyes narrowing into tiny slits with the 'look'....In the end I was just selling a damn table saw because it was taking up space?

Too much of the Falcon and the SnowMan shit turns into The Man with One Red Shoe all the fucking time...

its okay to laugh now...

Monday, December 21, 2015

Abstracting my work for Terrain heightmap colorization (Pythonic)

I should probably reference this at a given code site where I have been developing, but generally I like discussing this and its to add to my blog collection.  Ideas are developed in Python at the moment.  Basically working on abstracting existing process.

Thresholding how it works:

Thresholding (TH) are housed in a list nested dictionary called TH are read and unpacked and accordingly applied in sequential order based upon its 'sequence' identifier.

THs need have the following key information:
 'Landtype' specified either 'Flood', 'Land', 'Mount'
 'Type' specified either 'Height', or 'Normal'
 'TBracket' or Threshold bracket range these need supplied ordered csale
 2 tuple 0 <= value <= 1.  Note: any overlap in the bracketing range from one dictionary value to the next on the same landtype will lead to mixing of modules which may or may not be what you are looking for.  If you want distinct textures for specific normal ranges you will need to keep the Tbracket ranges non overlapping for min max cscale ranges chosen for each of the same landtype.  Note: TBracket set [0,1] means thresholding is off (or covers the range).
'Fractal'  boolean means color mixing is either fractalized between   on the modules 1d polar spectrum or not.  If not chosen mixing method is  by default given (ratio of measured distance of a normal relative to threshold relative to the maximum normal distance for such threshold range)
 A list will at a basis at least a 2 tone 1 dimensional polar spectrum.
Meaning these will be assigned at least two color tones at either polar end.
Position values of any color tone range from 0 to 1.
Open poles and all positions between such applied to the nearest (to pole)
color position will be the same color as such as nearest neighboring color.
Linear interpolation will apply in so far as mixing between colors.
'Colors'  is a 2 dimensional list.  A nested list contains a rgb color
assignment 3-tuple and its position marker
 'nsize' (applies if 'Fractal' is true) This sets the fractal size.
'nbasis' ('Fractal' true).  This selects the basis of the fractal (see below).
'lacunarity' ('Fractal' true).  This sets the lacunarity of the fractal noise.
'depth' ('Fractal' true).  Depth (see below)
'dimension' ('Fractal true).  see below.
'Name' This is non used in terrain generation but kept for organizational purpose.
'Id'. This is the corresponding driver id for color mixing.
 It is noted that internal color mixing is given with all the internal
 instructions given by the TM itself, but this doesn't provide external mixing instructions for a given output color determination.
 Calls to TM are done especially with calls to fractalization for color mixing that are not handled by the color mixing modules directly (no mixing driver interface provided here).

 Mixing (MM)
Dictionary key: Module ID, Value:
All mixing module ins and outs are routed through ColorInOut module.
Mixing Modules is a list dictionary with the following properties:
 'Id'  Module Id.
 'Ins' Module input identifiers are provided here.  2 are necessary to proper functioning of the module.  These are 2 tuple defined.
 'Outs' Module output identifiers here.  Minimum of 1 supplied.
 'Type'  Type is given by one of the following:
  'Multiply, Screen, Overlay, Hard light, Soft Light, Dodge, Burn,
  Divide, Addition, Subtract, Difference, Darken Only, Lighten Only,
  Normal (colorlerp), Normal2 (colorlerp2)'
 'FactorType' either 'fixed' or 'variable'
 'FactorVar' (if FactorType set 'variable' only) set either 'normal' or
'height'
 'Factor' (FactorType set 'fixed' only).  This is a real value from 0 to 1.  The factor amount for the mixing type.
 'Falloff'. This is the amount of feathering applied for a given threshold
 you must use the cf ranges specified below.  You can choose, .05, .1, .2
 to .7.  The cf value must exist in the cf dictionary (see below).
Setting 'Falloff' to 0 (zero) otherwise, specifies that mixing falloff is turned off.
 'Landtype' is given by 'Flood, Land, or Mount'
 All 'variable' factor is given by 'RH(N)D/TH(N)D' (ratio of measured
 height or normal distance
 on a given height/normal land type range relative to total height/normal distance for such land type range...

 ColorInOut (CIOM)
 dictionary
 'id'  This is the module id for a given color input assignment
 Note any module ID is given either by a threshold module or mixing module.
 so it is likely important that any identifier provided for either module type neither has id overlap.
 'RGB' is the rgb standard 3 tuple given value (non normalized).
 ColorInOut Module is a dictionary database for the mixing driver.

Mixing Driver (MD)
 ordered list
 given by a operating mixing module ID sequence.  It is up to a user to supply a valid sequence so that all chain inter dependencies in a given computation
set are appropriately handled...if this were given in a visual context, it is up to the user supplying a valid and properly linked chain node from one mixing module node to the next.

Node Chains (NCs)
 Dictionary:  key - Id - Mixing node chain[mixing id list]
 These are a given layer between the mixing driver and threshold modules
The way that these are structured is 'if, then'  That is 'if' threshold module ID is computed 'then' the following mixing module nodes are linked to this tm.

DirectColorInput(DCI)
This allows one to directly input colors into the ColorInOut dictionary so that it is stored with a reference identifier in the CIOM.  That is, it is not an identifier that is given either as a result of TM computation or a MM computation.

Schematics of overall terrain colorization goes as follows:
unpack threshold (TH) having placed these into three categories:
 'flood', 'land' , 'mount'.
Mixing modules will also be unpacked, these will contain both input and output channel information along with any sequence assignment for computation work (to ensure necessary data is put in place) before sequentially passing to such module for computation.
 Do everything as necessary in preparation as shown below prior to pixel by pixel computation of rgb terrain colorization routine.
In pixel by pixel routines, extract height and normal.
Height data determines which land type modules are used computation wise.
'Land' will use all terrain types computation wise (for threshold feathering between land types).
All threshold computations and any subsequent mixing computations will have data pathed to a ColorInOut, and also trigger a pixel mixer driver configuration through the NodeChains dictionary.  Basically after computation work is done on TM, the CIOM is read which is then key parsed to the Node Chains in constructing Mixing driver instructions.  That is, before formal calls in constructing the sequential chain in computing mixing beyond computed thresholds.
 ColorInOut (CIOM) is basically identified computed work already having been task accomplished as given by its parent module identifier (whether such parent is a 'Threshold' or a 'Mixing' or given from the DirectColorInput).
ColorInOut will be in part used by the Mixing Driver which outside of preliminary threshold module 'basis' work will be the overarching driver for sequentially producing a given terrain pixel output.
The mixing driver is read on a simple loop iterator.  The mixing driver loop iterator traverses the Mixing ID sequence.  The appropriate Mixing (MM) is loaded.  This data is passed to mixing function, repeating the process until the Mixing driver loop is finished.
Mixing (MM) may have variably written per pixel given instructions that is, each driver instruction is not the same for pixel to pixel, if for instance, thresholding dictates that added color mixing schemes
 need exist for a given pixel position. Once pixel computation is complete reinitialize the ColorInOut (CIOM).

So eventually this should hopefully be abstracted well enough to allow for modularity in design as found in Blender's node system so that one can custom design any configuration of all of the above in building colorization generators without having to modify code which isn't exactly that hard if you know how to read it and program it.  

Friday, December 11, 2015

Blender handling animated non linear motion for path follow objects

For starters, as I've seen (pardon my ignorance if I am incorrect), it seems a common way to use path based animated motion for objects in blender is easily handled by using path objects such as bezier and nurbs curve objects.  I've lately used Bezier curves to handle this which are especially nice since in edit mode you can also see any torsion, or twisting, on the curve.  This is shown by the direction arrows along the curves spine.

   I have also been interested in modeling kinematic physical motion of say a camera without invoking blender's physics system in doing so and this has generally lead to some interesting observations.

First, to constrain an object to a given bezier curve object path, you select the child object first, hold shift and select the parent object (lmb click for selection...in this case the bezier object).  Then you hit 'ctrl + p' and select 'path follow'.

You will also want to have the object set at the bezier curves starting position.  You can determine this again in 'edit' mode on the bezier curve if you aren't sure which point on the curve is the start versus the end.  This will be shown with all direction arrow's on the spine of the curve (in 'edit' mode) moving away from such point and obviously being an end point on the curve (assuming your curve is not a closed loop).  If you don't want to reconfigure the curve's start and end points literally and they need be reversed, you can do so in 'edit' mode selecting all the curve's points and then selecting 'curve' > 'segments' > 'reverse direction'  (extremely handy).

The general art of modeling physical motion is given by parabolic type curvature.  These are curves which generally may need no more than 2 points on a given bezier path curve though I have used a third point in provisioning greater ease in managing the control points for a given curve arc.  I have usually situated a third control point nearer the maximum height often for a given quasi parabolic motion path arc.

Now, there are some additional things to be considered which are that alternately if you want to track the camera's frame rotation to another object, you can do so again selecting the camera (child first) and then selecting the object to be tracked.  This will not disrupt the animated motion of the camera on the bezier path, for instance, but will instead ensure that the camera is pitch, roll, yawed in the direction of the tracking object.   Once having selected the child and parent objects, in 'Object' mode, use 'Object' > 'Track' > 'Track to Constraint' .  That will lock the camera, for instance, on another object.  I personally like to use empty objects here (not physically shown) as tracking constraint objects.

Now for many new to the experience of animation, you will have linear motion (linear velocity) over time for a change in the object's position with respect to the path follow object.  You can modify the velocity of the object without effecting its linearity under the Bezier curve data tab.  This is between the bezier curve objects 'Material' (right of) and 'Modifier' (left of) tab (right hand most side of your browser under a default Blender workspace).  Under the Bezier curve data tab scroll down and select 'path animation' which should already be checked with the curve having been parented.  Expand this section, you can modify the velocity of animation of any path follow object by increasing or decreasing the frames settings.  This is the number of frames needed for an object to elapse over the course of the given bezier path object.  Obviously a lesser number of frames increases the object's velocity while increasing the number of frames decreases the path follow object's velocity.

Now, if you were wanting to experiment with non linear motion on such path, well, it is a bit more advanced and leads me to a suggestion (wish list) for Blender's programmers as a possibility.  First, I may suggest as a wish list a parametric subdivision for all given motion states as opposed to motion being determined solely by higher order polys restricted standard single variable equations.  Why so?  Firstly the conversion from single variable equations from any parametric form has a bit of work load.  Secondly physical solutions are often described in 2 dimensions with parametric equations of motion described separately for each dimensions which means the one or two axis will have a linear form (barring air resistance or any other non gravitational forces) while a third axis will have some gravitational form and is given by a non linear quadratic form.  Unfortunately this is not easily resolved in blender since f-curve modifiers are restricted relative to the usual sense of animation using interpolated bezier curve forms.  This leads me to indicate how to implement non linear motion on a follow path constrained bezier curve object.  So if you followed the step above.  You can pull up your 'Animation' workspace setup or alternately you'll want to at least pull up your 'Graph Editor' (e.g. change from '3D view' to 'Graph 'editor' is where the drop down box is located).

Next you'll want to go to 'key' > 'Add F-curve modifier' >  'Generator'.  Now, you'll need to adjust the properties of the generator that you added if you want to make things non linear.  You'll need to expand the 'properties' view area under the graph section to do this.  If you know how to pull up the 'properties' view area under the '3D view'  mode it is exactly the same on the 'Graph editor'.  There is a little plus '+' symbol in the upper right corner of the 'Graph Editor' window that is clicked and dragged to the left for this properties view expansion.  Next, go to the 'Generator' tab and it should read 'Factorized' or 'Expanded' polynomial.  I prefer the expanded form since it is a bit easier in reading and applying coefficient values here.  Curve types and what they mean.  Generally Quadratics while appropriate and correct in describing at least on a given gravitationally bound axis motion is not right when trying to determine motion of the object on a given object constrained path.  The reason for this has to do with what I explained above.  Namely, a single variable equation describes motion on both axis as opposed to motion relative a kinematic (parameterized) form.  If you wanted to determine what this single variable equation would look like first you'd need to convert from the parametric form and then solve (kinematic form would often be given in a time order based variable in either dimension say for a 2 dimensional problem) and then having used a linear or quadratic form based upon whether or not gravity applies in such dimension.  Additionally, the generator equation provided only solves one to one any given position meaning that the same local y solution (height solution)  yields the same local x on the bezier curve.  This is why modeling a maximum height with zero velocity at the height of a given parabolic trajectory means rolling back down the same path as opposed to in a typified kinematic manner (with positive transverse velocity) a different position x in approaching the same y as having been given before.  Blender's animation system is designed around periodicity here or in other words, repeating motions that would include things like a runner's stride having extended to a given maximum length and then having in relation to the runner's body having periodically returned back to a position encountered before (e.g., where the runner's torso center is represented as local x point of origin, his leg's will always repeatedly cross such as local zero in such moving coordinate system).  How then do you ensure that an object continues a long a given path even after it approaches zero velocity with the generator equation found?  Technically you'll need to use at least cubic or higher order equations (which are poly order: 3 and greater).   Polynomials that are odd will have inflection points that are necessary (by odd I mean poly order: 3, 5, 7, 9... and so forth).  The key to reduce the rapidity of growth of a given cubic or higher order polynomial is to keep the higher degree terms (x^3, x^5, and so forth) powers with smaller coefficient factors while keeping the lower degree (x, and x^2) coefficient terms higher.  Thus, typically I've set my coefficients as follows (5.120 for x, -.120 for x^2, and .001 for the x^3 term).  This tends to lead to a flattening of the growth with decent initial growth in the beginning and a small amount of growth in the object's movement near the tail end of a given 60+ frame curve elapse.   The x term will tend to flatten a curve with increasing positive value while raising the negative value (with increasing negative values) on the x^2 coefficient term tends to increase the height of the inflection point and move it further in the positive x axis direction (that is increasing the time to hit a given maximum velocity).  For my work, I have left the cubic term (x^3) alone at its given value (it needs to have a small amount at least in providing the inflection point on the curve) but obviously small enough so as to make acceleration much to rapid to prove useful for animation purposes especially in physics.

If you try any math handling between kinematic and single variable equations you'll need to consider in the conversion process (inverting the parametric value of y) to avoid the periodicity problem in blender's math system here.  It interprets +y values as positive local transverse (local x) gains while keeping the object still uniquely path constrained even if such position is parametrically outside the boundaries of the bezier curve object.  This is Blender's math interpretive way of differentiating a given y for two possible local x coordinate positions on a non one to one function bezier function.
Or basically in the conversion process, you'll need to invert the parabola at the maximum height for a given parameteric to single variable equation conversion.    

Oblivion

 Between the fascination of an upcoming pandemic ridden college football season, Taylor Swift, and Kim Kardashian, wildfires, crazier weathe...