Files
mkdocs/doc/meshkernelpy/examples/14_contacts_generation.md
T
2026-10-10 21:56:35 +08:00

138 lines
3.7 KiB
Markdown

# 生成一维与二维网格之间的连接
本教程介绍使用 `meshkernel` 生成网格连接的基本方法。
[返回示例目录](index.md)
以下保留原笔记本的代码和已保存输出;转换过程中未重新执行代码。
```python
from meshkernel import MakeGridParameters, Mesh1d, Mesh2d, MeshKernel, GeometryList
from meshkernel.version import __version__
__version__
```
```text
'7.0.4'
```
导入其他所需的库。
```python
import numpy as np
from pathlib import Path
import matplotlib.pyplot as plt
```
```python
def plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0=None):
fig, ax = plt.subplots()
mesh1d_output_0.plot_edges(ax, color="blue")
mesh2d_output_0.plot_edges(ax, color="black")
if contacts_output_0:
contacts_output_0.plot_edges(ax, mesh1d_output_0, mesh2d_output_0, color="red")
ax.plot(
mesh1d_output_0.node_x, mesh1d_output_0.node_y, "o", color="blue", markersize=5
)
plt.show()
```
# 设置二维网格和一维网格
```python
# 创建基础网格
mk = MeshKernel()
make_grid_parameters = MakeGridParameters(
angle=0,
origin_x=0.0,
origin_y=0.0,
upper_right_x=100.0,
upper_right_y=100.0,
block_size_x=10.0,
block_size_y=10.0,
)
mk.curvilinear_compute_rectangular_grid_on_extension(make_grid_parameters)
mk.curvilinear_convert_to_mesh2d()
mesh1d_node_x = [0.0, 50.0, 100.0]
mesh1d_node_y = [20.0, 20.0, 20.0]
mesh1d_edge_nodes = [0, 1, 1, 2]
mesh1d = Mesh1d(
node_x=mesh1d_node_x, node_y=mesh1d_node_y, edge_nodes=mesh1d_edge_nodes
)
mk.mesh1d_set(mesh1d)
```
```python
mesh1d_output_0 = mk.mesh1d_get()
mesh2d_output_0 = mk.mesh2d_get()
contacts_output_0 = mk.contacts_get()
plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0)
```
![单元格 7 的绘图输出](images/14_contacts_generation_7_0.png)
## 计算连接
```python
node_mask = np.full(mesh1d.node_x.size, True)
```
#### 计算多重连接
```python
mk.contacts_compute_multiple(node_mask)
mesh1d_output_0 = mk.mesh1d_get()
mesh2d_output_0 = mk.mesh2d_get()
contacts_output_0 = mk.contacts_get()
plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0)
```
![单元格 11 的绘图输出](images/14_contacts_generation_11_0.png)
#### 计算单一连接
```python
x_coordinates = np.array([0.0, 100.0, 100.0, 0.0, 0.0], dtype=np.double)
y_coordinates = np.array([0.0, 0.0, 100.0, 100.0, 0.0], dtype=np.double)
area_selection = GeometryList(x_coordinates, y_coordinates)
mk.contacts_compute_single(node_mask, area_selection, projection_factor=0.0)
mesh1d_output_0 = mk.mesh1d_get()
mesh2d_output_0 = mk.mesh2d_get()
contacts_output_0 = mk.contacts_get()
plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0)
```
![单元格 13 的绘图输出](images/14_contacts_generation_13_0.png)
#### 根据指定点计算连接
```python
x_coordinates = np.array([10.000001], dtype=np.double)
y_coordinates = np.array([5.0], dtype=np.double)
point_cloud = GeometryList(x_coordinates, y_coordinates)
mk.contacts_compute_with_points(node_mask, point_cloud)
mesh1d_output_0 = mk.mesh1d_get()
mesh2d_output_0 = mk.mesh2d_get()
contacts_output_0 = mk.contacts_get()
plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0)
```
![单元格 15 的绘图输出](images/14_contacts_generation_15_0.png)
### 计算边界连接
```python
mk.contacts_compute_boundary(node_mask, search_radius=50.0)
mesh1d_output_0 = mk.mesh1d_get()
mesh2d_output_0 = mk.mesh2d_get()
contacts_output_0 = mk.contacts_get()
plot_mesh_and_contacts(mesh1d_output_0, mesh2d_output_0, contacts_output_0)
```
![单元格 17 的绘图输出](images/14_contacts_generation_17_0.png)