Python - поверхность построения вокруг облака 3D-графика

Я запускаю вычислительное гидродинамическое моделирование и хочу уточнить сетку в областях, для которых величина превышает пороговое значение. Мне удается извлечь местоположения точек, поэтому я получаю список точек, описывающих области, которые соответствуют моим критериям для уточнения.

Чтобы уточнить мою сетку, мне нужно предоставить программе внешние границы поверхности (или кривой, если мы работаем в 2D), которая описывается облаком точек. В частности, мне нужно удалить все точки, которые находятся в центре области, чтобы получить координаты тех, которые находятся на границе. Затем я хотел бы окружить точки кривой.

Я нашел похожий пост на форуме, но вопрос заключался в интерполяции облака точек, так что это не совсем то, что я хочу: Подгонка кривой-сплайна к 3D-облаку точек

Можете ли вы помочь мне сделать это?

Вот 2D-пример облака точек, для которого я хотел бы сохранить только граничные точки и построить окружающую кривую:

0.20215,0.29703,0
0.22857,0.29703,0
0.25526,0.29703,0
0.28221,0.29703,0
0.30943,0.29703,0
0.33692,0.29703,0
0.36469,0.29703,0
0.39273,0.29703,0
0.42106,0.29703,0
0.44966,0.29703,0
0.47856,0.29703,0
0.50774,0.29703,0
0.53722,0.29703,0
0.56699,0.29703,0
0.59706,0.29703,0
0.62742,0.29703,0
0.6581,0.29703,0
0.68907,0.29703,0
0.72036,0.29703,0
0.75196,0.29703,0
0.78388,0.29703,0
0.81612,0.29703,0
0.84868,0.29703,0
0.88156,0.29703,0
0.91478,0.29703,0
0.94832,0.29703,0
0.9822,0.29703,0
1.0164,0.29703,0
1.051,0.29703,0
1.0859,0.29703,0
1.1211,0.29703,0
1.1568,0.29703,0
1.1927,0.29703,0
1.229,0.29703,0
1.2657,0.29703,0
1.3028,0.29703,0
1.3402,0.29703,0
1.378,0.29703,0
1.4162,0.29703,0
1.4548,0.29703,0
1.4937,0.29703,0
1.533,0.29703,0
1.5728,0.29703,0
1.6129,0.29703,0
1.6534,0.29703,0
1.6944,0.29703,0
1.7357,0.29703,0
1.7774,0.29703,0
1.8196,0.29703,0
1.8622,0.29703,0
1.9052,0.29703,0
1.9487,0.29703,0
1.9926,0.29703,0
2.0369,0.29703,0
2.0817,0.29703,0
2.1269,0.29703,0
2.1725,0.29703,0
2.2187,0.29703,0
2.2652,0.29703,0
2.3123,0.29703,0
2.3598,0.29703,0
2.4078,0.29703,0
2.4563,0.29703,0
2.5053,0.29703,0
2.5547,0.29703,0
2.6046,0.29703,0
2.6551,0.29703,0
2.706,0.29703,0
2.7575,0.29703,0
2.8095,0.29703,0
2.862,0.29703,0
2.915,0.29703,0
2.9685,0.29703,0
3.0226,0.29703,0
3.0772,0.29703,0
3.1324,0.29703,0
3.1881,0.29703,0
3.2444,0.29703,0
3.3013,0.29703,0
3.3587,0.29703,0
3.4166,0.29703,0
3.4752,0.29703,0
3.5344,0.29703,0
3.5941,0.29703,0
3.6544,0.29703,0
3.7154,0.29703,0
3.7769,0.29703,0
3.8391,0.29703,0
3.9019,0.29703,0
3.9653,0.29703,0
4.0294,0.29703,0
4.094,0.29703,0
4.1594,0.29703,0
4.2254,0.29703,0
4.292,0.29703,0
4.3593,0.29703,0
4.4273,0.29703,0
4.496,0.29703,0
4.5654,0.29703,0
4.6354,0.29703,0
4.7062,0.29703,0
4.7776,0.29703,0
4.8498,0.29703,0
4.9227,0.29703,0
0.28221,0.28425,0
0.30943,0.28425,0
0.33692,0.28425,0
0.36469,0.28425,0
0.39273,0.28425,0
0.42106,0.28425,0
0.44966,0.28425,0
0.47856,0.28425,0
0.50774,0.28425,0
0.53722,0.28425,0
0.56699,0.28425,0
0.59706,0.28425,0
0.62742,0.28425,0
0.6581,0.28425,0
0.68907,0.28425,0
0.72036,0.28425,0
0.75196,0.28425,0
0.78388,0.28425,0
0.81612,0.28425,0
0.84868,0.28425,0
0.88156,0.28425,0
0.91478,0.28425,0
0.94832,0.28425,0
0.9822,0.28425,0
1.0164,0.28425,0
1.051,0.28425,0
1.0859,0.28425,0
1.1211,0.28425,0
1.1568,0.28425,0
1.1927,0.28425,0
1.229,0.28425,0
1.2657,0.28425,0
1.3028,0.28425,0
1.3402,0.28425,0
1.378,0.28425,0
1.4162,0.28425,0
1.4548,0.28425,0
1.4937,0.28425,0
1.533,0.28425,0
1.5728,0.28425,0
1.6129,0.28425,0
1.6534,0.28425,0
1.6944,0.28425,0
1.7357,0.28425,0
1.7774,0.28425,0
1.8196,0.28425,0
1.8622,0.28425,0
1.9052,0.28425,0
1.9487,0.28425,0
1.9926,0.28425,0
2.0369,0.28425,0
2.0817,0.28425,0
2.1269,0.28425,0
2.1725,0.28425,0
2.2187,0.28425,0
2.2652,0.28425,0
2.3123,0.28425,0
2.3598,0.28425,0
2.4078,0.28425,0
2.4563,0.28425,0
2.5053,0.28425,0
2.5547,0.28425,0
2.6046,0.28425,0
2.6551,0.28425,0
2.706,0.28425,0
2.7575,0.28425,0
2.8095,0.28425,0
2.862,0.28425,0
2.915,0.28425,0
2.9685,0.28425,0
3.0226,0.28425,0
3.0772,0.28425,0
3.1324,0.28425,0
3.1881,0.28425,0
3.2444,0.28425,0
3.3013,0.28425,0
3.3587,0.28425,0
3.4166,0.28425,0
3.4752,0.28425,0
3.5344,0.28425,0
3.5941,0.28425,0
3.6544,0.28425,0
3.7154,0.28425,0
3.7769,0.28425,0
3.8391,0.28425,0
3.9019,0.28425,0
3.9653,0.28425,0
4.0294,0.28425,0
4.094,0.28425,0
4.1594,0.28425,0
4.2254,0.28425,0
4.292,0.28425,0
4.3593,0.28425,0
4.4273,0.28425,0
4.496,0.28425,0
4.5654,0.28425,0
0.39273,0.27117,0
0.42106,0.27117,0
0.44966,0.27117,0
0.47856,0.27117,0
0.50774,0.27117,0
0.53722,0.27117,0
0.56699,0.27117,0
0.59706,0.27117,0
0.62742,0.27117,0
0.6581,0.27117,0
0.68907,0.27117,0
0.72036,0.27117,0
0.75196,0.27117,0
0.78388,0.27117,0
0.81612,0.27117,0
0.84868,0.27117,0
0.88156,0.27117,0
0.91478,0.27117,0
0.94832,0.27117,0
0.9822,0.27117,0
1.0164,0.27117,0
1.051,0.27117,0
1.0859,0.27117,0
1.1211,0.27117,0
1.1568,0.27117,0
1.1927,0.27117,0
1.229,0.27117,0
1.2657,0.27117,0
1.3028,0.27117,0
1.3402,0.27117,0
1.378,0.27117,0
1.4162,0.27117,0
1.4548,0.27117,0
1.4937,0.27117,0
1.533,0.27117,0
1.5728,0.27117,0
1.6129,0.27117,0
1.6534,0.27117,0
1.6944,0.27117,0
1.7357,0.27117,0
1.7774,0.27117,0
1.8196,0.27117,0
1.8622,0.27117,0
1.9052,0.27117,0
1.9487,0.27117,0
1.9926,0.27117,0
2.0369,0.27117,0
2.0817,0.27117,0
2.1269,0.27117,0
2.1725,0.27117,0
2.2187,0.27117,0
2.2652,0.27117,0
2.3123,0.27117,0
2.3598,0.27117,0
2.4078,0.27117,0
2.4563,0.27117,0
2.5053,0.27117,0
2.5547,0.27117,0
2.6046,0.27117,0
2.6551,0.27117,0
2.706,0.27117,0
2.7575,0.27117,0
2.8095,0.27117,0
2.862,0.27117,0
2.915,0.27117,0
2.9685,0.27117,0
3.0226,0.27117,0
3.0772,0.27117,0
3.1324,0.27117,0
3.1881,0.27117,0
3.2444,0.27117,0
3.3013,0.27117,0
3.3587,0.27117,0
3.4166,0.27117,0
3.4752,0.27117,0
3.5344,0.27117,0
3.5941,0.27117,0
3.6544,0.27117,0
3.7154,0.27117,0
3.7769,0.27117,0
3.8391,0.27117,0
3.9019,0.27117,0
3.9653,0.27117,0
4.0294,0.27117,0
4.094,0.27117,0
4.1594,0.27117,0
0.47856,0.25781,0
0.50774,0.25781,0
0.53722,0.25781,0
0.56699,0.25781,0
0.59706,0.25781,0
0.62742,0.25781,0
0.6581,0.25781,0
0.68907,0.25781,0
0.72036,0.25781,0
0.75196,0.25781,0
0.78388,0.25781,0
0.81612,0.25781,0
0.84868,0.25781,0
0.88156,0.25781,0
0.91478,0.25781,0
0.94832,0.25781,0
0.9822,0.25781,0
1.0164,0.25781,0
1.051,0.25781,0
1.0859,0.25781,0
1.1211,0.25781,0
1.1568,0.25781,0
1.1927,0.25781,0
1.229,0.25781,0
1.2657,0.25781,0
1.3028,0.25781,0
1.3402,0.25781,0
1.378,0.25781,0
1.4162,0.25781,0
1.4548,0.25781,0
1.4937,0.25781,0
1.533,0.25781,0
1.5728,0.25781,0
1.6129,0.25781,0
1.6534,0.25781,0
1.6944,0.25781,0
1.7357,0.25781,0
1.7774,0.25781,0
1.8196,0.25781,0
1.8622,0.25781,0
1.9052,0.25781,0
1.9487,0.25781,0
1.9926,0.25781,0
2.0369,0.25781,0
2.0817,0.25781,0
2.1269,0.25781,0
2.1725,0.25781,0
2.2187,0.25781,0
2.2652,0.25781,0
2.3123,0.25781,0
2.3598,0.25781,0
2.4078,0.25781,0
2.4563,0.25781,0
2.5053,0.25781,0
2.5547,0.25781,0
2.6046,0.25781,0
2.6551,0.25781,0
2.706,0.25781,0
2.7575,0.25781,0
2.8095,0.25781,0
2.862,0.25781,0
2.915,0.25781,0
2.9685,0.25781,0
3.0226,0.25781,0
3.0772,0.25781,0
3.1324,0.25781,0
3.1881,0.25781,0
3.2444,0.25781,0
3.3013,0.25781,0
3.3587,0.25781,0
3.4166,0.25781,0
3.4752,0.25781,0
3.5344,0.25781,0
3.5941,0.25781,0
3.6544,0.25781,0
3.7154,0.25781,0
3.7769,0.25781,0
3.8391,0.25781,0
0.53722,0.24422,0
0.56699,0.24422,0
0.59706,0.24422,0
0.62742,0.24422,0
0.6581,0.24422,0
0.68907,0.24422,0
0.72036,0.24422,0
0.75196,0.24422,0
0.78388,0.24422,0
0.81612,0.24422,0
0.84868,0.24422,0
0.88156,0.24422,0
0.91478,0.24422,0
0.94832,0.24422,0
0.9822,0.24422,0
1.0164,0.24422,0
1.051,0.24422,0
1.0859,0.24422,0
1.1211,0.24422,0
1.1568,0.24422,0
1.1927,0.24422,0
1.229,0.24422,0
1.2657,0.24422,0
1.3028,0.24422,0
1.3402,0.24422,0
1.378,0.24422,0
1.4162,0.24422,0
1.4548,0.24422,0
1.4937,0.24422,0
1.533,0.24422,0
1.5728,0.24422,0
1.6129,0.24422,0
1.6534,0.24422,0
1.6944,0.24422,0
1.7357,0.24422,0
1.7774,0.24422,0
1.8196,0.24422,0
1.8622,0.24422,0
1.9052,0.24422,0
1.9487,0.24422,0
1.9926,0.24422,0
2.0369,0.24422,0
2.0817,0.24422,0
2.1269,0.24422,0
2.1725,0.24422,0
2.2187,0.24422,0
2.2652,0.24422,0
2.3123,0.24422,0
2.3598,0.24422,0
2.4078,0.24422,0
2.4563,0.24422,0
2.5053,0.24422,0
2.5547,0.24422,0
2.6046,0.24422,0
2.6551,0.24422,0
2.706,0.24422,0
2.7575,0.24422,0
2.8095,0.24422,0
2.862,0.24422,0
2.915,0.24422,0
2.9685,0.24422,0
3.0226,0.24422,0
3.0772,0.24422,0
3.1324,0.24422,0
3.1881,0.24422,0
3.2444,0.24422,0
3.3013,0.24422,0
3.3587,0.24422,0
3.4166,0.24422,0
3.4752,0.24422,0
0.62742,0.23041,0
0.6581,0.23041,0
0.68907,0.23041,0
0.72036,0.23041,0
0.75196,0.23041,0
0.78388,0.23041,0
0.81612,0.23041,0
0.84868,0.23041,0
0.88156,0.23041,0
0.91478,0.23041,0
0.94832,0.23041,0
0.9822,0.23041,0
1.0164,0.23041,0
1.051,0.23041,0
1.0859,0.23041,0
1.1211,0.23041,0
1.1568,0.23041,0
1.1927,0.23041,0
1.229,0.23041,0
1.2657,0.23041,0
1.3028,0.23041,0
1.3402,0.23041,0
1.378,0.23041,0
1.4162,0.23041,0
1.4548,0.23041,0
1.4937,0.23041,0
1.533,0.23041,0
1.5728,0.23041,0
1.6129,0.23041,0
1.6534,0.23041,0
1.6944,0.23041,0
1.7357,0.23041,0
1.7774,0.23041,0
1.8196,0.23041,0
1.8622,0.23041,0
1.9052,0.23041,0
1.9487,0.23041,0
1.9926,0.23041,0
2.0369,0.23041,0
2.0817,0.23041,0
2.1269,0.23041,0
2.1725,0.23041,0
2.2187,0.23041,0
2.2652,0.23041,0
2.3123,0.23041,0
2.3598,0.23041,0
2.4078,0.23041,0
2.4563,0.23041,0
2.5053,0.23041,0
2.5547,0.23041,0
2.6046,0.23041,0
2.6551,0.23041,0
2.706,0.23041,0
2.7575,0.23041,0
2.8095,0.23041,0
2.862,0.23041,0
2.915,0.23041,0
2.9685,0.23041,0
3.0226,0.23041,0
3.0772,0.23041,0
3.1324,0.23041,0
3.1881,0.23041,0
0.68907,0.21643,0
0.72036,0.21643,0
0.75196,0.21643,0
0.78388,0.21643,0
0.81612,0.21643,0
0.84868,0.21643,0
0.88156,0.21643,0
0.91478,0.21643,0
0.94832,0.21643,0
0.9822,0.21643,0
1.0164,0.21643,0
1.051,0.21643,0
1.0859,0.21643,0
1.1211,0.21643,0
1.1568,0.21643,0
1.1927,0.21643,0
1.229,0.21643,0
1.2657,0.21643,0
1.3028,0.21643,0
1.3402,0.21643,0
1.378,0.21643,0
1.4162,0.21643,0
1.4548,0.21643,0
1.4937,0.21643,0
1.533,0.21643,0
1.5728,0.21643,0
1.6129,0.21643,0
1.6534,0.21643,0
1.6944,0.21643,0
1.7357,0.21643,0
1.7774,0.21643,0
1.8196,0.21643,0
1.8622,0.21643,0
1.9052,0.21643,0
1.9487,0.21643,0
1.9926,0.21643,0
2.0369,0.21643,0
2.0817,0.21643,0
2.1269,0.21643,0
2.1725,0.21643,0
2.2187,0.21643,0
2.2652,0.21643,0
2.3123,0.21643,0
2.3598,0.21643,0
2.4078,0.21643,0
2.4563,0.21643,0
2.5053,0.21643,0
2.5547,0.21643,0
2.6046,0.21643,0
2.6551,0.21643,0
2.706,0.21643,0
2.7575,0.21643,0
2.8095,0.21643,0
0.78388,0.20231,0
0.81612,0.20231,0
0.84868,0.20231,0
0.88156,0.20231,0
0.91478,0.20231,0
0.94832,0.20231,0
0.9822,0.20231,0
1.0164,0.20231,0
1.051,0.20231,0
1.0859,0.20231,0
1.1211,0.20231,0
1.1568,0.20231,0
1.1927,0.20231,0
1.229,0.20231,0
1.2657,0.20231,0
1.3028,0.20231,0
1.3402,0.20231,0
1.378,0.20231,0
1.4162,0.20231,0
1.4548,0.20231,0
1.4937,0.20231,0
1.533,0.20231,0
1.5728,0.20231,0
1.6129,0.20231,0
1.6534,0.20231,0
1.6944,0.20231,0
1.7357,0.20231,0
1.7774,0.20231,0
1.8196,0.20231,0
1.8622,0.20231,0
1.9052,0.20231,0
1.9487,0.20231,0
1.9926,0.20231,0
2.0369,0.20231,0
2.0817,0.20231,0
2.1269,0.20231,0
2.1725,0.20231,0
2.2187,0.20231,0
2.2652,0.20231,0
2.3123,0.20231,0
2.3598,0.20231,0
2.4078,0.20231,0
2.4563,0.20231,0
1.051,0.1881,0
1.0859,0.1881,0
1.1211,0.1881,0
1.1568,0.1881,0
1.1927,0.1881,0
1.229,0.1881,0
1.2657,0.1881,0
1.3028,0.1881,0
1.3402,0.1881,0
1.378,0.1881,0
1.4162,0.1881,0
1.4548,0.1881,0
1.4937,0.1881,0
1.533,0.1881,0
1.5728,0.1881,0
1.6129,0.1881,0
1.6534,0.1881,0
1.6944,0.1881,0
1.7357,0.1881,0
1.7774,0.1881,0
1.8196,0.1881,0
1.8622,0.1881,0
1.9052,0.1881,0
1.9487,0.1881,0
1.9926,0.1881,0
2.0369,0.1881,0

