Finding the Closest Point to the Centre of a Rotating Vector Field

fluid dynamicsVector Fields

I am working on the analysis of a data set that resulted from a simulation of a Tornado. I need to be able to transform the vectors for the velocities at each measured point in the space from Cartesian to Polar coordinates. That requires me to be able to located the centre of the tornado at each time step to be able to locate my origin in the Polar coordinates.

I have ran into issues where the centre is not clearly defined by obvious things such as the highest velocities (being the tornado wall) having close proximity to the lowest velocity (the eye of the tornado) as this simulation is not a simple one, it attempts to be very true to real life including other funnel formations off to the side. This meant that simply searching for a point where the vectors have no velocity or even point in a circular pattern resulted in logical errors where my centre would be way off from where I can see it should be.

The vector field, the red dot representing where my current code located the eye to be

The gradient of the same vector field shown as vector arrows

I have looked around on here but haven't been able to find much, the closest thing I could find was a topic that did get a reply but I don't really know how to apply it to my data set as I have velocity in the x and velocity in the y directions for each x and y position on my plane (only looking at one plane of height at a time) for 110 x 190 points. So to find the dot product of this to find a direction I think wouldn't work on it's own. An idea I had was to use the gradients to find a "well" in the velocities, but actually implementing a search for this has proven quite difficult. Any suggestions on how to do this no matter the size of the eye and other smaller formations that mimic but are not a centre would be greatly appreciated.

Best Answer

Disclaimer: I know nothing about tornadoes, and my notions of fluid dynamics are very ancient.

So I'll approach your problem as one of finding the most likely center(s) of "circles" in the vector field. Pretty ad hoc, but why not? Not necessarily computationally efficient, but one possibility would be to do something akin to the circle Hough transform.

The main idea is to map your vector field to a "circle parameter" space (that is, all center positions in the plan $\times$ radii of circles). That space is a 3D grid in practice (2 dimensions, for the center of the circles, are exactly the same grid as the positions for your vector field, and one dimension is for the radius). If you only care to find the center of rotation of the field, the parameter space might only need to be a 2D grid (the potential candidate for the center of rotation).

And so you go over each $(x, v_x)$ pair of position $\times$ velocity, and add +1 to all parameters of circles that (to good accuracy) fit that position and velocity. That is, all the circles that go (approximately) through $x$ and are tangent to $v_x$. In other words, you end up building a giant histogram keyed by circle parameters, and the peaks in that histogram/parameter space correspond to the most likely centers of rotation. Anyway, that's just how I'd go about it. Not necessarily based on first principles, but I'd bet this solution, or a variation of it, would be pretty robust to noise.

Related Question