Looking for help writing an algorithm to interpret contour map data changes

chart

New member
Joined
Jun 25, 2013
Messages
4
Hello all, I'm looking for some expert advice to create a computational algorithm that will tell me the best way to "treat" a super flat floor. First some background: I am a concrete floor grinder and polisher. There exist today large grinding machines that can run over a concrete floor and grind and polish to a high degree of luster and shine. My current project however is grinding a concrete floor to a very high tolerance of flatness. I am American but live and run my business in France. I've been contracted by a French nuclear research facility to offer an alternative to their precision marble floors. The scientists here use very heavy neutron capture tools that need to be moved by hand. They acheive this by putting their machines on metal disks that emit a stream of presurized air underneath which creates enough force to lift the device a few tenths of a millimeter off the floor. They can then push the object into the new desired position, cut the air and it re-sits on the floor. These devices being moved often weigh several tons. A constraint of this system is that the floor must be incredibly flat, or the floating metal disks will catch on the slightest disparities in the floor. So I have taken on the challenge of grinding this floor to a flatness of 1/10th of a millimeter over ten centimeters, over a surface area about 30 m² (275 sq ft). I am able to scan the surface of the concrete floor with an incredibly precise laser scanner. This gives me a cloud of data points, x,y,z. I then input this data into OriginPro and create a contour map, just like the maps cartographers and geologists use. This map gives me a visual of all the high and low spots, as well as the contours and rate of change over distances of the floor. I would now like to take this data one step further and interpret it in the constraints of the flatness required so that I can generate a second contour map that will indicate to me where I need to concentrate my grinding in order to fall within the tolerance of 1/10 mm over 10 cm for the entire surface, and what would be the most efficient and fastest way to treat the floor to fall within these specs. If you or anyone you know has the mathematical capability to write such an algorithm and would be interested in learning more about the project (to my knowledge this has never been done on an open space) please don't hesitate to contact me and I will provide more detailed info. Thanks so much for taking the time to read through my post. Hope to hear from you soon! :)
 
Hello all, I'm looking for some expert advice to create a computational algorithm that will tell me the best way to "treat" a super flat floor. First some background: I am a concrete floor grinder and polisher. There exist today large grinding machines that can run over a concrete floor and grind and polish to a high degree of luster and shine. My current project however is grinding a concrete floor to a very high tolerance of flatness. I am American but live and run my business in France. I've been contracted by a French nuclear research facility to offer an alternative to their precision marble floors. The scientists here use very heavy neutron capture tools that need to be moved by hand. They acheive this by putting their machines on metal disks that emit a stream of presurized air underneath which creates enough force to lift the device a few tenths of a millimeter off the floor. They can then push the object into the new desired position, cut the air and it re-sits on the floor. These devices being moved often weigh several tons. A constraint of this system is that the floor must be incredibly flat, or the floating metal disks will catch on the slightest disparities in the floor. So I have taken on the challenge of grinding this floor to a flatness of 1/10th of a millimeter over ten centimeters, over a surface area about 30 m² (275 sq ft). I am able to scan the surface of the concrete floor with an incredibly precise laser scanner. This gives me a cloud of data points, x,y,z. I then input this data into OriginPro and create a contour map, just like the maps cartographers and geologists use. This map gives me a visual of all the high and low spots, as well as the contours and rate of change over distances of the floor. I would now like to take this data one step further and interpret it in the constraints of the flatness required so that I can generate a second contour map that will indicate to me where I need to concentrate my grinding in order to fall within the tolerance of 1/10 mm over 10 cm for the entire surface, and what would be the most efficient and fastest way to treat the floor to fall within these specs. If you or anyone you know has the mathematical capability to write such an algorithm and would be interested in learning more about the project (to my knowledge this has never been done on an open space) please don't hesitate to contact me and I will provide more detailed info. Thanks so much for taking the time to read through my post. Hope to hear from you soon! :)
Sounds like the ILL in Grenoble - a wonderful place to do neutron scattering. I don't have any "concrete" ideas, but will muse about the problem. Do you have access to the computer guys at the lab? They tend to be pretty sharp.

I gather you don't have a way to fill in valleys - you can only grind down peaks? In that case you will generally be lowering the level.

I see that you have gradient data (that is, change over distance). There is an analogy in meteorology: contour lines of atmospheric pressure, and wind velocities representing the gradient of pressure. Your specification requires that the magnitude of the gradient may not exceed 0.001. If you pick a low point and draw a 10-cm radius circle around it, you can find the direction of the maximum gradient. The gradient is a vector field, with direction at any point perpendicular to the level contour at that point. Follow the gradient direction, and as long as the magnitude is greater than 0.001, grind it down. If you repeat that procedure at every valley point it should eliminate large POSITIVE gradients. To attack NEGATIVE gradients you could do something similar starting at peaks .. but when you find the gradient exceeds -0.001 you grind off where you came from instead of where you are.

Run the operation in the computer first, recomputing the revised contour map as you go. When the revised gradient map meets specs, hit the floor.

Enjoy!
 
Thanks Doc! I'm at the CEA in Saclay, just outside of Paris, though no time for sightseeing :( The folks here are pretty sharp and helpful as well, only for several reasons I want to figure this out on my own. I'm officially an outside contractor and this is not a partnership, so it's important that I maintain a certain amount of independence. I could potentially develop a speciality in this area and there is as well future work with this and other similar organizations. So the data management and manipulation is critical for the future and why I'm going to invest the time in an effective system that I can reproduce on each project.

