Подогнать трехмерную фигуру для разбросанных данных с помощью matplotlib? - PullRequest
0 голосов
/ 05 июля 2019

У меня есть X, Y, Z файл, который при построении в виде трехмерного рассеяния создает следующее:

enter image description here

Я хотел бы создать трехмерную фигуру, соединив внешние точки этих двух «круглых распределений», или просто подогнать трехмерную фигуру (например, цилиндр) таким образом, чтобы позже я мог рассчитать объем этой фигуры. 3D форма. Есть идеи?

Данные:

0.200 0.080 3.311
0.200 0.080 3.325
0.200 0.080 3.340
0.200 0.080 3.354
0.200 0.080 3.369
0.200 0.080 3.384
0.200 0.080 3.398
0.200 0.080 3.413
0.200 0.080 3.428
0.200 0.085 3.281
0.200 0.085 3.296
0.200 0.085 3.311
0.200 0.085 3.325
0.200 0.085 3.340
0.200 0.085 3.354
0.200 0.085 3.369
0.200 0.085 3.384
0.200 0.085 3.398
0.200 0.085 3.413
0.200 0.085 3.428
0.200 0.085 3.442
0.200 0.085 3.457
0.200 0.090 3.267
0.200 0.090 3.281
0.200 0.090 3.296
0.200 0.090 3.311
0.200 0.090 3.325
0.200 0.090 3.340
0.200 0.090 3.354
0.200 0.090 3.369
0.200 0.090 3.384
0.200 0.090 3.398
0.200 0.090 3.413
0.200 0.090 3.428
0.200 0.090 3.442
0.200 0.090 3.457
0.200 0.090 3.472
0.200 0.090 3.486
0.200 0.095 3.281
0.200 0.095 3.296
0.200 0.095 3.311
0.200 0.095 3.325
0.200 0.095 3.340
0.200 0.095 3.354
0.200 0.095 3.369
0.200 0.095 3.384
0.200 0.095 3.398
0.200 0.095 3.413
0.200 0.095 3.428
0.200 0.095 3.442
0.200 0.095 3.457
0.200 0.095 3.472
0.200 0.095 3.486
0.200 0.095 3.501
0.200 0.095 3.516
0.200 0.100 3.281
0.200 0.100 3.296
0.200 0.100 3.311
0.200 0.100 3.325
0.200 0.100 3.340
0.200 0.100 3.354
0.200 0.100 3.369
0.200 0.100 3.384
0.200 0.100 3.398
0.200 0.100 3.413
0.200 0.100 3.428
0.200 0.100 3.442
0.200 0.100 3.457
0.200 0.100 3.472
0.200 0.100 3.486
0.200 0.100 3.501
0.200 0.100 3.516
0.200 0.100 3.530
0.200 0.105 3.311
0.200 0.105 3.325
0.200 0.105 3.340
0.200 0.105 3.354
0.200 0.105 3.369
0.200 0.105 3.384
0.200 0.105 3.398
0.200 0.105 3.413
0.200 0.105 3.428
0.200 0.105 3.442
0.200 0.105 3.457
0.200 0.105 3.472
0.200 0.105 3.486
0.200 0.105 3.501
0.200 0.105 3.516
0.200 0.105 3.530
0.200 0.110 3.325
0.200 0.110 3.340
0.200 0.110 3.354
0.200 0.110 3.369
0.200 0.110 3.384
0.200 0.110 3.398
0.200 0.110 3.413
0.200 0.110 3.428
0.200 0.110 3.442
0.200 0.110 3.457
0.200 0.110 3.472
0.200 0.110 3.486
0.200 0.110 3.501
0.200 0.110 3.516
0.200 0.115 3.369
0.200 0.115 3.384
0.200 0.115 3.398
0.200 0.115 3.413
0.200 0.115 3.428
0.200 0.115 3.442
0.200 0.115 3.457
0.200 0.115 3.472
0.200 0.115 3.486
0.200 0.120 3.428
0.200 0.120 3.442
0.200 0.120 3.457
0.200 0.120 3.472
0.200 0.120 3.486
0.350 0.080 3.428
0.350 0.085 3.296
0.350 0.085 3.311
0.350 0.085 3.325
0.350 0.085 3.340
0.350 0.085 3.354
0.350 0.085 3.369
0.350 0.085 3.384
0.350 0.085 3.398
0.350 0.085 3.413
0.350 0.085 3.428
0.350 0.085 3.442
0.350 0.085 3.457
0.350 0.085 3.472
0.350 0.085 3.486
0.350 0.085 3.501
0.350 0.090 3.267
0.350 0.090 3.281
0.350 0.090 3.296
0.350 0.090 3.311
0.350 0.090 3.325
0.350 0.090 3.340
0.350 0.090 3.354
0.350 0.090 3.369
0.350 0.090 3.384
0.350 0.090 3.398
0.350 0.090 3.413
0.350 0.090 3.428
0.350 0.090 3.442
0.350 0.090 3.457
0.350 0.090 3.472
0.350 0.090 3.486
0.350 0.090 3.501
0.350 0.090 3.516
0.350 0.090 3.530
0.350 0.095 3.267
0.350 0.095 3.281
0.350 0.095 3.296
0.350 0.095 3.311
0.350 0.095 3.325
0.350 0.095 3.340
0.350 0.095 3.354
0.350 0.095 3.369
0.350 0.095 3.384
0.350 0.095 3.398
0.350 0.095 3.413
0.350 0.095 3.428
0.350 0.095 3.442
0.350 0.095 3.457
0.350 0.095 3.472
0.350 0.095 3.486
0.350 0.095 3.501
0.350 0.095 3.516
0.350 0.095 3.530
0.350 0.095 3.545
0.350 0.095 3.560
0.350 0.100 3.267
0.350 0.100 3.281
0.350 0.100 3.296
0.350 0.100 3.311
0.350 0.100 3.325
0.350 0.100 3.340
0.350 0.100 3.354
0.350 0.100 3.369
0.350 0.100 3.384
0.350 0.100 3.398
0.350 0.100 3.413
0.350 0.100 3.428
0.350 0.100 3.442
0.350 0.100 3.457
0.350 0.100 3.472
0.350 0.100 3.486
0.350 0.100 3.501
0.350 0.100 3.516
0.350 0.100 3.530
0.350 0.100 3.545
0.350 0.100 3.560
0.350 0.100 3.574
0.350 0.100 3.589
0.350 0.105 3.267
0.350 0.105 3.281
0.350 0.105 3.296
0.350 0.105 3.311
0.350 0.105 3.325
0.350 0.105 3.340
0.350 0.105 3.354
0.350 0.105 3.369
0.350 0.105 3.384
0.350 0.105 3.398
0.350 0.105 3.413
0.350 0.105 3.428
0.350 0.105 3.442
0.350 0.105 3.457
0.350 0.105 3.472
0.350 0.105 3.486
0.350 0.105 3.501
0.350 0.105 3.516
0.350 0.105 3.530
0.350 0.105 3.545
0.350 0.105 3.560
0.350 0.105 3.574
0.350 0.105 3.589
0.350 0.110 3.237
0.350 0.110 3.252
0.350 0.110 3.267
0.350 0.110 3.281
0.350 0.110 3.296
0.350 0.110 3.311
0.350 0.110 3.325
0.350 0.110 3.340
0.350 0.110 3.354
0.350 0.110 3.369
0.350 0.110 3.384
0.350 0.110 3.398
0.350 0.110 3.413
0.350 0.110 3.428
0.350 0.110 3.442
0.350 0.110 3.457
0.350 0.110 3.472
0.350 0.110 3.486
0.350 0.110 3.501
0.350 0.110 3.516
0.350 0.110 3.530
0.350 0.110 3.545
0.350 0.110 3.560
0.350 0.110 3.574
0.350 0.110 3.589
0.350 0.115 3.237
0.350 0.115 3.252
0.350 0.115 3.267
0.350 0.115 3.281
0.350 0.115 3.296
0.350 0.115 3.311
0.350 0.115 3.325
0.350 0.115 3.340
0.350 0.115 3.354
0.350 0.115 3.369
0.350 0.115 3.384
0.350 0.115 3.398
0.350 0.115 3.413
0.350 0.115 3.428
0.350 0.115 3.442
0.350 0.115 3.457
0.350 0.115 3.472
0.350 0.115 3.486
0.350 0.115 3.501
0.350 0.115 3.516
0.350 0.115 3.530
0.350 0.115 3.545
0.350 0.115 3.560
0.350 0.115 3.574
0.350 0.115 3.589
0.350 0.120 3.267
0.350 0.120 3.281
0.350 0.120 3.296
0.350 0.120 3.311
0.350 0.120 3.325
0.350 0.120 3.340
0.350 0.120 3.354
0.350 0.120 3.369
0.350 0.120 3.384
0.350 0.120 3.398
0.350 0.120 3.413
0.350 0.120 3.428
0.350 0.120 3.442
0.350 0.120 3.457
0.350 0.120 3.472
0.350 0.120 3.486
0.350 0.120 3.501
0.350 0.120 3.516
0.350 0.120 3.530
0.350 0.120 3.545
0.350 0.120 3.560
0.350 0.120 3.574
0.350 0.120 3.589
0.350 0.125 3.311
0.350 0.125 3.325
0.350 0.125 3.340
0.350 0.125 3.354
0.350 0.125 3.369
0.350 0.125 3.384
0.350 0.125 3.398
0.350 0.125 3.413
0.350 0.125 3.428
0.350 0.125 3.442
0.350 0.125 3.457
0.350 0.125 3.472
0.350 0.125 3.486
0.350 0.125 3.501
0.350 0.125 3.516
0.350 0.125 3.530
0.350 0.125 3.545
0.350 0.125 3.560
0.350 0.125 3.574
0.350 0.130 3.369
0.350 0.130 3.384
0.350 0.130 3.398
0.350 0.130 3.413
0.350 0.130 3.428
0.350 0.130 3.442
0.350 0.130 3.457
0.350 0.130 3.472
0.350 0.130 3.486
0.350 0.130 3.501
0.350 0.130 3.516
0.350 0.130 3.530
0.350 0.130 3.545
0.350 0.130 3.560

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Вы можете использовать scipy.spatial.ConvexHull, чтобы получить внешние баллы и рассчитать объем:

from scipy import spatial
ch = spatial.ConvexHull(points)
print(ch.volume)

# to plot the surface
import pylab as pl
from mpl_toolkits.mplot3d import Axes3D
fig = pl.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
ax.plot_trisurf(points[:, 0], points[:, 1], points[:, 2], triangles=ch.simplices)
1 голос
/ 05 июля 2019

Следует отметить, что соединение внешних точек, обертывающих объект, и установка цилиндра (или любой другой базовой формы) - это две разные вещи. Для обтекания внешних точек (это называется проблемой 3D выпуклой оболочки), используйте pyhull библиотеку Python, которая является интерфейсом библиотеки Qhull . Qhull может найти минимальный объект обтекания и эффективно рассчитать его объем.

С другой стороны, базовая 3D-подгонка формы - это совсем другая тема. Вы можете обратиться к этому вопросу SO для получения дополнительной информации. После того, как вы получили цилиндр, вы можете выполнить расчет объема с помощью простой алгебры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...