Спасибо за вашу помощь,

Искренне

Используйте ConvexHull из SciPy.

J. M. Arnold 14.12.2022 16:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
1
99
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Это можно сделать с помощью ConvexHull из SciPy, и эта функция вместе с convex_hull_plot_2d дает этот результат для предоставленного набора данных. Ниже приведен код для воспроизведения изображений. hull.points в конце кода содержать результирующий набор точек, который вы ищете.

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from scipy.spatial import ConvexHull, convex_hull_plot_2d

df = pd.DataFrame([{'x': 0.20215, 'y': 0.29703, 'z': 0},
 {'x': 0.22857, 'y': 0.29703, 'z': 0},
 {'x': 0.25526, 'y': 0.29703, 'z': 0},
 {'x': 0.28221, 'y': 0.29703, 'z': 0},
 {'x': 0.30943, 'y': 0.29703, 'z': 0},
 {'x': 0.33692, 'y': 0.29703, 'z': 0},
 {'x': 0.36469, 'y': 0.29703, 'z': 0},
 {'x': 0.39273, 'y': 0.29703, 'z': 0},
 {'x': 0.42106, 'y': 0.29703, 'z': 0},
 {'x': 0.44966, 'y': 0.29703, 'z': 0},
 {'x': 0.47856, 'y': 0.29703, 'z': 0},
 {'x': 0.50774, 'y': 0.29703, 'z': 0},
 {'x': 0.53722, 'y': 0.29703, 'z': 0},
 {'x': 0.56699, 'y': 0.29703, 'z': 0},
 {'x': 0.59706, 'y': 0.29703, 'z': 0},
 {'x': 0.62742, 'y': 0.29703, 'z': 0},
 {'x': 0.6581, 'y': 0.29703, 'z': 0},
 {'x': 0.68907, 'y': 0.29703, 'z': 0},
 {'x': 0.72036, 'y': 0.29703, 'z': 0},
 {'x': 0.75196, 'y': 0.29703, 'z': 0},
 {'x': 0.78388, 'y': 0.29703, 'z': 0},
 {'x': 0.81612, 'y': 0.29703, 'z': 0},
 {'x': 0.84868, 'y': 0.29703, 'z': 0},
 {'x': 0.88156, 'y': 0.29703, 'z': 0},
 {'x': 0.91478, 'y': 0.29703, 'z': 0},
 {'x': 0.94832, 'y': 0.29703, 'z': 0},
 {'x': 0.9822, 'y': 0.29703, 'z': 0},
 {'x': 1.0164, 'y': 0.29703, 'z': 0},
 {'x': 1.051, 'y': 0.29703, 'z': 0},
 {'x': 1.0859, 'y': 0.29703, 'z': 0},
 {'x': 1.1211, 'y': 0.29703, 'z': 0},
 {'x': 1.1568, 'y': 0.29703, 'z': 0},
 {'x': 1.1927, 'y': 0.29703, 'z': 0},
 {'x': 1.229, 'y': 0.29703, 'z': 0},
 {'x': 1.2657, 'y': 0.29703, 'z': 0},
 {'x': 1.3028, 'y': 0.29703, 'z': 0},
 {'x': 1.3402, 'y': 0.29703, 'z': 0},
 {'x': 1.378, 'y': 0.29703, 'z': 0},
 {'x': 1.4162, 'y': 0.29703, 'z': 0},
 {'x': 1.4548, 'y': 0.29703, 'z': 0},
 {'x': 1.4937, 'y': 0.29703, 'z': 0},
 {'x': 1.533, 'y': 0.29703, 'z': 0},
 {'x': 1.5728, 'y': 0.29703, 'z': 0},
 {'x': 1.6129, 'y': 0.29703, 'z': 0},
 {'x': 1.6534, 'y': 0.29703, 'z': 0},
 {'x': 1.6944, 'y': 0.29703, 'z': 0},
 {'x': 1.7357, 'y': 0.29703, 'z': 0},
 {'x': 1.7774, 'y': 0.29703, 'z': 0},
 {'x': 1.8196, 'y': 0.29703, 'z': 0},
 {'x': 1.8622, 'y': 0.29703, 'z': 0},
 {'x': 1.9052, 'y': 0.29703, 'z': 0},
 {'x': 1.9487, 'y': 0.29703, 'z': 0},
 {'x': 1.9926, 'y': 0.29703, 'z': 0},
 {'x': 2.0369, 'y': 0.29703, 'z': 0},
 {'x': 2.0817, 'y': 0.29703, 'z': 0},
 {'x': 2.1269, 'y': 0.29703, 'z': 0},
 {'x': 2.1725, 'y': 0.29703, 'z': 0},
 {'x': 2.2187, 'y': 0.29703, 'z': 0},
 {'x': 2.2652, 'y': 0.29703, 'z': 0},
 {'x': 2.3123, 'y': 0.29703, 'z': 0},
 {'x': 2.3598, 'y': 0.29703, 'z': 0},
 {'x': 2.4078, 'y': 0.29703, 'z': 0},
 {'x': 2.4563, 'y': 0.29703, 'z': 0},
 {'x': 2.5053, 'y': 0.29703, 'z': 0},
 {'x': 2.5547, 'y': 0.29703, 'z': 0},
 {'x': 2.6046, 'y': 0.29703, 'z': 0},
 {'x': 2.6551, 'y': 0.29703, 'z': 0},
 {'x': 2.706, 'y': 0.29703, 'z': 0},
 {'x': 2.7575, 'y': 0.29703, 'z': 0},
 {'x': 2.8095, 'y': 0.29703, 'z': 0},
 {'x': 2.862, 'y': 0.29703, 'z': 0},
 {'x': 2.915, 'y': 0.29703, 'z': 0},
 {'x': 2.9685, 'y': 0.29703, 'z': 0},
 {'x': 3.0226, 'y': 0.29703, 'z': 0},
 {'x': 3.0772, 'y': 0.29703, 'z': 0},
 {'x': 3.1324, 'y': 0.29703, 'z': 0},
 {'x': 3.1881, 'y': 0.29703, 'z': 0},
 {'x': 3.2444, 'y': 0.29703, 'z': 0},
 {'x': 3.3013, 'y': 0.29703, 'z': 0},
 {'x': 3.3587, 'y': 0.29703, 'z': 0},
 {'x': 3.4166, 'y': 0.29703, 'z': 0},
 {'x': 3.4752, 'y': 0.29703, 'z': 0},
 {'x': 3.5344, 'y': 0.29703, 'z': 0},
 {'x': 3.5941, 'y': 0.29703, 'z': 0},
 {'x': 3.6544, 'y': 0.29703, 'z': 0},
 {'x': 3.7154, 'y': 0.29703, 'z': 0},
 {'x': 3.7769, 'y': 0.29703, 'z': 0},
 {'x': 3.8391, 'y': 0.29703, 'z': 0},
 {'x': 3.9019, 'y': 0.29703, 'z': 0},
 {'x': 3.9653, 'y': 0.29703, 'z': 0},
 {'x': 4.0294, 'y': 0.29703, 'z': 0},
 {'x': 4.094, 'y': 0.29703, 'z': 0},
 {'x': 4.1594, 'y': 0.29703, 'z': 0},
 {'x': 4.2254, 'y': 0.29703, 'z': 0},
 {'x': 4.292, 'y': 0.29703, 'z': 0},
 {'x': 4.3593, 'y': 0.29703, 'z': 0},
 {'x': 4.4273, 'y': 0.29703, 'z': 0},
 {'x': 4.496, 'y': 0.29703, 'z': 0},
 {'x': 4.5654, 'y': 0.29703, 'z': 0},
 {'x': 4.6354, 'y': 0.29703, 'z': 0},
 {'x': 4.7062, 'y': 0.29703, 'z': 0},
 {'x': 4.7776, 'y': 0.29703, 'z': 0},
 {'x': 4.8498, 'y': 0.29703, 'z': 0},
 {'x': 4.9227, 'y': 0.29703, 'z': 0},
 {'x': 0.28221, 'y': 0.28425, 'z': 0},
 {'x': 0.30943, 'y': 0.28425, 'z': 0},
 {'x': 0.33692, 'y': 0.28425, 'z': 0},
 {'x': 0.36469, 'y': 0.28425, 'z': 0},
 {'x': 0.39273, 'y': 0.28425, 'z': 0},
 {'x': 0.42106, 'y': 0.28425, 'z': 0},
 {'x': 0.44966, 'y': 0.28425, 'z': 0},
 {'x': 0.47856, 'y': 0.28425, 'z': 0},
 {'x': 0.50774, 'y': 0.28425, 'z': 0},
 {'x': 0.53722, 'y': 0.28425, 'z': 0},
 {'x': 0.56699, 'y': 0.28425, 'z': 0},
 {'x': 0.59706, 'y': 0.28425, 'z': 0},
 {'x': 0.62742, 'y': 0.28425, 'z': 0},
 {'x': 0.6581, 'y': 0.28425, 'z': 0},
 {'x': 0.68907, 'y': 0.28425, 'z': 0},
 {'x': 0.72036, 'y': 0.28425, 'z': 0},
 {'x': 0.75196, 'y': 0.28425, 'z': 0},
 {'x': 0.78388, 'y': 0.28425, 'z': 0},
 {'x': 0.81612, 'y': 0.28425, 'z': 0},
 {'x': 0.84868, 'y': 0.28425, 'z': 0},
 {'x': 0.88156, 'y': 0.28425, 'z': 0},
 {'x': 0.91478, 'y': 0.28425, 'z': 0},
 {'x': 0.94832, 'y': 0.28425, 'z': 0},
 {'x': 0.9822, 'y': 0.28425, 'z': 0},
 {'x': 1.0164, 'y': 0.28425, 'z': 0},
 {'x': 1.051, 'y': 0.28425, 'z': 0},
 {'x': 1.0859, 'y': 0.28425, 'z': 0},
 {'x': 1.1211, 'y': 0.28425, 'z': 0},
 {'x': 1.1568, 'y': 0.28425, 'z': 0},
 {'x': 1.1927, 'y': 0.28425, 'z': 0},
 {'x': 1.229, 'y': 0.28425, 'z': 0},
 {'x': 1.2657, 'y': 0.28425, 'z': 0},
 {'x': 1.3028, 'y': 0.28425, 'z': 0},
 {'x': 1.3402, 'y': 0.28425, 'z': 0},
 {'x': 1.378, 'y': 0.28425, 'z': 0},
 {'x': 1.4162, 'y': 0.28425, 'z': 0},
 {'x': 1.4548, 'y': 0.28425, 'z': 0},
 {'x': 1.4937, 'y': 0.28425, 'z': 0},
 {'x': 1.533, 'y': 0.28425, 'z': 0},
 {'x': 1.5728, 'y': 0.28425, 'z': 0},
 {'x': 1.6129, 'y': 0.28425, 'z': 0},
 {'x': 1.6534, 'y': 0.28425, 'z': 0},
 {'x': 1.6944, 'y': 0.28425, 'z': 0},
 {'x': 1.7357, 'y': 0.28425, 'z': 0},
 {'x': 1.7774, 'y': 0.28425, 'z': 0},
 {'x': 1.8196, 'y': 0.28425, 'z': 0},
 {'x': 1.8622, 'y': 0.28425, 'z': 0},
 {'x': 1.9052, 'y': 0.28425, 'z': 0},
 {'x': 1.9487, 'y': 0.28425, 'z': 0},
 {'x': 1.9926, 'y': 0.28425, 'z': 0},
 {'x': 2.0369, 'y': 0.28425, 'z': 0},
 {'x': 2.0817, 'y': 0.28425, 'z': 0},
 {'x': 2.1269, 'y': 0.28425, 'z': 0},
 {'x': 2.1725, 'y': 0.28425, 'z': 0},
 {'x': 2.2187, 'y': 0.28425, 'z': 0},
 {'x': 2.2652, 'y': 0.28425, 'z': 0},
 {'x': 2.3123, 'y': 0.28425, 'z': 0},
 {'x': 2.3598, 'y': 0.28425, 'z': 0},
 {'x': 2.4078, 'y': 0.28425, 'z': 0},
 {'x': 2.4563, 'y': 0.28425, 'z': 0},
 {'x': 2.5053, 'y': 0.28425, 'z': 0},
 {'x': 2.5547, 'y': 0.28425, 'z': 0},
 {'x': 2.6046, 'y': 0.28425, 'z': 0},
 {'x': 2.6551, 'y': 0.28425, 'z': 0},
 {'x': 2.706, 'y': 0.28425, 'z': 0},
 {'x': 2.7575, 'y': 0.28425, 'z': 0},
 {'x': 2.8095, 'y': 0.28425, 'z': 0},
 {'x': 2.862, 'y': 0.28425, 'z': 0},
 {'x': 2.915, 'y': 0.28425, 'z': 0},
 {'x': 2.9685, 'y': 0.28425, 'z': 0},
 {'x': 3.0226, 'y': 0.28425, 'z': 0},
 {'x': 3.0772, 'y': 0.28425, 'z': 0},
 {'x': 3.1324, 'y': 0.28425, 'z': 0},
 {'x': 3.1881, 'y': 0.28425, 'z': 0},
 {'x': 3.2444, 'y': 0.28425, 'z': 0},
 {'x': 3.3013, 'y': 0.28425, 'z': 0},
 {'x': 3.3587, 'y': 0.28425, 'z': 0},
 {'x': 3.4166, 'y': 0.28425, 'z': 0},
 {'x': 3.4752, 'y': 0.28425, 'z': 0},
 {'x': 3.5344, 'y': 0.28425, 'z': 0},
 {'x': 3.5941, 'y': 0.28425, 'z': 0},
 {'x': 3.6544, 'y': 0.28425, 'z': 0},
 {'x': 3.7154, 'y': 0.28425, 'z': 0},
 {'x': 3.7769, 'y': 0.28425, 'z': 0},
 {'x': 3.8391, 'y': 0.28425, 'z': 0},
 {'x': 3.9019, 'y': 0.28425, 'z': 0},
 {'x': 3.9653, 'y': 0.28425, 'z': 0},
 {'x': 4.0294, 'y': 0.28425, 'z': 0},
 {'x': 4.094, 'y': 0.28425, 'z': 0},
 {'x': 4.1594, 'y': 0.28425, 'z': 0},
 {'x': 4.2254, 'y': 0.28425, 'z': 0},
 {'x': 4.292, 'y': 0.28425, 'z': 0},
 {'x': 4.3593, 'y': 0.28425, 'z': 0},
 {'x': 4.4273, 'y': 0.28425, 'z': 0},
 {'x': 4.496, 'y': 0.28425, 'z': 0},
 {'x': 4.5654, 'y': 0.28425, 'z': 0},
 {'x': 0.39273, 'y': 0.27117, 'z': 0},
 {'x': 0.42106, 'y': 0.27117, 'z': 0},
 {'x': 0.44966, 'y': 0.27117, 'z': 0},
 {'x': 0.47856, 'y': 0.27117, 'z': 0},
 {'x': 0.50774, 'y': 0.27117, 'z': 0},
 {'x': 0.53722, 'y': 0.27117, 'z': 0},
 {'x': 0.56699, 'y': 0.27117, 'z': 0},
 {'x': 0.59706, 'y': 0.27117, 'z': 0},
 {'x': 0.62742, 'y': 0.27117, 'z': 0},
 {'x': 0.6581, 'y': 0.27117, 'z': 0},
 {'x': 0.68907, 'y': 0.27117, 'z': 0},
 {'x': 0.72036, 'y': 0.27117, 'z': 0},
 {'x': 0.75196, 'y': 0.27117, 'z': 0},
 {'x': 0.78388, 'y': 0.27117, 'z': 0},
 {'x': 0.81612, 'y': 0.27117, 'z': 0},
 {'x': 0.84868, 'y': 0.27117, 'z': 0},
 {'x': 0.88156, 'y': 0.27117, 'z': 0},
 {'x': 0.91478, 'y': 0.27117, 'z': 0},
 {'x': 0.94832, 'y': 0.27117, 'z': 0},
 {'x': 0.9822, 'y': 0.27117, 'z': 0},
 {'x': 1.0164, 'y': 0.27117, 'z': 0},
 {'x': 1.051, 'y': 0.27117, 'z': 0},
 {'x': 1.0859, 'y': 0.27117, 'z': 0},
 {'x': 1.1211, 'y': 0.27117, 'z': 0},
 {'x': 1.1568, 'y': 0.27117, 'z': 0},
 {'x': 1.1927, 'y': 0.27117, 'z': 0},
 {'x': 1.229, 'y': 0.27117, 'z': 0},
 {'x': 1.2657, 'y': 0.27117, 'z': 0},
 {'x': 1.3028, 'y': 0.27117, 'z': 0},
 {'x': 1.3402, 'y': 0.27117, 'z': 0},
 {'x': 1.378, 'y': 0.27117, 'z': 0},
 {'x': 1.4162, 'y': 0.27117, 'z': 0},
 {'x': 1.4548, 'y': 0.27117, 'z': 0},
 {'x': 1.4937, 'y': 0.27117, 'z': 0},
 {'x': 1.533, 'y': 0.27117, 'z': 0},
 {'x': 1.5728, 'y': 0.27117, 'z': 0},
 {'x': 1.6129, 'y': 0.27117, 'z': 0},
 {'x': 1.6534, 'y': 0.27117, 'z': 0},
 {'x': 1.6944, 'y': 0.27117, 'z': 0},
 {'x': 1.7357, 'y': 0.27117, 'z': 0},
 {'x': 1.7774, 'y': 0.27117, 'z': 0},
 {'x': 1.8196, 'y': 0.27117, 'z': 0},
 {'x': 1.8622, 'y': 0.27117, 'z': 0},
 {'x': 1.9052, 'y': 0.27117, 'z': 0},
 {'x': 1.9487, 'y': 0.27117, 'z': 0},
 {'x': 1.9926, 'y': 0.27117, 'z': 0},
 {'x': 2.0369, 'y': 0.27117, 'z': 0},
 {'x': 2.0817, 'y': 0.27117, 'z': 0},
 {'x': 2.1269, 'y': 0.27117, 'z': 0},
 {'x': 2.1725, 'y': 0.27117, 'z': 0},
 {'x': 2.2187, 'y': 0.27117, 'z': 0},
 {'x': 2.2652, 'y': 0.27117, 'z': 0},
 {'x': 2.3123, 'y': 0.27117, 'z': 0},
 {'x': 2.3598, 'y': 0.27117, 'z': 0},
 {'x': 2.4078, 'y': 0.27117, 'z': 0},
 {'x': 2.4563, 'y': 0.27117, 'z': 0},
 {'x': 2.5053, 'y': 0.27117, 'z': 0},
 {'x': 2.5547, 'y': 0.27117, 'z': 0},
 {'x': 2.6046, 'y': 0.27117, 'z': 0},
 {'x': 2.6551, 'y': 0.27117, 'z': 0},
 {'x': 2.706, 'y': 0.27117, 'z': 0},
 {'x': 2.7575, 'y': 0.27117, 'z': 0},
 {'x': 2.8095, 'y': 0.27117, 'z': 0},
 {'x': 2.862, 'y': 0.27117, 'z': 0},
 {'x': 2.915, 'y': 0.27117, 'z': 0},
 {'x': 2.9685, 'y': 0.27117, 'z': 0},
 {'x': 3.0226, 'y': 0.27117, 'z': 0},
 {'x': 3.0772, 'y': 0.27117, 'z': 0},
 {'x': 3.1324, 'y': 0.27117, 'z': 0},
 {'x': 3.1881, 'y': 0.27117, 'z': 0},
 {'x': 3.2444, 'y': 0.27117, 'z': 0},
 {'x': 3.3013, 'y': 0.27117, 'z': 0},
 {'x': 3.3587, 'y': 0.27117, 'z': 0},
 {'x': 3.4166, 'y': 0.27117, 'z': 0},
 {'x': 3.4752, 'y': 0.27117, 'z': 0},
 {'x': 3.5344, 'y': 0.27117, 'z': 0},
 {'x': 3.5941, 'y': 0.27117, 'z': 0},
 {'x': 3.6544, 'y': 0.27117, 'z': 0},
 {'x': 3.7154, 'y': 0.27117, 'z': 0},
 {'x': 3.7769, 'y': 0.27117, 'z': 0},
 {'x': 3.8391, 'y': 0.27117, 'z': 0},
 {'x': 3.9019, 'y': 0.27117, 'z': 0},
 {'x': 3.9653, 'y': 0.27117, 'z': 0},
 {'x': 4.0294, 'y': 0.27117, 'z': 0},
 {'x': 4.094, 'y': 0.27117, 'z': 0},
 {'x': 4.1594, 'y': 0.27117, 'z': 0},
 {'x': 0.47856, 'y': 0.25781, 'z': 0},
 {'x': 0.50774, 'y': 0.25781, 'z': 0},
 {'x': 0.53722, 'y': 0.25781, 'z': 0},
 {'x': 0.56699, 'y': 0.25781, 'z': 0},
 {'x': 0.59706, 'y': 0.25781, 'z': 0},
 {'x': 0.62742, 'y': 0.25781, 'z': 0},
 {'x': 0.6581, 'y': 0.25781, 'z': 0},
 {'x': 0.68907, 'y': 0.25781, 'z': 0},
 {'x': 0.72036, 'y': 0.25781, 'z': 0},
 {'x': 0.75196, 'y': 0.25781, 'z': 0},
 {'x': 0.78388, 'y': 0.25781, 'z': 0},
 {'x': 0.81612, 'y': 0.25781, 'z': 0},
 {'x': 0.84868, 'y': 0.25781, 'z': 0},
 {'x': 0.88156, 'y': 0.25781, 'z': 0},
 {'x': 0.91478, 'y': 0.25781, 'z': 0},
 {'x': 0.94832, 'y': 0.25781, 'z': 0},
 {'x': 0.9822, 'y': 0.25781, 'z': 0},
 {'x': 1.0164, 'y': 0.25781, 'z': 0},
 {'x': 1.051, 'y': 0.25781, 'z': 0},
 {'x': 1.0859, 'y': 0.25781, 'z': 0},
 {'x': 1.1211, 'y': 0.25781, 'z': 0},
 {'x': 1.1568, 'y': 0.25781, 'z': 0},
 {'x': 1.1927, 'y': 0.25781, 'z': 0},
 {'x': 1.229, 'y': 0.25781, 'z': 0},
 {'x': 1.2657, 'y': 0.25781, 'z': 0},
 {'x': 1.3028, 'y': 0.25781, 'z': 0},
 {'x': 1.3402, 'y': 0.25781, 'z': 0},
 {'x': 1.378, 'y': 0.25781, 'z': 0},
 {'x': 1.4162, 'y': 0.25781, 'z': 0},
 {'x': 1.4548, 'y': 0.25781, 'z': 0},
 {'x': 1.4937, 'y': 0.25781, 'z': 0},
 {'x': 1.533, 'y': 0.25781, 'z': 0},
 {'x': 1.5728, 'y': 0.25781, 'z': 0},
 {'x': 1.6129, 'y': 0.25781, 'z': 0},
 {'x': 1.6534, 'y': 0.25781, 'z': 0},
 {'x': 1.6944, 'y': 0.25781, 'z': 0},
 {'x': 1.7357, 'y': 0.25781, 'z': 0},
 {'x': 1.7774, 'y': 0.25781, 'z': 0},
 {'x': 1.8196, 'y': 0.25781, 'z': 0},
 {'x': 1.8622, 'y': 0.25781, 'z': 0},
 {'x': 1.9052, 'y': 0.25781, 'z': 0},
 {'x': 1.9487, 'y': 0.25781, 'z': 0},
 {'x': 1.9926, 'y': 0.25781, 'z': 0},
 {'x': 2.0369, 'y': 0.25781, 'z': 0},
 {'x': 2.0817, 'y': 0.25781, 'z': 0},
 {'x': 2.1269, 'y': 0.25781, 'z': 0},
 {'x': 2.1725, 'y': 0.25781, 'z': 0},
 {'x': 2.2187, 'y': 0.25781, 'z': 0},
 {'x': 2.2652, 'y': 0.25781, 'z': 0},
 {'x': 2.3123, 'y': 0.25781, 'z': 0},
 {'x': 2.3598, 'y': 0.25781, 'z': 0},
 {'x': 2.4078, 'y': 0.25781, 'z': 0},
 {'x': 2.4563, 'y': 0.25781, 'z': 0},
 {'x': 2.5053, 'y': 0.25781, 'z': 0},
 {'x': 2.5547, 'y': 0.25781, 'z': 0},
 {'x': 2.6046, 'y': 0.25781, 'z': 0},
 {'x': 2.6551, 'y': 0.25781, 'z': 0},
 {'x': 2.706, 'y': 0.25781, 'z': 0},
 {'x': 2.7575, 'y': 0.25781, 'z': 0},
 {'x': 2.8095, 'y': 0.25781, 'z': 0},
 {'x': 2.862, 'y': 0.25781, 'z': 0},
 {'x': 2.915, 'y': 0.25781, 'z': 0},
 {'x': 2.9685, 'y': 0.25781, 'z': 0},
 {'x': 3.0226, 'y': 0.25781, 'z': 0},
 {'x': 3.0772, 'y': 0.25781, 'z': 0},
 {'x': 3.1324, 'y': 0.25781, 'z': 0},
 {'x': 3.1881, 'y': 0.25781, 'z': 0},
 {'x': 3.2444, 'y': 0.25781, 'z': 0},
 {'x': 3.3013, 'y': 0.25781, 'z': 0},
 {'x': 3.3587, 'y': 0.25781, 'z': 0},
 {'x': 3.4166, 'y': 0.25781, 'z': 0},
 {'x': 3.4752, 'y': 0.25781, 'z': 0},
 {'x': 3.5344, 'y': 0.25781, 'z': 0},
 {'x': 3.5941, 'y': 0.25781, 'z': 0},
 {'x': 3.6544, 'y': 0.25781, 'z': 0},
 {'x': 3.7154, 'y': 0.25781, 'z': 0},
 {'x': 3.7769, 'y': 0.25781, 'z': 0},
 {'x': 3.8391, 'y': 0.25781, 'z': 0},
 {'x': 0.53722, 'y': 0.24422, 'z': 0},
 {'x': 0.56699, 'y': 0.24422, 'z': 0},
 {'x': 0.59706, 'y': 0.24422, 'z': 0},
 {'x': 0.62742, 'y': 0.24422, 'z': 0},
 {'x': 0.6581, 'y': 0.24422, 'z': 0},
 {'x': 0.68907, 'y': 0.24422, 'z': 0},
 {'x': 0.72036, 'y': 0.24422, 'z': 0},
 {'x': 0.75196, 'y': 0.24422, 'z': 0},
 {'x': 0.78388, 'y': 0.24422, 'z': 0},
 {'x': 0.81612, 'y': 0.24422, 'z': 0},
 {'x': 0.84868, 'y': 0.24422, 'z': 0},
 {'x': 0.88156, 'y': 0.24422, 'z': 0},
 {'x': 0.91478, 'y': 0.24422, 'z': 0},
 {'x': 0.94832, 'y': 0.24422, 'z': 0},
 {'x': 0.9822, 'y': 0.24422, 'z': 0},
 {'x': 1.0164, 'y': 0.24422, 'z': 0},
 {'x': 1.051, 'y': 0.24422, 'z': 0},
 {'x': 1.0859, 'y': 0.24422, 'z': 0},
 {'x': 1.1211, 'y': 0.24422, 'z': 0},
 {'x': 1.1568, 'y': 0.24422, 'z': 0},
 {'x': 1.1927, 'y': 0.24422, 'z': 0},
 {'x': 1.229, 'y': 0.24422, 'z': 0},
 {'x': 1.2657, 'y': 0.24422, 'z': 0},
 {'x': 1.3028, 'y': 0.24422, 'z': 0},
 {'x': 1.3402, 'y': 0.24422, 'z': 0},
 {'x': 1.378, 'y': 0.24422, 'z': 0},
 {'x': 1.4162, 'y': 0.24422, 'z': 0},
 {'x': 1.4548, 'y': 0.24422, 'z': 0},
 {'x': 1.4937, 'y': 0.24422, 'z': 0},
 {'x': 1.533, 'y': 0.24422, 'z': 0},
 {'x': 1.5728, 'y': 0.24422, 'z': 0},
 {'x': 1.6129, 'y': 0.24422, 'z': 0},
 {'x': 1.6534, 'y': 0.24422, 'z': 0},
 {'x': 1.6944, 'y': 0.24422, 'z': 0},
 {'x': 1.7357, 'y': 0.24422, 'z': 0},
 {'x': 1.7774, 'y': 0.24422, 'z': 0},
 {'x': 1.8196, 'y': 0.24422, 'z': 0},
 {'x': 1.8622, 'y': 0.24422, 'z': 0},
 {'x': 1.9052, 'y': 0.24422, 'z': 0},
 {'x': 1.9487, 'y': 0.24422, 'z': 0},
 {'x': 1.9926, 'y': 0.24422, 'z': 0},
 {'x': 2.0369, 'y': 0.24422, 'z': 0},
 {'x': 2.0817, 'y': 0.24422, 'z': 0},
 {'x': 2.1269, 'y': 0.24422, 'z': 0},
 {'x': 2.1725, 'y': 0.24422, 'z': 0},
 {'x': 2.2187, 'y': 0.24422, 'z': 0},
 {'x': 2.2652, 'y': 0.24422, 'z': 0},
 {'x': 2.3123, 'y': 0.24422, 'z': 0},
 {'x': 2.3598, 'y': 0.24422, 'z': 0},
 {'x': 2.4078, 'y': 0.24422, 'z': 0},
 {'x': 2.4563, 'y': 0.24422, 'z': 0},
 {'x': 2.5053, 'y': 0.24422, 'z': 0},
 {'x': 2.5547, 'y': 0.24422, 'z': 0},
 {'x': 2.6046, 'y': 0.24422, 'z': 0},
 {'x': 2.6551, 'y': 0.24422, 'z': 0},
 {'x': 2.706, 'y': 0.24422, 'z': 0},
 {'x': 2.7575, 'y': 0.24422, 'z': 0},
 {'x': 2.8095, 'y': 0.24422, 'z': 0},
 {'x': 2.862, 'y': 0.24422, 'z': 0},
 {'x': 2.915, 'y': 0.24422, 'z': 0},
 {'x': 2.9685, 'y': 0.24422, 'z': 0},
 {'x': 3.0226, 'y': 0.24422, 'z': 0},
 {'x': 3.0772, 'y': 0.24422, 'z': 0},
 {'x': 3.1324, 'y': 0.24422, 'z': 0},
 {'x': 3.1881, 'y': 0.24422, 'z': 0},
 {'x': 3.2444, 'y': 0.24422, 'z': 0},
 {'x': 3.3013, 'y': 0.24422, 'z': 0},
 {'x': 3.3587, 'y': 0.24422, 'z': 0},
 {'x': 3.4166, 'y': 0.24422, 'z': 0},
 {'x': 3.4752, 'y': 0.24422, 'z': 0},
 {'x': 0.62742, 'y': 0.23041, 'z': 0},
 {'x': 0.6581, 'y': 0.23041, 'z': 0},
 {'x': 0.68907, 'y': 0.23041, 'z': 0},
 {'x': 0.72036, 'y': 0.23041, 'z': 0},
 {'x': 0.75196, 'y': 0.23041, 'z': 0},
 {'x': 0.78388, 'y': 0.23041, 'z': 0},
 {'x': 0.81612, 'y': 0.23041, 'z': 0},
 {'x': 0.84868, 'y': 0.23041, 'z': 0},
 {'x': 0.88156, 'y': 0.23041, 'z': 0},
 {'x': 0.91478, 'y': 0.23041, 'z': 0},
 {'x': 0.94832, 'y': 0.23041, 'z': 0},
 {'x': 0.9822, 'y': 0.23041, 'z': 0},
 {'x': 1.0164, 'y': 0.23041, 'z': 0},
 {'x': 1.051, 'y': 0.23041, 'z': 0},
 {'x': 1.0859, 'y': 0.23041, 'z': 0},
 {'x': 1.1211, 'y': 0.23041, 'z': 0},
 {'x': 1.1568, 'y': 0.23041, 'z': 0},
 {'x': 1.1927, 'y': 0.23041, 'z': 0},
 {'x': 1.229, 'y': 0.23041, 'z': 0},
 {'x': 1.2657, 'y': 0.23041, 'z': 0},
 {'x': 1.3028, 'y': 0.23041, 'z': 0},
 {'x': 1.3402, 'y': 0.23041, 'z': 0},
 {'x': 1.378, 'y': 0.23041, 'z': 0},
 {'x': 1.4162, 'y': 0.23041, 'z': 0},
 {'x': 1.4548, 'y': 0.23041, 'z': 0},
 {'x': 1.4937, 'y': 0.23041, 'z': 0},
 {'x': 1.533, 'y': 0.23041, 'z': 0},
 {'x': 1.5728, 'y': 0.23041, 'z': 0},
 {'x': 1.6129, 'y': 0.23041, 'z': 0},
 {'x': 1.6534, 'y': 0.23041, 'z': 0},
 {'x': 1.6944, 'y': 0.23041, 'z': 0},
 {'x': 1.7357, 'y': 0.23041, 'z': 0},
 {'x': 1.7774, 'y': 0.23041, 'z': 0},
 {'x': 1.8196, 'y': 0.23041, 'z': 0},
 {'x': 1.8622, 'y': 0.23041, 'z': 0},
 {'x': 1.9052, 'y': 0.23041, 'z': 0},
 {'x': 1.9487, 'y': 0.23041, 'z': 0},
 {'x': 1.9926, 'y': 0.23041, 'z': 0},
 {'x': 2.0369, 'y': 0.23041, 'z': 0},
 {'x': 2.0817, 'y': 0.23041, 'z': 0},
 {'x': 2.1269, 'y': 0.23041, 'z': 0},
 {'x': 2.1725, 'y': 0.23041, 'z': 0},
 {'x': 2.2187, 'y': 0.23041, 'z': 0},
 {'x': 2.2652, 'y': 0.23041, 'z': 0},
 {'x': 2.3123, 'y': 0.23041, 'z': 0},
 {'x': 2.3598, 'y': 0.23041, 'z': 0},
 {'x': 2.4078, 'y': 0.23041, 'z': 0},
 {'x': 2.4563, 'y': 0.23041, 'z': 0},
 {'x': 2.5053, 'y': 0.23041, 'z': 0},
 {'x': 2.5547, 'y': 0.23041, 'z': 0},
 {'x': 2.6046, 'y': 0.23041, 'z': 0},
 {'x': 2.6551, 'y': 0.23041, 'z': 0},
 {'x': 2.706, 'y': 0.23041, 'z': 0},
 {'x': 2.7575, 'y': 0.23041, 'z': 0},
 {'x': 2.8095, 'y': 0.23041, 'z': 0},
 {'x': 2.862, 'y': 0.23041, 'z': 0},
 {'x': 2.915, 'y': 0.23041, 'z': 0},
 {'x': 2.9685, 'y': 0.23041, 'z': 0},
 {'x': 3.0226, 'y': 0.23041, 'z': 0},
 {'x': 3.0772, 'y': 0.23041, 'z': 0},
 {'x': 3.1324, 'y': 0.23041, 'z': 0},
 {'x': 3.1881, 'y': 0.23041, 'z': 0},
 {'x': 0.68907, 'y': 0.21643, 'z': 0},
 {'x': 0.72036, 'y': 0.21643, 'z': 0},
 {'x': 0.75196, 'y': 0.21643, 'z': 0},
 {'x': 0.78388, 'y': 0.21643, 'z': 0},
 {'x': 0.81612, 'y': 0.21643, 'z': 0},
 {'x': 0.84868, 'y': 0.21643, 'z': 0},
 {'x': 0.88156, 'y': 0.21643, 'z': 0},
 {'x': 0.91478, 'y': 0.21643, 'z': 0},
 {'x': 0.94832, 'y': 0.21643, 'z': 0},
 {'x': 0.9822, 'y': 0.21643, 'z': 0},
 {'x': 1.0164, 'y': 0.21643, 'z': 0},
 {'x': 1.051, 'y': 0.21643, 'z': 0},
 {'x': 1.0859, 'y': 0.21643, 'z': 0},
 {'x': 1.1211, 'y': 0.21643, 'z': 0},
 {'x': 1.1568, 'y': 0.21643, 'z': 0},
 {'x': 1.1927, 'y': 0.21643, 'z': 0},
 {'x': 1.229, 'y': 0.21643, 'z': 0},
 {'x': 1.2657, 'y': 0.21643, 'z': 0},
 {'x': 1.3028, 'y': 0.21643, 'z': 0},
 {'x': 1.3402, 'y': 0.21643, 'z': 0},
 {'x': 1.378, 'y': 0.21643, 'z': 0},
 {'x': 1.4162, 'y': 0.21643, 'z': 0},
 {'x': 1.4548, 'y': 0.21643, 'z': 0},
 {'x': 1.4937, 'y': 0.21643, 'z': 0},
 {'x': 1.533, 'y': 0.21643, 'z': 0},
 {'x': 1.5728, 'y': 0.21643, 'z': 0},
 {'x': 1.6129, 'y': 0.21643, 'z': 0},
 {'x': 1.6534, 'y': 0.21643, 'z': 0},
 {'x': 1.6944, 'y': 0.21643, 'z': 0},
 {'x': 1.7357, 'y': 0.21643, 'z': 0},
 {'x': 1.7774, 'y': 0.21643, 'z': 0},
 {'x': 1.8196, 'y': 0.21643, 'z': 0},
 {'x': 1.8622, 'y': 0.21643, 'z': 0},
 {'x': 1.9052, 'y': 0.21643, 'z': 0},
 {'x': 1.9487, 'y': 0.21643, 'z': 0},
 {'x': 1.9926, 'y': 0.21643, 'z': 0},
 {'x': 2.0369, 'y': 0.21643, 'z': 0},
 {'x': 2.0817, 'y': 0.21643, 'z': 0},
 {'x': 2.1269, 'y': 0.21643, 'z': 0},
 {'x': 2.1725, 'y': 0.21643, 'z': 0},
 {'x': 2.2187, 'y': 0.21643, 'z': 0},
 {'x': 2.2652, 'y': 0.21643, 'z': 0},
 {'x': 2.3123, 'y': 0.21643, 'z': 0},
 {'x': 2.3598, 'y': 0.21643, 'z': 0},
 {'x': 2.4078, 'y': 0.21643, 'z': 0},
 {'x': 2.4563, 'y': 0.21643, 'z': 0},
 {'x': 2.5053, 'y': 0.21643, 'z': 0},
 {'x': 2.5547, 'y': 0.21643, 'z': 0},
 {'x': 2.6046, 'y': 0.21643, 'z': 0},
 {'x': 2.6551, 'y': 0.21643, 'z': 0},
 {'x': 2.706, 'y': 0.21643, 'z': 0},
 {'x': 2.7575, 'y': 0.21643, 'z': 0},
 {'x': 2.8095, 'y': 0.21643, 'z': 0},
 {'x': 0.78388, 'y': 0.20231, 'z': 0},
 {'x': 0.81612, 'y': 0.20231, 'z': 0},
 {'x': 0.84868, 'y': 0.20231, 'z': 0},
 {'x': 0.88156, 'y': 0.20231, 'z': 0},
 {'x': 0.91478, 'y': 0.20231, 'z': 0},
 {'x': 0.94832, 'y': 0.20231, 'z': 0},
 {'x': 0.9822, 'y': 0.20231, 'z': 0},
 {'x': 1.0164, 'y': 0.20231, 'z': 0},
 {'x': 1.051, 'y': 0.20231, 'z': 0},
 {'x': 1.0859, 'y': 0.20231, 'z': 0},
 {'x': 1.1211, 'y': 0.20231, 'z': 0},
 {'x': 1.1568, 'y': 0.20231, 'z': 0},
 {'x': 1.1927, 'y': 0.20231, 'z': 0},
 {'x': 1.229, 'y': 0.20231, 'z': 0},
 {'x': 1.2657, 'y': 0.20231, 'z': 0},
 {'x': 1.3028, 'y': 0.20231, 'z': 0},
 {'x': 1.3402, 'y': 0.20231, 'z': 0},
 {'x': 1.378, 'y': 0.20231, 'z': 0},
 {'x': 1.4162, 'y': 0.20231, 'z': 0},
 {'x': 1.4548, 'y': 0.20231, 'z': 0},
 {'x': 1.4937, 'y': 0.20231, 'z': 0},
 {'x': 1.533, 'y': 0.20231, 'z': 0},
 {'x': 1.5728, 'y': 0.20231, 'z': 0},
 {'x': 1.6129, 'y': 0.20231, 'z': 0},
 {'x': 1.6534, 'y': 0.20231, 'z': 0},
 {'x': 1.6944, 'y': 0.20231, 'z': 0},
 {'x': 1.7357, 'y': 0.20231, 'z': 0},
 {'x': 1.7774, 'y': 0.20231, 'z': 0},
 {'x': 1.8196, 'y': 0.20231, 'z': 0},
 {'x': 1.8622, 'y': 0.20231, 'z': 0},
 {'x': 1.9052, 'y': 0.20231, 'z': 0},
 {'x': 1.9487, 'y': 0.20231, 'z': 0},
 {'x': 1.9926, 'y': 0.20231, 'z': 0},
 {'x': 2.0369, 'y': 0.20231, 'z': 0},
 {'x': 2.0817, 'y': 0.20231, 'z': 0},
 {'x': 2.1269, 'y': 0.20231, 'z': 0},
 {'x': 2.1725, 'y': 0.20231, 'z': 0},
 {'x': 2.2187, 'y': 0.20231, 'z': 0},
 {'x': 2.2652, 'y': 0.20231, 'z': 0},
 {'x': 2.3123, 'y': 0.20231, 'z': 0},
 {'x': 2.3598, 'y': 0.20231, 'z': 0},
 {'x': 2.4078, 'y': 0.20231, 'z': 0},
 {'x': 2.4563, 'y': 0.20231, 'z': 0},
 {'x': 1.051, 'y': 0.1881, 'z': 0},
 {'x': 1.0859, 'y': 0.1881, 'z': 0},
 {'x': 1.1211, 'y': 0.1881, 'z': 0},
 {'x': 1.1568, 'y': 0.1881, 'z': 0},
 {'x': 1.1927, 'y': 0.1881, 'z': 0},
 {'x': 1.229, 'y': 0.1881, 'z': 0},
 {'x': 1.2657, 'y': 0.1881, 'z': 0},
 {'x': 1.3028, 'y': 0.1881, 'z': 0},
 {'x': 1.3402, 'y': 0.1881, 'z': 0},
 {'x': 1.378, 'y': 0.1881, 'z': 0},
 {'x': 1.4162, 'y': 0.1881, 'z': 0},
 {'x': 1.4548, 'y': 0.1881, 'z': 0},
 {'x': 1.4937, 'y': 0.1881, 'z': 0},
 {'x': 1.533, 'y': 0.1881, 'z': 0},
 {'x': 1.5728, 'y': 0.1881, 'z': 0},
 {'x': 1.6129, 'y': 0.1881, 'z': 0},
 {'x': 1.6534, 'y': 0.1881, 'z': 0},
 {'x': 1.6944, 'y': 0.1881, 'z': 0},
 {'x': 1.7357, 'y': 0.1881, 'z': 0},
 {'x': 1.7774, 'y': 0.1881, 'z': 0},
 {'x': 1.8196, 'y': 0.1881, 'z': 0},
 {'x': 1.8622, 'y': 0.1881, 'z': 0},
 {'x': 1.9052, 'y': 0.1881, 'z': 0},
 {'x': 1.9487, 'y': 0.1881, 'z': 0},
 {'x': 1.9926, 'y': 0.1881, 'z': 0},
 {'x': 2.0369, 'y': 0.1881, 'z': 0}])


