Representative sample set from an AFR run. Note AFR's levels are low because the car is running E85 (9.76). 98 would be typically somewhere below 14.7
This run was lean for most of the map but it is a good representation of the type of data set one might get from a logging run, including missing data points and areas of operation the car never gets into. Of specific interest to me is plotting on a 3D chart the relationship of the data points using chart based on this article.
https://www.codeproject.com/Articles/5293980/Editor3D-A-Windows-Forms-Render-Control-with-inter
Logging was done with Innovate MotorSport LM2 Wideband O2 with the csv derived from the logworks software available for thier product. I will make no comment on the Innovate Motorsport LM2 product other than it has one redeeming feature, very fast AFR update rates. Image of the data set from their software.
csv file is raw data from the logger.
afrs.dat is just the average AFR values in an X/Y array.
rpm_map_afr.dat are all the specs derived from the origional csv data set.
D32 file is the origional Innovate MotorSport logging file extracted from the SD card.
What I'm hoping for with the software is a partial 3D rendition of the above 2D array of data. This data set is incomplete purely as a function of the way a car might operate. While it is vehicle specific, there are many examples in the real world where there would be incomplete data sets one might want to be able to get a feel for in the third dimension. Physics experiments, tomography, point clouds etc etc.
The problem with the first image is the "zero" data points and the polygon surface corresponding to the surrounding "real" data point distorts the polygon surface "trend for want of a better word" visually. The second image is the same data set, with the 0 data points changed to an average of the array, array drawn, then the original 0 data points (now an average) deleted. Note still not valid but intuitively feels closer.
Currently the above 2D data array looks like below.
Below is closer to what I hope for. Still not right but closer.
Note the following arrays show the data points and the coloured corrpesonding polygon surface relating to the surrounding data points.
![](https://private-user-images.githubusercontent.com/5317221/303949608-de0da9ac-b4ac-4a87-b810-eef6e38c803b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4NjA3NzMsIm5iZiI6MTcyMzg2MDQ3MywicGF0aCI6Ii81MzE3MjIxLzMwMzk0OTYwOC1kZTBkYTlhYy1iNGFjLTRhODctYjgxMC1lZWY2ZTM4YzgwM2IucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDgxNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA4MTdUMDIwNzUzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZDk1NjI5YWU2MmVhNzkwYjJlNzJkNGY3OWMzMTZiM2RhMDczYTMxMGFmOGNlYzg3MjRkYTY5NTM3NWQ3YzIxZSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.3derBOh2aJlSG3azgHxUWQDlFVnVJUFGDf70X0JtPTQ)
Above data set corresponds visually to a flat surface set of polygons. Makes sense.
![](https://private-user-images.githubusercontent.com/5317221/303949322-6691ee5b-a5ad-4b7c-87bd-562798f8b943.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4NjA3NzMsIm5iZiI6MTcyMzg2MDQ3MywicGF0aCI6Ii81MzE3MjIxLzMwMzk0OTMyMi02NjkxZWU1Yi1hNWFkLTRiN2MtODdiZC01NjI3OThmOGI5NDMucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDgxNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA4MTdUMDIwNzUzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9OWIyOTM4YzM2N2JkMDQ4MThjNjk1MWY4ZTNlZjc5ZmUzNGMxZTEzMDA3MDdjMGYxN2UxNjg5YzAxZDNiZWU3YyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.wDM4MAEJZ-caQMCl30YuO38vPVUld745ZGr0XBOp75E)
![](https://private-user-images.githubusercontent.com/5317221/303949691-82568331-c576-40ce-ba6b-c981375a0151.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4NjA3NzMsIm5iZiI6MTcyMzg2MDQ3MywicGF0aCI6Ii81MzE3MjIxLzMwMzk0OTY5MS04MjU2ODMzMS1jNTc2LTQwY2UtYmE2Yi1jOTgxMzc1YTAxNTEucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDgxNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA4MTdUMDIwNzUzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NTUzOTRkNGY5MzQ2N2YzNmZlNGFkM2U2OTMzOGVjNmVjYzM0MDlmODNiYjdmN2U5ZDkxMjI3MWE1OTJiNWZkNiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.K0Tw3B1ewF3Tv3QBo8qCdHB7Yp8UGiOWS0NZLZTuTy4)
We lose one data point at the edge of an array, corresponds to two polygon surfaces being altered.
![](https://private-user-images.githubusercontent.com/5317221/303949360-294f9534-ee95-42e8-a143-b736a27077f2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4NjA3NzMsIm5iZiI6MTcyMzg2MDQ3MywicGF0aCI6Ii81MzE3MjIxLzMwMzk0OTM2MC0yOTRmOTUzNC1lZTk1LTQyZTgtYTE0My1iNzM2YTI3MDc3ZjIucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDgxNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA4MTdUMDIwNzUzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Zjc0MjdiNmNlNWE0MTBmNDNjYTJmNWU0NzIwNDIxN2Y5NGI3NzY4OTUxZDlkYTg3OGMzNTk4NWQ2YTgxOGJjYiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.YBRzQCmxUfqAs4pJLOi0NI_hL3Iv_1b_kPT69rN4YiM)
![](https://private-user-images.githubusercontent.com/5317221/303950748-86e5cbf0-aa8f-44f5-841b-c52c0eb62d54.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4NjA3NzMsIm5iZiI6MTcyMzg2MDQ3MywicGF0aCI6Ii81MzE3MjIxLzMwMzk1MDc0OC04NmU1Y2JmMC1hYThmLTQ0ZjUtODQxYi1jNTJjMGViNjJkNTQucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDgxNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA4MTdUMDIwNzUzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9N2Q3MzJkYjVmNmU2M2I1MWVjNGIwNTVkNjRiNTQ2MGVkZmFlZTBiMjIwMjM2ZmViOWEzNzcyYTBlMDQ2ZDJlZSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.3ml_8dyTC14qDHBe848Tx9S_EGdcnRXEWmttd3ofyG8)
Still only the loss of one data point but in the middle of the array, we loose detail on four polygon surfaces.
![](https://private-user-images.githubusercontent.com/5317221/303949387-821e3a40-b8fd-4314-9712-ab68d72b24c6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4NjA3NzMsIm5iZiI6MTcyMzg2MDQ3MywicGF0aCI6Ii81MzE3MjIxLzMwMzk0OTM4Ny04MjFlM2E0MC1iOGZkLTQzMTQtOTcxMi1hYjY4ZDcyYjI0YzYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDgxNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA4MTdUMDIwNzUzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NTkzMzA2ZDFjMzM0ZDUxZTEyYzY1MjRkNTcwYWE0ZDgyNWE3MGVlYmRmNTI2ZjkxOGVmMDhjZGJmNzU0MDBhMyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.pO4J7-IWG37pEMgzd4T-79QqIKaYDZH_vQVVSFGgdcs)
![](https://private-user-images.githubusercontent.com/5317221/303950770-527d93e5-2352-4440-bd2c-9902d50d6966.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4NjA3NzMsIm5iZiI6MTcyMzg2MDQ3MywicGF0aCI6Ii81MzE3MjIxLzMwMzk1MDc3MC01MjdkOTNlNS0yMzUyLTQ0NDAtYmQyYy05OTAyZDUwZDY5NjYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDgxNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA4MTdUMDIwNzUzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NDM2N2FjYTgxNWI3MjllNmY5Yzk2MzA1NjE5M2NkMWU3ZjMyMjliZDU4ODYyNjUxMzZjZDE4Yjg1ZGFjZTRlNSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.BuID7rvm6OBY3G87mFuR23Kql5xgnLv8hfTKouluB60)
With the loss of two data points we lose surface polygon detail from 8 squares.
![](https://private-user-images.githubusercontent.com/5317221/303949419-80394bdd-5fbd-4a35-80f2-e79afd67b690.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4NjA3NzMsIm5iZiI6MTcyMzg2MDQ3MywicGF0aCI6Ii81MzE3MjIxLzMwMzk0OTQxOS04MDM5NGJkZC01ZmJkLTRhMzUtODBmMi1lNzlhZmQ2N2I2OTAucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDgxNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA4MTdUMDIwNzUzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MzBmNGQ2YjA1M2NiMDY4NzEwNDgxMjcwOWIwNWY0OGY5ZDk2OGM3YjZjODY0MjFjMTdjMmI1MTc1MGQzOWIxZSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.y32GrysTepCBRlErpPOZboEKMCnRRVa4J-PPcoO0kHA)
While the charting software can only but run with the data presented to it, as far as it’s concerned a zero value being just as valid a data point as any other value. Understand the fact that each polygon is defined by the four surrounding data points, and my question was based around how to get around the visual problem if one of them was zero, in the case of the sample set, missing.
Simple enough to delete all the zero points but one also looses a lot of the surface polygon visual information from points that are valid (as shown above), especially when that data set might have a lot of edge cases and one-off isolated data points that are missing as detailed above.
Full data set then the chart is perfect. Partial data set and quite a bit of visual content is lost if deleted, or at best visually distorting the real data points that surround an unwanted data point to up to 4 polygon surfaces per missing data point.
My question was to ask for thoughts on the topic. Which was answered to my satisfaction in so far as the four data points being needed to define that polygon therefore deleting or modifying that data point wasn’t a solution if polygon surfaces were part of the picture.
The problem isn’t with the software, more that the current approach with the software, if missing data points needed to be catered for; isn’t a solution.
A possible solution to this scenario might be each XY "point" is defined by four points to define a polygon surface with an additional Z axis parameter that would be the plotted polygon magnitude. The surrounding four points woudl be loosely tied to the Z axis paramter. That way the Z axis point could be deleted with no impact on the adjoining Z axis points as each Z axis point has its own set of four points defineing its own polygon. Additionally those four points could feasbily be modified to matching adjoinging polygons improving surface visual integrity. There would be no loss of detail simply because one point was missing.