The meteorology analogy you give is very interesting, though I'm not clear on how to find the "direction" of gradients. My gradient data is visual, just a contour map (see attachment). Other than that I have an excel-type file of data, between the two I'm a bit lost.
If you pick a low point and draw a 10-cm radius circle around it, you can find the direction of the maximum gradient.
Ok, I can print the contour map and draw directly on it, but I don't think the Origin software I used to create the map itself will allow this kind of manipulation.
The gradient is a vector field, with direction at any point perpendicular to the level contour at that point.
The contours are curves... I can visually see the change, as well as the direction (up or down) only the point of attack is still not clear to me. Your suggestion is very interesting, only I'm still not understanding the process of determining the best "route" of attack. Can you clarify a little bit more using the image I've included?

There should also be a way to algorithmically analyze all the points, starting with the first and comparing it to the points around it, generating an "efficiency quotient" then moving on to the second point and repeating the process. At the end, the point with the best efficiency could be chosen and the changes necessary (based on the parameter of 1/10th each 10cm) from point to point working outwards could be calculated and re-represented as a contour map. This would then tell me where and how much to grind down across the entire surface... But I'm speculating with this logic and need time to investigate the math required. The last algorithms I did were easily 25 years ago :)
 

Attachments

  • Graph_10-06-13_email.jpg
    Graph_10-06-13_email.jpg
    90.8 KB · Views: 3
Quick question(s) - which way is "up" .. blue or red? And what is the contour interval? (not enough resolution to read the contour values) Are the horizontal and vertical units mm?

Could you send a blowup of a region around x=2500, y=0 ?

The ridge (or is it a valley?) along y=2000 for x from 500 to 4500 also looks interesting.

[I have visited Saclay, but never did an experiment there.]
 
Hi Doc, Reds are highs, blues are lows. Here is a detail:
http://www.bip-betonpoli.com/images.html
of the left section of the platform. This is the latest scan of the floor. (With a color scale this time! :) Every contour line represents 1/10th of a mm. Everything metric. The "ridge" or rather plateau along y=2000, x from 500 to 4500 is an effect of one of my grinding machines that is specially made for treating borders. It is 30 cm in diameter.

At Saclay did you stay at the 'Maison des Physiciens'?
 
Last edited:
Hi Doc, Reds are highs, blues are lows. Here is a detail:
http://www.bip-betonpoli.com/images.html
of the left section of the platform. This is the latest scan of the floor. (With a color scale this time! :) Every contour line represents 1/10th of a mm. Everything metric. The "ridge" or rather plateau along y=2000, x from 500 to 4500 is an effect of one of my grinding machines that is specially made for treating borders. It is 30 cm in diameter.

At Saclay did you stay at the 'Maison des Physiciens'?
First visit was a meeting, and I don't remember where tyhey put us up. Second time stayed with a friend in a villiage near Versailles.

Image2.jpg
Before you can write a computer algorithm, you have to figure out how do do it by hand. Your eye is probably your best tool for deciding what to do!

I drew some gradient lines down at the bottom of this plot. The scale of the file you sent is about 3.56 mm/pixel, so if contour lines (@ 0.1 mm) are closer together than 28 pixels (100 mm) you are out of spec. The worst is line C, which crosses 8 contours in 130 mm, for a gradient of about 0.006. Note that A, B, C, and E all reach their maxima at a ridge at y~28mm. Is that also a feature of your edge grinder? That ridge needs to be ground down by a mm, with depth of grind tapering down to zero ar the blue sinkhole.

I also drew a freehand gradient line (H) from the local minimum at (1085,464) to the local maximum at (1700,1570). This is supposed to be a line of steepest ascent, estimated by trying to cross all contours at right angles. [There must be algorithms for that!] The gradient along this line is 0.002 near the beginning. The rim of that "hole" has to be tapered outward more, especially on the right side. There are lots of patterns in the plot, if you look for them. Good luck!
 

Attachments

  • Image1.jpg
    Image1.jpg
    106.2 KB · Views: 2
Patterns

Indeed I can see the patterns. What I've been doing so far is just working down the high spots. This is relatively easy. But in my need to correct a low spot I drew a line on the floor and marked off each ten centimeters. I then ground down each zone along the line until I fell within spec. But this was only along one line. I feather out a bit but this leads to the concern as to whether perhaps I'm making things worse as I spread out.

So my idea is rather to calculate the changes in the points needed. This seems to be a rather simple calculation, however it gets more complicated as the need to re-calculate is introduced in order to find the most efficient way of changing the surface.

My difficulty remains treatment of the surface. I can treat the high areas more
easily, but low areas are quite tricky. How far out do you go? Where can you stop?
Are you making an area worse than it was?

What I want to do is re-calculate the contour map based on the changes that will
need to take place based on the parameters chosen.

So attached is a contour map of part of the surface with two détails that illustrate
my problematic. The left detail shows a graph in red with the "reality" of the
surface on the left-hand side and a corrective within the parameters of 1/10th mm
each 10 cm on the right.
Detail_01.jpgDetail_02.jpgDetail_03.jpg
The second detail to the right is the same contour map with the original data points (the black dots)
represented. The data points are always taken in a random pattern, so my
algorithm must be independent of precise intervals. It must know which point is closest,
which point is second closest, etc. Then it must calculate the Z difference between
the two points. If the Z difference is more than 1/10th mm and the X/Y distance is
more than 10cm then the corrective needs to be entered into a new column. The data points are collected in a classic excel format:

Data-example.jpg

But it gets more complicated, and this is where I'm seeking "Professional" help.

How can we run this algorithm so that it finds the most efficient correctives? If we
start from the lowest point, we subsequently go out in two directions, X and Y. If
we run up against a point equal or within the parameters, where do we go? And if we
make a change, how will that effect the subsequent surrounding points...

I've started some IF/THEN statements to help me understand my own needs better. Otherwise, I'm not sure of my next step as it
involves some math that is beyond my experience.

Any suggestions? Thanks so much!
 
Last edited:
Top