plt.scatter(data=df, x='x', y='y', label='original_data')
plt.legend()
plt.title('original data')
plt.show()

hull = ConvexHull(df[['x', 'y']])
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
convex_hull_plot_2d(hull, ax=ax)
fig.tight_layout()
plt.title('convex hull with points')
plt.show()

hull.points
array([[0.20215, 0.29703],
   [0.22857, 0.29703],
   [0.25526, 0.29703],
   ...,
   [1.9487 , 0.1881 ],
   [1.9926 , 0.1881 ],
   [2.0369 , 0.1881 ]])

Выпуклая оболочка - хороший подход, хотя он не решит случай, который вы показываете (форма пончика с внутренней границей).

Я думаю, что алгоритм, который вам нужен, называется "Марширующие кубы" (или Марширующие квадраты, в 2D). Это широко используемый метод, поэтому вы сможете легко найти некоторые библиотеки в python, которые его реализуют.

https://en.wikipedia.org/wiki/Marching_squares

В основном, рассматривая 2D-случай, алгоритм работает следующим образом:

  • Дискретизируйте пространство в сетке.
  • Подсчитайте количество точек в каждой ячейке
  • Примените порог к ячейкам, чтобы в итоге вы получили либо «пустые», либо «заполненные» ячейки.
  • В зависимости от состояния каждой ячейки и ее соседей существует несколько предопределенных случаев (16 в 2D) того, как должна выглядеть граничная кривая.
  • Объедините все маленькие кривые

В 3D идея та же, но с кубами вместо квадратов и с большим количеством предопределенных случаев.

Подходы к выпуклой оболочке, упомянутые другими, не работают, когда в форме есть отверстия (как в случае с вашим примером тора 🍩).

Проблема, которую вы пытаетесь решить, называется реконструкцией поверхности. Окончательный меш не будет иметь внутренних точек, как вы хотели.

В Open3D для этого реализованы некоторые алгоритмы, и вы можете применить их к своим данным в Python.

Реконструкция поверхности

Чтобы преобразовать ваше облако точек numpy в использование Open3D

pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(xyz)

Другие вопросы по теме