Python STL 三维颗粒模型形状参数计算代码 - 圆度,球形度,内径比等
以下是使用 Python 计算 stl 三维颗粒模型各种形状参数的代码示例:\n\npython\nimport numpy as np\nfrom scipy.spatial import ConvexHull\n\ndef calculate_roundness(volume, surface_area):\n return (36 * np.pi * volume ** 2) ** (1/3) / surface_area\n\ndef calculate_sphericity(volume, surface_area):\n return (np.pi**(1/3) * 6**(2/3) * volume**(2/3)) / surface_area\n\ndef calculate_inner_diameter_ratio(volume, surface_area):\n return (6 * volume) ** (1/3) / surface_area\n\ndef calculate_rectangularity(volume, surface_area):\n return (volume ** (1/3)) / (surface_area ** (2/3))\n\ndef calculate_edge_angle_ratio(surface_area, perimeter):\n return surface_area / (perimeter ** 2)\n\ndef calculate_feret_aspect_ratio(points):\n min_x, min_y, min_z = np.min(points, axis=0)\n max_x, max_y, max_z = np.max(points, axis=0)\n return np.sqrt((max_x - min_x)**2 + (max_y - min_y)**2 + (max_z - min_z)**2) / max(max_x - min_x, max_y - min_y, max_z - min_z)\n\ndef calculate_ellipse_aspect_ratio(points):\n min_x, min_y, min_z = np.min(points, axis=0)\n max_x, max_y, max_z = np.max(points, axis=0)\n return np.sqrt((max_x - min_x)**2 + (max_y - min_y)**2) / max(max_x - min_x, max_y - min_y)\n\ndef calculate_feret_ellipse_circumference_ratio(points):\n min_x, min_y, min_z = np.min(points, axis=0)\n max_x, max_y, max_z = np.max(points, axis=0)\n return np.sqrt((max_x - min_x)**2 + (max_y - min_y)**2 + (max_z - min_z)**2) / (2 * (max(max_x - min_x, max_y - min_y) + 2 * np.sqrt(2) * np.abs(max_z - min_z)))\n\ndef calculate_bounding_rectangle_aspect_ratio(points):\n min_x, min_y, min_z = np.min(points, axis=0)\n max_x, max_y, max_z = np.max(points, axis=0)\n return np.sqrt((max_x - min_x)**2 + (max_y - min_y)**2) / (max(max_x - min_x, max_y - min_y))\n\ndef calculate_shape_factor(surface_area, volume):\n return (36 * np.pi * volume) / (surface_area ** 2)\n\ndef calculate_convexity(volume, convex_hull_volume):\n return volume / convex_hull_volume\n\ndef calculate_caliper_ratio(points):\n min_x, min_y, min_z = np.min(points, axis=0)\n max_x, max_y, max_z = np.max(points, axis=0)\n return max(max_x - min_x, max_y - min_y, max_z - min_z) / min(max_x - min_x, max_y - min_y, max_z - min_z)\n\ndef calculate_convex_hull_ratio(points):\n hull = ConvexHull(points)\n hull_volume = hull.volume\n min_x, min_y, min_z = np.min(points, axis=0)\n max_x, max_y, max_z = np.max(points, axis=0)\n cuboid_volume = (max_x - min_x) * (max_y - min_y) * (max_z - min_z)\n return cuboid_volume / hull_volume\n\n\n这些函数中,volume表示颗粒模型的体积,surface_area表示颗粒模型的表面积,points表示颗粒模型的顶点坐标数组。\n\n使用上述函数,可以计算出颗粒模型的圆度,球形度,内径比,矩形度,棱角性,等效Feret长短轴比,等效椭圆长短轴比,等效Feret椭圆周长比,外接矩形长短轴比,形状因子,凸度,卡尺比,凸包比等形状参数。
原文地址: https://www.cveoy.top/t/topic/puRX 著作权归作者所有。请勿转载和采集!