2024-08-28 22:07:43 +08:00
|
|
|
---
|
|
|
|
title: mbcp.presets.model
|
|
|
|
---
|
|
|
|
### **class** `GeometricModels`
|
|
|
|
### `@staticmethod`
|
|
|
|
### *method* `sphere(radius: float, density: float)`
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-08-29 13:46:59 +08:00
|
|
|
**説明**: 生成球体上的点集。
|
2024-08-28 22:07:43 +08:00
|
|
|
|
2024-08-29 13:46:59 +08:00
|
|
|
**返回**: List[Point3]: 球体上的点集。
|
2024-08-28 22:07:43 +08:00
|
|
|
|
2024-08-29 13:46:59 +08:00
|
|
|
**變數説明**:
|
|
|
|
> - radius:
|
|
|
|
> - density:
|
2024-08-28 22:07:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
<details>
|
2024-08-29 13:46:59 +08:00
|
|
|
<summary> <b>源碼</b> </summary>
|
2024-08-28 22:07:43 +08:00
|
|
|
|
|
|
|
```python
|
|
|
|
@staticmethod
|
|
|
|
def sphere(radius: float, density: float):
|
|
|
|
"""
|
|
|
|
生成球体上的点集。
|
|
|
|
Args:
|
|
|
|
radius:
|
|
|
|
density:
|
|
|
|
Returns:
|
|
|
|
List[Point3]: 球体上的点集。
|
|
|
|
"""
|
|
|
|
area = 4 * np.pi * radius ** 2
|
|
|
|
num = int(area * density)
|
|
|
|
phi_list = np.arccos([clamp(-1 + (2.0 * _ - 1.0) / num, -1, 1) for _ in range(num)])
|
|
|
|
theta_list = np.sqrt(num * np.pi) * phi_list
|
|
|
|
x_array = radius * np.sin(phi_list) * np.cos(theta_list)
|
|
|
|
y_array = radius * np.sin(phi_list) * np.sin(theta_list)
|
|
|
|
z_array = radius * np.cos(phi_list)
|
|
|
|
return [Point3(x_array[i], y_array[i], z_array[i]) for i in range(num)]
|
|
|
|
```
|
|
|
|
</details>
|
|
|
|
|